Recherche multicritères en VBA à partir de plage nommée

  • Initiateur de la discussion Initiateur de la discussion seb26000
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

seb26000

XLDnaute Occasionnel
Bonjour

J’ai un problème pour réaliser une recherche multicritères en VBA à partir de plages nommées (equivalent à sommeprod en excel)
Voici le fonctionnement souhaité :
- Dans l’onglet « DEMANDE », l’utilisateur remplit différents champs notamment « TR », « S.E. », « Num » et « Bi ».
- Dans l’onglet « DONNEES », sont stockées les valeurs issues de l’onglet « DEMANDE » après validation.

J’ai nommée différentes plages de données, notamment :
-TRANCHE : Colonne A où sont stockées les valeurs « TR » issues de l’onglet « DEMANDE »
- SYSTEME_ELEMENTAIRE : Colonne B où sont stockées les valeurs « S.E. » issues de l’onglet « DEMANDE »
- NUMERO : Colonne C où sont stockées les valeurs « Num » issues de l’onglet « DEMANDE »
- BIGRAMME : Colonne D où sont stockées les valeurs « Bi » issues de l’onglet « DEMANDE »
- DATE_DEMANDE : Colonne I où sont stockées les dates des différentes demandes en moment de leur validation dans l’onglet « DEMANDE »
- DATE_POSE : Colonne S qui permettra de faire un test pour enregistrer ou non une nouvelle demande (j’expliquerai plus bas le fonctionnement de ce test)
- NUMERO_DEMANDE : Colonne J qui permettra éventuellement de renvoyer une valeur à l’issue d’un test (j’expliquerai plus bas le fonctionnement de ce test)

Voici le problème, j’ai créé en VBA en module 2, un test qui consiste de vérifier si les valeurs saisies dans l’onglet « DEMANDE » : TR & S.E. & Num & Bi, existent déjà dans l’onglet « DONNEES » et si tel est le cas, on contrôle la présence d’une valeur ou non dans la colonne « DATE DE POSE ». Si une valeur est présente alors on autorise la validation de la saisie, sinon un message est renvoyé à l’utilisateur indiquant que la demande existe déjà en précisant sa date (issue de DATE_DEMANDE) et le numéro de cette demande (NUMERO_DEMANDE) et la macro s’arrête.

-----------------------------------------------------------------------------------------
Sub controle_presence()

Dim TR As String
Dim SE As String
Dim NUM As String
Dim bi As String


Sheets("DEMANDE").Select
TR = Range("J5")
SE = Range("M5")
NUM = Range("Q5")
bi = Range("V5")

Resul = Evaluate("=sum((TRANCHE=" & TR & ")*(SYSTEME_ELEMENTAIRE=" & SE & ")*(NUMERO=" & NUM & ")*(BIGRAMME=" & bi & ")*(DATE_POSE=""""))")

Range("A2") = Resul

End Sub

-----------------------------------------------------------------------------------------

Pour vérifier le test, j’ai fait apparaître le résultat du code en « A2 » mais il reste toujours à 0 quelque soit les valeurs….

Qui peut m’aider car là je ne comprends plus rien  !!

Vu que je ne suis pas arrivé à faire le test, je n’ai pas encore réalisé le test qui permet de renvoyer le message ou non à l’utilisateur

Merci d’avance !!!

Ci joint le fichier
 

Pièces jointes

Dernière édition:
Re : Recherche multicritères en VBA à partir de plage nommée

Bonjour

Lors de la mise en formule, les " ne sont pas mis autour des variables lues (elles deviennent donc des variables pour Excel, qui ne les connait pas) !

Il manque donc à chaque variable SE, NUM et bi :
SYSTEME_ELEMENTAIRE=""" & SE & """)

Je n'ai pas creuser plus, mais c'est déjà une piste de résolution.

Cdt

Olivier
 
Re : Recherche multicritères en VBA à partir de plage nommée

Merci Odesta,

Je viens de tester ce code et ca ne marche toujours pas... Snifff

Par contre, je viens de m'apercevoir que le probleme vient certainement du format des cellules. Comment forcer en VBA les plages nommées au format texte ainsi que les variables (SE, TR, NUM et bi) ??

Merci encore
 
Re : Recherche multicritères en VBA à partir de plage nommée

En rajoutant les double ", j'obtien bien 7 :

Code:
Resul = Evaluate("=sum((TRANCHE=" & TR & ")*(SYSTEME_ELEMENTAIRE=""" & SE & """)*(NUMERO=""" & NUM & """)*(BIGRAMME=""" & bi & """)*(DATE_POSE=""""))")
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour