Code VBA et références relatives

Bonjour le forum,

Je ne suis pas assez calé en VBA pour savoir si une solution à mon problème existe.

Lorsque j'écris des macros avec des références à des n° de ligne, si j'insère de nouvelles lignes ou si j'en supprime je suis obligé de reprendre la macro, car les références ne se modifient pas automatiquement.

Je voudrais savoir s'il existe un moyen ou une instruction pour résoudre ce problème.

Par exemple, lorsque j'écris le code suivant :

        For i = 117 To 5 Step -1
            If Cells(i, 13) <= 59 Then Cells(i, 13).Interior.ColorIndex = 6

        Next i

Si je rajoute des lignes ou si j'en supprime, l'instruction :

For i = 117 To 5 Step -1

peut-elle se modifier automatiquement.

Merci.

Salut Sergio,

en supposant que la première ligne (5) soit fixe, tu recalcules la valeur de la dernière ligne de tes données.

Si la première ligne est appelée à varier, il nous faut savoir comment elle varie, quelles sont les données avoisinnantes..., bref un fichier!

Ci-dessous, iRow calcule la dernière ligne sur base de la colonne A (Cells(Rows.Count, 1) : à adapter à ta situation.

iRow = Cells(Rows.Count, 1).End(xlUp).Row
For i = iRow To 5 Step -1
    If Cells(i, 13) <= 59 Then Cells(i, 13).Interior.ColorIndex = 6
Next

A+

bonjour curulis57,

En fait ma question se posait d'une manière générale, car j'ai pas mal de feuilles Excel avec des macros qui font référence à des lignes, et à chaque fois que je supprime ou j'insére une ligne il faut corriger la macro en conséquence.

Pour répondre à ta demande, j'ai joint un fichier. Dans ce fichier, il y a actuellement 113 personnes, mais si des personnes quittent l'association ou s'il y a de nouveaux membres, il faudra que je corrige mon code.

Merci encore de t'intéresser à mon problème.

29exemple.zip (47.26 Ko)

Salut Sergio,

dans le cas précis de ton fichier (mise en couleur colonnes M, W, AG, AQ), aucune macro n'est nécessaire, en fait : une MFC ferait très bien l'affaire!

A+

Bonjour curulis57,

Effectivement j'aurais pu faire la mise en couleur des cellules par des MFC, le problème est qu'avec XL2003 je ne peux avoir que trois MFC et cela n'est pas suffisant, surtout que j'utilise déjà une MFC pour les joueurs ou non joueurs.

Très bonne journée.

Salut Sergio,

voilà qui devrait régler ton problème pour l'instant...

Public Sub CalculColor(ByVal iRow As Integer)
'
For x = 1 To 4
    iCol = 3 + (x * 10)
    For y = 1 To 8
        iFlag = IIf(y < 8, 55 + (y * 5), 120)
        If Cells(iRow, iCol) < iFlag Then
            iColor = Choose(y, 6, 4, 15, 28, 26, 45, 3, 39)
            Cells(iRow, iCol).Interior.ColorIndex = iColor
            Exit For
        End If
    Next
Next
'
End Sub

J'ai installé un bouton... inutile pour le traitement de la feuille entière. Inutile car la procédure CHANGE aura déjà fait tout le boulot : c'est juste pour que tu suives le raisonnement!

Avec plaisir!

A+

17fichier2017.xlsm (92.12 Ko)

Bonjour,

et pour répondre de façon générale à ta question : nomme ta cellule et utilise ce nom dans vba.

If range("ton_nom") <= 59

eric

Bonjour curulis57, bonjour eriiic,

Merci pour vos réponses, mais j'ai deux questions :

Pour curulis57, la macro se plante avec le message suivant : "Impossible de sortir du mode création, le contrôle 'cmdGO' ne peut pas être créé."

Pour eriiic, de quelle cellule s'agit-il ? peux-tu me donner un peu plus de précision ?

Merci encore pour votre aide

En général la première de la plage qui t'intéresse.

En cas d'insertion ou suppression de lignes/colonnes le nom suivra.

eric

Bonjour eriiic,

Merci pour cette précision.

Très bonne soirée.

Rechercher des sujets similaires à "code vba references relatives"