Puis-je optimiser mes if else avec des plages et variables aux noms différents ?
Bonjour,
J'ai conscience que le titre est sans doute mal trouvé, mais j'ai du mal à voir comment rédiger autrement.
Mon problème est le suivant :*j'ai un ensemble de fichiers (qu'on dira de type A, dans lesquels j'ai à chaque fois 3 cellules toujours nommées :*PtFaibles, PtForts, Date) et j'ai un fichier « tableau de bord » qui compile ces 3 valeurs pour chaque fichier A.
Quand j'ouvre un fichier de type A, le modifie, j'ai une macro pour faire la mise à jour dans mon tableau de bord si un contenu a changé. En l'état, je ne vois pas d'autre possibilité que de passer par une succession de if du type :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
'Si la valeur de ma cellule Date a changé, la modifier et valider le marqueur CtrlDate, sinon, ne rien faire
If Range("Date").Rows(ColNumAction) = Date Then 'Rows(ColNumAction) correspond à la ligne propre à mon fichier de type A initial
CtrlDate = False
Else
Range("Date").Rows(ColNumAction) = Date
CtrlDate = True
End If
'Si la valeur de ma cellule PtFaibles a changé, la modifier et valider le marqueur CtrlPtFaibles, sinon, ne rien faire
If Range("PtFaibles").Rows(ColNumAction) = PtFaibles Then
CtrlDate = False
Else
Range("PtFaibles").Rows(ColNumAction) = PtFaibles
CtrlDate = True
End If
'Si la valeur de ma cellule PtForts a changé, etc..
if ...
Else...
End if |
Je me demandais dans quelle mesure il était possible de passer par une boucle pour simplifier, notamment si je suis amené à copier de nouvelles cellules pas encore créées ?
J'avais pensé copier mes ranges dans un Array et utiliser un for, ce qui me permet effectivement de passer d'un range à l'autre, mais du coup, je suis à nouveau bloqué pour mes valeurs de cellules qui ont aussi un nom différent. Il me faudrait à nouveau passer par un Array.
Voyez-vous plus simple ?
J'espère que je ne suis pas trop incompréhensible, d'autant que je n'ai qu'un petit niveau de vrai débutant sur vba et la programmation en général.
Merci par avance !