XL 2016 Comportement aléatoire dans array

Phillip

XLDnaute Occasionnel
Bonjour,

J'ai un comportement bizarre avec un array

Voici le code que j'ai écrit, en tous cas qui ressemble à mon vrai fichier....
VB:
Sub TEST()


poste1 = 16
poste2 = 1
poste3 = 2
poste4 = 30
poste5 = 45
poste6 = 67


Mon_Tableau = Array(poste1, poste2, poste3, poste4, poste5, poste6)
    
For i = LBound(Mon_Tableau) To UBound(Mon_Tableau)
    For j = LBound(Mon_Tableau) To UBound(Mon_Tableau)
    
        If Mon_Tableau(i) = 1 And Mon_Tableau(j) = 16 Or Mon_Tableau(j) = 16 And Mon_Tableau(i) = 1 Then
        Cells(1, 2).Value = "variable 1"
        ElseIf Mon_Tableau(i) = 2 And Mon_Tableau(j) = 30 Or Mon_Tableau(j) = 30 And Mon_Tableau(i) = 2 Then
        Cells(2, 2).Value = "Variable2"
        ElseIf Mon_Tableau(i) = 45 And Mon_Tableau(j) = 67 Or Mon_Tableau(j) = 45 And Mon_Tableau(i) = 67 Then
        Cells(3, 2).Value = "variable 3"
        ElseIf Mon_Tableau(i) = 30 And Mon_Tableau(j) = 2 Or Mon_Tableau(j) = 2 And Mon_Tableau(i) = 30 Then
        Cells(4, 2).Value = "variable 4"
        ElseIf Mon_Tableau(i) = 16 And Mon_Tableau(j) = 67 Or Mon_Tableau(j) = 67 And Mon_Tableau(i) = 16 Then
        Cells(5, 2).Value = "variable 5"
              
        End If
    Next j
Next i
End Sub

Comme vous le voyez, j'ai un doublon dans mes recherche (2 et 30). Dans ce fichier, ça marche, mais dans mon fichier original, cela ne marchait pas. Cela me remplissait bien la cellule pour la première occurrence, mais rien pour la 2°. J'ai donc fait ce code test et suis très étonné qu'il marche...!!! Alors, dans mon code initila, j'ai changé l'ordre des paramètres i et j dans mes "if" et là ça marche pour les 2 occurrences !

Mystère !! Bizarre ? Quelqu'un pour éclairer ma lanterne ?

Merci

Cordialement

Phillip
 

eriiic

XLDnaute Barbatruc
Bonjour,

rien à voir mais pourquoi ne pas mettre directement tes valeurs dans l'array ?
En plus tu fais 2 fois les même tests ?!?
Il te manque des notions d'algèbre a AND b = b AND a, pas la peine de faire les 2.

Pour ta question, si tu ne connais pas l'ordre de priorité des opérateurs AND et OR, utilise des parenthèses.
Pour info c'est Not And Or Xor Eqv Imp
eric
 

Phillip

XLDnaute Occasionnel
Je ne mets pas directement les valeurs dans l'array, car ce sont des variables calculées en amont (pour l'exemple, j'ai mis des constantes).
Et oui, je fais 2 fois les mêmes tests parfois car le résultat de l'un va dans un tableau excel, et dans un autre tableau....Tu suggères que le code ci-dessous marcherait, et que je n'ai pas besoin de faire 2 fois le test ? Hmmm...IL faut que je vérifie sur mon tableau réel...
VB:
ElseIf Mon_Tableau(i) = 30 And Mon_Tableau(j) = 2 Or Mon_Tableau(j) = 2 And Mon_Tableau(i) = 30 Then
        Cells(4, 2).Value = "variable 4"
        cells(9,2).value='variable 4"'

Et enfin, je ne comprends pas ta phrase :
Pour ta question, si tu ne connais pas l'ordre de priorité des opérateurs AND et OR, utilise des parenthèses.
Pour info c'est Not And Or Xor Eqv Imp

Merci en tous cas !

Phillip
 

eriiic

XLDnaute Barbatruc
Houlala...
Je n'avais pas du tout dit ça mais :
VB:
If Mon_Tableau(i) = 1 And Mon_Tableau(j) = 16 Then
est suffisant, inutile de rajouter Or Mon_Tableau(j) = 16 And Mon_Tableau(i) = 1 qui est la même chose.
Mais en fait je n'avais pas vu l'inversion i/j donc n'a plus de valeur. C'était une erreur de ma part.
Tant mieux si ça a pu te faire voir la tienne.

Pour l'ordre des priorité AND est executé avant OR, ce qui semble être ton besoin.
Mais si tu as un doute il faut utiliser les ( ) qui seront exécutées en premier :
(Mon_Tableau(i) = 30 And Mon_Tableau(j) = 2) Or (Mon_Tableau(j) = 2 And Mon_Tableau(i) = 30)
ainsi plus d'ambiguïté pour toi
eric
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 221
Messages
2 086 388
Membres
103 199
dernier inscrit
ATS1