Bonjour et Bonne année à tous

Après plusieurs heures à m'arracher les cheveux sur un problème de variable, je me tourne vers vous (avant de devenir chauve)


Classeur_Doublons_essais.xls

Sur ma macro - Sub a_Inventaire_H_input()
Dans le module N° 1 :

J'ai une formule qui fonctionne :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
If ncond = 1 Then: If Cells(i, cond1) <> Cells(i - 1, cond1) Then GoTo 4 'Si la cellule X1 est différente de X1 -1 …
 
If ncond = 1 Then: Set q = Cells(i, cond1): Set v = Cells(i - 1, cond1): If (q) <> (v) Then GoTo 4 '(Fonctionne aussi)
 
If ncond = 2 Then: Set q = Cells(i, cond1): Set v = Cells(i - 1, cond1): Set r = Cells(i, cond2): Set w = Cells(i - 1, cond2): If (q) <> (v) Or (r) <> (w) Then GoTo 4 '(Marche très bien également)
Je désire pouvoir choisir l'opérateur de comparaison et donc, l'utiliser sous forme d'une variable, pour pouvoir choisir l'opérateur désiré (<> ou = ou < ou >)

J'ai donc essayé comme ceci

Code : Sélectionner tout - Visualiser dans une fenêtre à part
If ncond = 1 Then: Set q = Cells(i, cond1): Set v = Cells(i - 1, cond1): If (q) (oper) (v) Then GoTo 4
Conclusion : ça ne fonctionne pas

puis

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
If ncond = 1 Then: Set q = Cells(i, cond1): Set v = Cells(i - 1, cond1): If ((q) (oper) (v)) Then GoTo 4
 
'If ncond = 1 Then: Set q = Cells(i, cond1): Set v = Cells(i - 1, cond1): If (q) & (oper) & (v) Then GoTo 4
 
If ncond = 1 Then: Set q = Cells(i, cond1): Set v = Cells(i - 1, cond1): If (q) (oper) (v) Then GoTo 4
Puis de bien d'autres façons, en ajoutant ou retirant des & ou des ( ) ou des [ ] ou des virgules : Nada

La macro plante, mais lorsque je mets le pointeur de souris sur chaque variable : la variable est OK : j'ai bien le contenu de ma première cellule, l'opérateur désiré et le contenu de ma 2 ème cellule.
Je tourne en rond et ne comprend pas pourquoi ça ne fonctionne pas.

Y a-t-il une astuce que je ne connais pas ?

J'ai essayé avec « evaluate »

Pour ne pas avoir d'erreur, il m'a fallu mettre la variable de l'opérateur entre parenthèses.
Mais j'ai toujours un problème : ça ne fonctionne pas sur mon tableau.

Je me suis aperçu que ça ne fonctionne Que si la totalité de ma colonne contient uniquement des chiffres, en ce cas là, c'est OK

(Si je choisis la colonne la colonne H au lieu de la colonne J (ou d'une autre), ça fonctionne)

Mais si j'ai un titre de colonne avec du texte ou si j'ai du texte ailleurs dans ma colonne, comme c'est le cas dans mon tableau : ça ne fonctionne pas ==> Erreur d'exécution "13" ; incompatibilité de type

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
'Ne fonctionne qu'avec des chiffres uniquement :
If ncond = 1 Then: Set q = Cells(i, cond1): Set v = Cells(i - 1, cond1): If Evaluate(q & (oper) & v) Then GoTo 4
Alors que la formule ci-dessous fonctionne, que ce soit avec du texte ou des chiffres (mais sans pouvoir choisir l'opérateur) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
'Fonctionne avec chiffres ou lettres:
If ncond = 1 Then: Set q = Cells(i, cond1): Set v = Cells(i - 1, cond1): If (q) <> (v) Then GoTo 4
Celle ci, fonctionnant, évidement très bien aussi :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
If ncond = 1 Then: If Cells(i, cond1) <> Cells(i - 1, cond1) Then GoTo 4

(J'ai mis des valeurs par défaut aux input-box, pour gagner du temps)

(c'est certainement tout bête, mais je débute…)

J'ai consulté de très nombreux sites et n'ai toujours pas trouvé de solution.

Plus tard je referai une autre macro par Userform, mais pour l'instant, je souhaite garder les inputsBox.

Merci de votre aide
Bonne journée