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
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: