Problème opérateur dans variable - [Résolu]

Toine45

XLDnaute Junior
Bonjour et Bonne fête de fin d'année à tous

Après plusieurs heure à m'arracher les cheveux sur un problème de variable, je me tourne vers vous (avant de ne plus en avoir)

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

J'ai une formule qui fonctionne :

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

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

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 mis des valeurs par défaut aux input-box, pour gagner du temps)

PS Je ne pourrais pas répondre avant le 2 ou 3 janvier
Merci à ceux qui ce pencherons sur mon problème (c'est certainement tout con, mais je débute…)

Bon réveillon !
 

Pièces jointes

  • Classeur_Doublons_essais.xls
    148 KB · Affichages: 23
Dernière édition:

Toine45

XLDnaute Junior
Re : Problème opérateur dans variable

Bonjour à tous et meilleurs vœux pour cette nouvelle année

Merci PierreJean pour ta réponse, Je ne connaissais pas "evaluate"

Ça m'a permis d'avancer légèrement (après pas mal d'essais infructueux)

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

'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) :
'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 :
'If ncond = 1 Then: If Cells(i, cond1) <> Cells(i - 1, cond1) Then GoTo 4

Quelqu'un aurait il une autre piste pour que ça fonctionne aussi avec du texte ????

Merci d'avance

(Jai remplacé le fichier joint, pour avoir les modifications que j'ai effectué)

Question subsidiaire :
est-il possible de raccourcir et simplifier la macro (au niveau des choix des colonnes ça fait écrire beaucoup de lignes, il y a certainement plus simple style "for colonne A to colonne ZZ" ou par des "case" ) tout en conservant les inputsBox et les mêmes fonctions. Plus tard j'en referai une autre par Userform, mais pour l'instant, je souhaite garder les inputsBox.

Bonne journée à tous
 
Dernière édition:

Toine45

XLDnaute Junior
Re : Problème opérateur dans variable

Bonjour à tous
Je vois qu'il n'y a pas que moi qui sèche, ça me console un peu...
J'ai consulté de très nombreux sites et n'ai toujours pas trouvé de solution.

Personne n'aurait une autre piste ?

Bonne soirée
 

pierrejean

XLDnaute Barbatruc
Re : Problème opérateur dans variable

Re

Voici une fonction personnalisée qui accepte les variables string et numériques

Code:
Function evaluation(cellule1, oper, cellule2)
Select Case oper
Case "<>"
  evaluation = cellule1 <> cellule2
Case "="
  evaluation = cellule1 = cellule2
Case ">"
  evaluation = cellule1 > cellule2
Case "<"
  evaluation = cellule1 < cellule2
Case ">="
  evaluation = cellule1 >= cellule2
Case "<="
  evaluation = cellule1 <= cellule2
End Select
End Function

Par ailleurs je regarde pour simplifier ton Vba mais j'ai quelques problèmes pour savoir ou tu veux en venir exactement
 

Toine45

XLDnaute Junior
Re : Problème opérateur dans variable

Bonjour à tous
Merci PierreJean pour le temps que tu as passé sur mon fichier.
J'ai finalement résolu mon problème en faisant simplement des sauts selon le choix de l'opérateur, après avoir ralongé un peu ma macro.
Il y a certainement possibilité de la raccourcir de beaucoup, mais je n'ai pas encore les compétences pour.
ça fonctionne : c'est pour moi le principale
Bonne soirée
je passe donc en "Résolu"
 

Pièces jointes

  • Classeur_Doublons_essais_3.xls
    141.5 KB · Affichages: 17

Discussions similaires

Réponses
0
Affichages
155

Statistiques des forums

Discussions
312 310
Messages
2 087 119
Membres
103 478
dernier inscrit
Frederic Lagger