Forum Clubic

Excel - Formule qui ne se met pas à jour

Salut,
J’ai un léger problème sur un petit programme Excel 2003 que voici:

Classeur test

J’ai 6 boutons notés 0 - 1 - 2 - 3 - 4 et 5

J’ai 6 colonnes pour ces 6 chiffres
lorsque je clique sur 3, un “1” viens s’inscrire dans la colonne “3” sur la 1ere ligne du tableau
lorsqu’ensuite je clique sur 1, un “1” viens s’inscrire dans la colonne “1” sur la 2eme ligne du tableau
etc.

j’ai une ligne (police bleue) qui fait la somme des “1” par colonne

et une autre ligne (police rouge) avec laquelle j’ai un problème,
cette ligne doit me dire depuis combien de tour un chiffre n’est pas tombé

j’ai trouvé cette formule: =L2+7-EQUIV(RECHERCHE(450;B:B);B:B)
La cellule L2 est un compteur du nombre de tour
L2+7 = sert à calculer la ligne du dernier tour (tableau commençant à la ligne 7)
EQUIV(RECHERCHE(450;B:B);B:B) = me rapporte le numéro de ligne de la dernière cellule non vide de la colonne B (colonne “0”)

Donc ligne du dernier tour moins ligne du dernier “1” inscrit dans la colonne, ça me donne bien l’intervalle

mais ça ne marche pas comme prévu, je voudrai déjà que cette case compte à partir du début car là elle compte dès qu’un “1” est inscrit.
Ensuite il faut qu’elle se mette à 0 lorsque un nouveau “1” s’inscrit, mais on dirait que la formule ne le remarque pas, elle se met à jour bizarrement

Si vous pouviez m’aider à corriger mes erreurs, j’en serai très ravi !
merci :slight_smile:
Edité le 15/08/2008 à 17:43

J’ai trouvé un autre moyen d’arriver à mes fins:

sur la macro de chaque bouton
je met la valeur de la case corsspondante sur la ligne 4 à -1, puis je renvois à une autre macro qui ajoute 1 à toutes les case de la ligne 4
donc la case du chiffre sélectionnée arrive à 0, alors que les autres continuent à s’incrémenter.
par contre le tableau que je vous présente se compose de 5 boutons et 5 colonnes, mais le vrai en comporte beaucoup plus !

donc cela donne ça:
Sub plussin()
Cells(4, 2).Value = Cells(4, 2).Value + 1
Cells(4, 3).Value = Cells(4, 3).Value + 1
Cells(4, 4).Value = Cells(4, 4).Value + 1
Cells(4, 5).Value = Cells(4, 5).Value + 1
Cells(4, 6).Value = Cells(4, 6).Value + 1
Cells(4, 7).Value = Cells(4, 7).Value + 1
Cells(4, 8).Value = Cells(4, 8).Value + 1
Cells(4, 9).Value = Cells(4, 9).Value + 1
Cells(4, 10).Value = Cells(4, 10).Value + 1
Cells(4, 11).Value = Cells(4, 11).Value + 1
Cells(4, 12).Value = Cells(4, 12).Value + 1
Cells(4, 13).Value = Cells(4, 13).Value + 1
Cells(4, 14).Value = Cells(4, 14).Value + 1
Cells(4, 15).Value = Cells(4, 15).Value + 1
Cells(4, 16).Value = Cells(4, 16).Value + 1
Cells(4, 17).Value = Cells(4, 17).Value + 1
Cells(4, 18).Value = Cells(4, 18).Value + 1
Cells(4, 19).Value = Cells(4, 19).Value + 1
Cells(4, 20).Value = Cells(4, 20).Value + 1
Cells(4, 21).Value = Cells(4, 21).Value + 1
Cells(4, 22).Value = Cells(4, 22).Value + 1
Cells(4, 23).Value = Cells(4, 23).Value + 1
Cells(4, 24).Value = Cells(4, 24).Value + 1
Cells(4, 25).Value = Cells(4, 25).Value + 1
Cells(4, 26).Value = Cells(4, 26).Value + 1
Cells(4, 27).Value = Cells(4, 27).Value + 1
etc.
End Sub

et autant de ligne en plus pour la macro “moinzin” (-1)

Donc ça fonctionne comme ça, mais j’ai l’impression que le calcul est lourd lorsque que je clique sur un bouton.

Mon problème est résolu, mais pour ma gouverne, je suis à l’écoute si quelqu’un a une solution pour simplifier toutes ces lignes.

Merci pour ceux qui auront essayé de chercher un minimum :stuck_out_tongue:
@+

Ta méthode n’est pas mauvaise, mais s’agissant d’une opération répétitive, tu as intérêt à employer une boucle pour traiter toutes tes colonnes d’un coup :
for each c in range(“B4”, range(“B4”).end(xltoright))
c.value = c.value + 1
next

edit :
Sinon, pour en revenir à ta première question, tu peux aussi rechercher la dernière cellule effectivement utilisée dans chaque ligne en te basant sur la fonction
Range(“A65536”).End(xlup)
et ensuite utiliser les numros de ligne, soit par .row() en VBA, soit par LIGNE() en excel
Edité le 16/08/2008 à 09:12

Merci de ta réponse,
en effet cela me permet de remplacer la multitude de lignes dans la macro plussin et moinzin.

je pensais au début que je devais spécifier ce à quoi correspond “c” dans “for each c”
Mais apparemment non, “c” correspond à cells par défaut dans VBA ?

merci
Edité le 16/08/2008 à 15:31

Normalement, oui, tu devrais spécifier le type de chacune de tes variables avec une instruction DIM en tête de programme ou de sub/fonction.
D’ailleurs, si tu prends la précaution de mettre en début de programme
option Explicit
tu auras une erreur si tu essaies d’utiliser une variable non déclarée.

Dans le cas contraire, le VBA sait attribuer un type en fonction du contexte
Ici c sera de type Range, puisque tu demandes de balayer un Range.
D’où l’utilisation de c.value pour en modifier le contenu