Variable range et comparasion d'égalité sur une plage différente
Bonjour,
je suis sur Excel 2003, je travaille sur un programme VBA pour un bon de commande.
Je cherche à créer une variable comportant une plage de cellule définie et de comparer avec d'autres plages sur une feuille différentes pour déterminer si elles sont égales ou pas.
au début du code je crée la variable "i":
Sheets("Feuil1").Select
Dim i As Range
Set i = Range("E10:I10") 'la plage de cellule définie' et à la fin du code je voudrais la comparer à d'autre plage qui se trouve sur la Feuil2
et savoir si il y a égalité. si il y en a une, une commande est ensuite effectuée.
Sheets("Feuil1").Select
If Range("I10") = 0 Then
Sheets("Feuil2").Select
If i = Range("E26:I26") Then
Range("E26:I26").Select
Selection.ClearContents
End If
End If Ce code ne fonctionne pas, mais l'idée est pourtant simple est claire. Peu etre existe - il une manière différente de l'exprimer.
ou alors comment formuler une égalité de deux plage de cellule de deux feuilles différentes?
par exemple :
If Sheets("Feuil1")Range("E10:I10") = Sheets("Feuil2")Range("E26:I26") Then ....mais cette expression ne fonctionne pas
Merci de votre aide !
Bonjour,
D'abord laisse-moi te dire que tu heurtes (involontairement sans doute) des habitudes multi-décennales et quasi-générales d'utilisation de quelques lettres de l'alphabet telles i, j, n... comme variables de type numérique Integer ou Long... (ce qui a probablement été généré par des habitudes d'écritures mathématiques antérieures...). Rien n'empêche des utilisations différentes mais ce ne sera jamais de nature à faciliter les échanges, car tu obliges à contrevenir à des réflexes spontanés d'interprétation, donc un effort mental supplémentaire...
Ensuite tu peux affecter les valeurs d'une plage à une autre plage, mais comparer globalement les valeurs de deux plages, tu auras une erreurs. Il te faut passer par une comparaison des valeurs de cellule par cellule respectivement de chacune des plages.
Et plutôt que de le faire en utilisant une variable Range, tu gagnerais à affecter les valeurs de chaque plage à comparer à une variable (non typée, soit de type Variant, qui accueillera un tableau) [l'initialisation s'écrit à peut près de la même façon (il faut omettre le Set car alors tu n'affecte pas une référence d'objet mais des valeurs).
Ce qui te permet d'opérer la comparaison membre à membre, au moyen d'une boucle, sur des tableaux, hors Excel, donc plus rapide...
Plus rapide une fois que tu auras fait disparaître tout Select de ton code (lesquels constituent le handicap parfait pour ralentir VBA !
Pour aller plus loin il faudrait en dire une plus et de façon plus précise sur tes intentions à l'issue de la comparaison.
Cordialement.