Incrementer une cellule a chaque validation de la feuille
Bonjour,
je pensais que la programmation, c'était comme le velo et que sa ne s'oublier pas :s
mais je me trompe on dirais, ou alors ma mémoire me laisse tomber :p
bref rentrons dans le vif du sujet
je souhaiterais qu'a chaque fois qu'une valeur numérique de la colonne C change (en + ou en -) la cellule N (correspondante, cad sur la même ligne) s'incrémente de 1.
exemple:
je met 3 dans C1, j'appuie sur entrer, il faut que la case N1 passe a N1+1 donc 1
je met 2 dans C99, j'appuie sur entrer, il faut que la case N99 passe a N99+1 donc 1
je met 56 dans C1, j'appuie sur entrer, il faut que la case N1 passe a N1+1 donc 2
j'ai commencer a réfléchir un peut, coter théorique, dans this workbook, il faut que je lui mette un truc du genre
Private Sub Worksheet_Change() // a chaque changement donc en théorie a chaque fois que j'appuie sur entrer
incrementer() //exécute la fonction incrémenter
End Sub // fin
Il faut maintenant remplir la fonction incrementer()
a) il faudrait définir la ligne de la colonne N
b) sélectionner la case correspondante
c) incrémenter la valeur de cette case
la je coince ^^ car je me pose plein de question
pour trouver la ligne, je voulez me base sur la cellule active, mais vu que incrémenter() sera exécuter après la validation de la feuille, elle sera exécuter après que la cellule active est changer ( je suis en C1, jappuis sur entrer, je passe en C2 )
Est ce que la validation de la feuille marche aussi avec fleche droite et fleche gauche ?
pour la sélection de la case,
Sub Selection()
???? //trouver les coordonées de la cellule a incrementer
worksheet("mafeuille").range("celluleAModifier").activate // activation de la cellule a incrementer
End Sub
pour incrementer, est ce que ceci pourrais convenir:
Sub incrementer() // Debut de la fonction
dim val as integer // declaration des variables
selection() // executer la fonction selectionner la cellule N correspondante
Val = activecell.value // val prend la valeur de la cellule active
Activecell.value = Val + 1 // la cellule active est incrementer de 1
End Sub // fin de la fonction
Bonsoir,
Tu peux effectivement faire comme tu l'expliques mais pour ce que tu demandes on peut faire plus court.
- clique droite sur l'onglet de la feuille concernée
- choisis "visualiser le code"
- Dans la fenetre VBA qui apparait, place le code ci-dessous puis enregistre ton fichier
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
'Macro Dan pour Narfe le 4/07/09
'http://www.excel-pratique.com/forum/viewtopic.php?t=12679
Dim num As Integer
If Not Intersect(Target, Range("C1:C" & Range("C65536").End(xlUp).Row)) Is Nothing Then
num = Target.Offset(0, 11)
Target.Offset(0, 11) = num + 1
End If
End Sub
Amicalement
Dan
Sa marche du tonnerre
Franchement bien jouer ! problème régler en 6 lignes de codes
j'ai trop perdu la main
Encore merci
Bonjour, je voulais faire une modif mais j'ai du me planter quelque part :
Je voudrais :
je met 8 dans D1, j'appuie sur entrer.
a) garde la valeur D1 dans val_incr
b) garde la valeur C1 dans val_C1
c) calcule la nouvelle valeur de C1 ( C1 = C1 - D1)
d) efface D1
e) calcule la nouvelle valeur de O1 ( O1 = O1 + D1)
code de la solution précédente que j'ai modifier mais ne fonctionne plus ^^ :
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
'Macro Dan pour Narfe le 4/07/09
'https://www.excel-pratique.com/forum/viewtopic.php?t=12679
Dim num As Integer
Dim val_incr As Integer
Dim val_C1 As Integer
If Not Intersect(Target, Range("D1:D" & Range("D65536").End(xlUp).Row)) Is Nothing Then
val_incr = D1 'valeur a additionner a O
val_C1 = C1 'valeur de C1 avant modif
Target.Offset(0, -1) = val_C1 - val_incr 'nouvelle valeur de C1
num = Target.Offset(0, 11) 'valeur de O1 avant modif
Target.Offset(0, 11) = num + val_incr 'nouvelle valeur de O1
End If
End Sub
en admettant que la cellule active est D1
Si j'écrit Target.Offset(0,-1) je suis bien sur la cellule C1 ?
re,
val_incr = D1 'valeur a additionner a O
val_C1 = C1 'valeur de C1 avant modif
mets :
val_incr = Target
val_C1 = Target.offset(0,-1)
Amicalement
Dan
décidément, tu est trop fort
sa marche au poils !!!
Merci