Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Recherche multicritères

21 réponses
Avatar
Jean-Paul V
Bonjour à tous
Comment trouver dans une Base de Donnée la ligne correspondant à un choix
multicritère ?
Comme souvent, j’ai trouvé la solution dans Excelabo :
J’ai donc fait le test suivant qui fonctionne bien dans mon fichier ou je
choisi un Auteur une Oeuvre , une image ( Photo pochette de disque ) .
Range("essai").Value = Evaluate("MATCH(1,(Auteur=""BACH"")*(Oeuvre=""Cantate
N°244"")*(Image=""BACH5.jpg""),0)") + 1
Les champs Auteur , Oeuvre , Image sont des champs dynamiques définis avec
les fonctions DECALER
Pourquoi lorsque je définis trois variables grâce à 3 ListBox en cascades :
monauteur = Me.choixnom.List(Me.choixnom.ListIndex)
monoeuvre = Me.ChoixOeuvre.List(Me.ChoixOeuvre.ListIndex)
mondisque = Me.ChoixDisque.List(Me.ChoixDisque.ListIndex)
l’instruction suivante se plante (erreur de syntaxe):
Range("essai").Value =
Evaluate("MATCH(1,(Auteur="&monauteur&")*(Oeuvre="&monoeuvre&")*(Image="&mondisque&"),0)") + 1
Comment corriger l’instruction ?
Est-ce que Flo Cabon se serait plantée pour le passage à des variables…ou
bien j'ai mal compris cette partie..


à + j’espère

--
Jean-Paul V

10 réponses

1 2 3
Avatar
isabelle
bonjour Jean Paul,

les espaces sont obligatoire pour inclure une variable,

Evaluate("MATCH(1,(Auteur=" & monauteur & ")*(Oeuvre=" & monoeuvre & ")*(Image=" & mondisque & "),0)") + 1


si les variables sont de type range,

Evaluate("MATCH(1,(Auteur=" & Range(monauteur).Address & ")*(Oeuvre=" & Range(monoeuvre).Address & ")*(Image=" & Range(mondisque).Address & "),0)") + 1


isabelle



Jean-Paul V a écrit :
Bonjour à tous
Comment trouver dans une Base de Donnée la ligne correspondant à un choix
multicritère ?
Comme souvent, j’ai trouvé la solution dans Excelabo :
J’ai donc fait le test suivant qui fonctionne bien dans mon fichier ou je
choisi un Auteur une Oeuvre , une image ( Photo pochette de disque ) .
Range("essai").Value = Evaluate("MATCH(1,(Auteur=""BACH"")*(Oeuvre=""Cantate
N°244"")*(Image=""BACH5.jpg""),0)") + 1
Les champs Auteur , Oeuvre , Image sont des champs dynamiques définis avec
les fonctions DECALER
Pourquoi lorsque je définis trois variables grâce à 3 ListBox en cascades :
monauteur = Me.choixnom.List(Me.choixnom.ListIndex)
monoeuvre = Me.ChoixOeuvre.List(Me.ChoixOeuvre.ListIndex)
mondisque = Me.ChoixDisque.List(Me.ChoixDisque.ListIndex)
l’instruction suivante se plante (erreur de syntaxe):
Range("essai").Value =
Evaluate("MATCH(1,(Auteur="&monauteur&")*(Oeuvre="&monoeuvre&")*(Image="&mondisque&"),0)") + 1
Comment corriger l’instruction ?
Est-ce que Flo Cabon se serait plantée pour le passage à des variables…ou
bien j'ai mal compris cette partie..


à + j’espère




Avatar
Jean-Paul V
Bonjour Isabelle et Caetera
J'ai essayé votre solution et celle de Caetera.
J'ai erreur 13 Incompatibilité de type .
voir le fichier macro ChoixDisque déclanchée à l'ouverture du formulaire:
http://cjoint.com/?jprZXZpOh3

NB le fichier Caetera dans ci-joint est indisponible ?



--
Jean-Paul V


"isabelle" wrote:

bonjour Jean Paul,

les espaces sont obligatoire pour inclure une variable,

Evaluate("MATCH(1,(Auteur=" & monauteur & ")*(Oeuvre=" & monoeuvre & ")*(Image=" & mondisque & "),0)") + 1


si les variables sont de type range,

Evaluate("MATCH(1,(Auteur=" & Range(monauteur).Address & ")*(Oeuvre=" & Range(monoeuvre).Address & ")*(Image=" & Range(mondisque).Address & "),0)") + 1


isabelle



Jean-Paul V a écrit :
> Bonjour à tous
> Comment trouver dans une Base de Donnée la ligne correspondant à un choix
> multicritère ?
> Comme souvent, j’ai trouvé la solution dans Excelabo :
> J’ai donc fait le test suivant qui fonctionne bien dans mon fichier ou je
> choisi un Auteur une Oeuvre , une image ( Photo pochette de disque ) .
> Range("essai").Value = Evaluate("MATCH(1,(Auteur=""BACH"")*(Oeuvre=""Cantate
> N°244"")*(Image=""BACH5.jpg""),0)") + 1
> Les champs Auteur , Oeuvre , Image sont des champs dynamiques définis avec
> les fonctions DECALER
> Pourquoi lorsque je définis trois variables grâce à 3 ListBox en cascades :
> monauteur = Me.choixnom.List(Me.choixnom.ListIndex)
> monoeuvre = Me.ChoixOeuvre.List(Me.ChoixOeuvre.ListIndex)
> mondisque = Me.ChoixDisque.List(Me.ChoixDisque.ListIndex)
> l’instruction suivante se plante (erreur de syntaxe):
> Range("essai").Value =
> Evaluate("MATCH(1,(Auteur="&monauteur&")*(Oeuvre="&monoeuvre&")*(Image="&mondisque&"),0)") + 1
> Comment corriger l’instruction ?
> Est-ce que Flo Cabon se serait plantée pour le passage à des variables…ou
> bien j'ai mal compris cette partie..
>
>
> à + j’espère
>
>



Avatar
Caetera
> NB le fichier Caetera dans ci-joint est indisponible ?



Il ne faut pas l'exécuter à partir de "cijoint.fr" !
Enregistre le d'abord sur ton DD puis Alt+F11 et exécute la macro test

Etc
Avatar
Jean-Paul V
Je ne peux pas l'enregistrer car j'ai le message inaccessible
-
Jean-Paul V


"Caetera" wrote:

> l’instruction suivante se plante (erreur de syntaxe):
> Range("essai").Value =
> Evaluate("MATCH(1,(Auteur="&monauteur&")*(Oeuvre="&monoeuvre&")*(Image="&mondisque&"),0)") + 1
> Comment corriger l’instruction ?

Il te manque des guillemets pour encadrer les variables

Range("essai").Value = Evaluate("MATCH(1,(Auteur=""" & monauteur & """)*(Oeuvre=""" & monoeuvre & """)*(Image=""" & mondisque & """),0)") + 1

http://www.cijoint.fr/cjlink.php?file=cj200909/cijkED0NI0


Avatar
isabelle
bonjour Jean Paul,

Evaluate("MATCH(1," & Range("Auteur").Address & " =" & monauteur & ")*("
& Range("Oeuvre").Address & "=" & monoeuvre & ")*(" &
Range("Image").Address & "=" & mondisque & "),0)") + 1

isabelle

Jean-Paul V a écrit :
Bonjour Isabelle et Caetera
J'ai essayé votre solution et celle de Caetera.
J'ai erreur 13 Incompatibilité de type .
voir le fichier macro ChoixDisque déclanchée à l'ouverture du formulaire:
http://cjoint.com/?jprZXZpOh3

NB le fichier Caetera dans ci-joint est indisponible ?






Avatar
Jean-Paul V
Cette nouvelle solution très éloignée d'Excelabo se plante également Erreur
d'éxécution 13
--
Jean-Paul V


"isabelle" wrote:

bonjour Jean Paul,

Evaluate("MATCH(1," & Range("Auteur").Address & " =" & monauteur & ")*("
& Range("Oeuvre").Address & "=" & monoeuvre & ")*(" &
Range("Image").Address & "=" & mondisque & "),0)") + 1

isabelle

Jean-Paul V a écrit :
> Bonjour Isabelle et Caetera
> J'ai essayé votre solution et celle de Caetera.
> J'ai erreur 13 Incompatibilité de type .
> voir le fichier macro ChoixDisque déclanchée à l'ouverture du formulaire:
> http://cjoint.com/?jprZXZpOh3
>
> NB le fichier Caetera dans ci-joint est indisponible ?
>
>
>
>



Avatar
Misange
Bonjour

Evaluate évalue une chaine de caractères (encore un truc qui doit pas
plaire à Jeérôme ;-) )
Ce qui est pénible avec ce genre de formule c'est de ne pas se planter
dans les guillemets.
(Auteur="&monauteur&") ne peut en aucun cas renvoyer la valeur variable
monauteur. Comme signalé par Isabelle il est impératif d'ajouter un
espace de part et d'autre de l'esperluette.
mais (Auteur=" & monauteur & ") ne marcherait pas non plus ici ! Excel
cherche & monauteur & qui n'est pas une variable et le & après le
guillemet ne sert à rien. Commence par corriger en comparant ce que tu
as écrit avec ceci.

Evaluate("INDEX(date_commande,match(1,(fournisseur=""sigma"")*(montant!),0))")

Mais ensuite, je ne comprends pas ta construction : quelle est la valeur
que tu veux renvoyer ?
Un conseil : commence par faire cela dans la feuille de calcul. Tu
nommes une de tes cellules auteur monauteur idem pour les autres
variables et tu mets au point ta formule. Ensuite copies cette formule,
tu lances l'enrgistreur de macro et tu colles la formule dans la barre
de formule. Tu n'as plus qu'à récupérer le code et le mettre dans VBA
avec les guillemets au bon endroit.

Misange migrateuse
http://www.excelabo.net : Participez à un travail collaboratif sur excel !


Jean-Paul V a écrit :
Bonjour à tous
Comment trouver dans une Base de Donnée la ligne correspondant à un choix
multicritère ?
Comme souvent, j’ai trouvé la solution dans Excelabo :
J’ai donc fait le test suivant qui fonctionne bien dans mon fichier ou je
choisi un Auteur une Oeuvre , une image ( Photo pochette de disque ) .
Range("essai").Value = Evaluate("MATCH(1,(Auteur=""BACH"")*(Oeuvre=""Cantate
N°244"")*(Image=""BACH5.jpg""),0)") + 1
Les champs Auteur , Oeuvre , Image sont des champs dynamiques définis avec
les fonctions DECALER
Pourquoi lorsque je définis trois variables grâce à 3 ListBox en cascades :
monauteur = Me.choixnom.List(Me.choixnom.ListIndex)
monoeuvre = Me.ChoixOeuvre.List(Me.ChoixOeuvre.ListIndex)
mondisque = Me.ChoixDisque.List(Me.ChoixDisque.ListIndex)
l’instruction suivante se plante (erreur de syntaxe):
Range("essai").Value =
Evaluate("MATCH(1,(Auteur="&monauteur&")*(Oeuvre="&monoeuvre&")*(Image="&mondisque&"),0)") + 1
Comment corriger l’instruction ?
Est-ce que Flo Cabon se serait plantée pour le passage à des variables…ou
bien j'ai mal compris cette partie..


à + j’espère



Avatar
michdenis
Bonjour Jean-Paul,

Voici un bout de code... et observe bien les guillements

C'est une forme générique qui te permet de renseigner tes variables
avec les valeurs de ton choix
'----------------------------------------
Sub test()
'Déclaration des variable
Dim MonImage As String
Dim MonOeuvre As String
Dim MonAuteur As String
Dim X As Long

'Renseigne les variables
MonImage = """BACH5.jpg"""
MonOeuvre = """Cantate"""
MonAuteur = """Bach5"""

X = Evaluate("=MATCH(1,(Image=" & MonImage & _
")*(Oeuvre=" & MonOeuvre & _
")*(Auteur=" & MonAuteur & "),0)+1")

End Sub
'----------------------------------------




"Jean-Paul V" a écrit dans le message de groupe de
discussion :
Bonjour à tous
Comment trouver dans une Base de Donnée la ligne correspondant à un choix
multicritère ?
Comme souvent, j’ai trouvé la solution dans Excelabo :
J’ai donc fait le test suivant qui fonctionne bien dans mon fichier ou je
choisi un Auteur une Oeuvre , une image ( Photo pochette de disque ) .
Range("essai").Value = Evaluate("MATCH(1,(Auteur=""BACH"")*(Oeuvre=""Cantate
N°244"")*(Image=""BACH5.jpg""),0)") + 1
Les champs Auteur , Oeuvre , Image sont des champs dynamiques définis avec
les fonctions DECALER
Pourquoi lorsque je définis trois variables grâce à 3 ListBox en cascades :
monauteur = Me.choixnom.List(Me.choixnom.ListIndex)
monoeuvre = Me.ChoixOeuvre.List(Me.ChoixOeuvre.ListIndex)
mondisque = Me.ChoixDisque.List(Me.ChoixDisque.ListIndex)
l’instruction suivante se plante (erreur de syntaxe):
Range("essai").Value Evaluate("MATCH(1,(Auteur="&monauteur&")*(Oeuvre="&monoeuvre&")*(Image="&mondisque&"),0)")
+ 1
Comment corriger l’instruction ?
Est-ce que Flo Cabon se serait plantée pour le passage à des variables…ou
bien j'ai mal compris cette partie..


à + j’espère

--
Jean-Paul V
Avatar
Caetera
"Jean-Paul V" a écrit dans le message de
news:

Je ne peux pas l'enregistrer car j'ai le message inaccessible



T'es le seul !
Plains toi auprès de "ci.joint.fr" !
De toute façon il te suffit de faire simplement copier coller de la ligne de
code fournie

Etc
Avatar
Jean-Paul V
Bonjour MichDenis
Votre macro marche mais sans variable calculée.
J’ai regardé votre macro Test, et je me suis dit en voyant :
MonImage = """BACH5.jpg""" mais bon sang est-ce que Excel ferait une
allergie au String pour qu’il faille 3 " pour qu’il comprenne que BACH5.jpg
est mon String.
Finalement j’ai trouvé cette macro qui marche également mais que je
comprends mieux :
Sub Test2()
'Déclaration des variables cela ne semble pas nécessaire, ça marche sans
' Dim MonImage As String
' Dim MonOeuvre As String
' Dim MonAuteur As String
' Dim X As Long
'Avec ses variables j'obtiens bien le n° de ligne dans le Range "essai"
MonImage = "BACH5.jpg"
MonOeuvre = "Cantate N°244"
MonAuteur = "BACH"
X = Evaluate("=MATCH(1,(Image=""" & MonImage & _
""")*(Oeuvre=""" & MonOeuvre & _
""")*(Auteur=""" & MonAuteur & """),0)+1")
Range("essai").Value = X 'ça marche j'ai ce que je cherche c'est à dire
la ligne
Range("essai2").Value = """BACH5.jpg""" 'permet d'obtenir "BACH5.jpg"
Range("essai3").Value = "BACH5.jpg" 'permet d'obtenir BACH5.jpg
End Sub

Maintenant j’essaye de passer à 3 variables calculées données par les
valeurs des 3 ListBox en cascade ( qui sont je vous le rappelle grâce à vous
initialisées et sélectionnées dès l’ouverture du Userform « Formulaire »)
Sub Test3()
'Déclaration des variable certaines ne sont pas utiles...
' Dim essai As Range
' Dim essai2 As Range
' Dim essai3 As Range
' Dim essai4 As Range
Dim MonImage As String
Dim MonOeuvre As String
Dim MonAuteur As String
Dim X As Long
Dim Y As String
'Essayons maintenant d'alimenter les variables avec les ListBox en
cascade définies par l'initialisation du Userform "Formulaire"
Formulaire.Show
Range("essai").Value =
Formulaire.ChoixDisque.List(Formulaire.ChoixDisque.ListIndex) 'ça c'est OK
Range("essai2").Value =
Formulaire.ChoixOeuvre.List(Formulaire.ChoixOeuvre.ListIndex)
Range("essai3").Value =
Formulaire.choixnom.List(Formulaire.choixnom.ListIndex)
'ce qui suit est pour obtenir dans ma variable les " "
Range("essai5").Value = "=""""""""&essai&"""""""""
Range("essai5").Select
Selection.Copy 'et ça marche ! ! !
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:úlse
Range("essai6").Value = "=""""""""&essai2&"""""""""
Range("essai6").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:úlse
Range("essai7").Value = "=""""""""&essai3&"""""""""
Range("essai7").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:úlse
'transférer dans mes 3 variables ce que je veux des trucs avec des " "
MonImage = Range("essai5").Value
MonOeuvre = Range("essai6").Value
MonAuteur = Range("essai7").Value
'malheureusement ce qui suit se plante avec erreur 13
X = Evaluate("=MATCH(1,(Image=""" & MonImage & _
""")*(Oeuvre=""" & MonOeuvre & _
""")*(Auteur=""" & MonAuteur & """),0)+1")
Range("essai4").Value = X 'ça se plante au dessus
End Sub
1) Comment éviter que ça se plante
2) Comment se passer de tous ces Ranges intermédiaires pour trouver X le n°
de ligne de la feuille
http://cjoint.com/?jqqzhXBpyH
à + j’espère


Jean-Paul V


"michdenis" wrote:

Bonjour Jean-Paul,

Voici un bout de code... et observe bien les guillements

C'est une forme générique qui te permet de renseigner tes variables
avec les valeurs de ton choix
'----------------------------------------
Sub test()
'Déclaration des variable
Dim MonImage As String
Dim MonOeuvre As String
Dim MonAuteur As String
Dim X As Long

'Renseigne les variables
MonImage = """BACH5.jpg"""
MonOeuvre = """Cantate"""
MonAuteur = """Bach5"""

X = Evaluate("=MATCH(1,(Image=" & MonImage & _
")*(Oeuvre=" & MonOeuvre & _
")*(Auteur=" & MonAuteur & "),0)+1")

End Sub
'----------------------------------------




"Jean-Paul V" a écrit dans le message de groupe de
discussion :
Bonjour à tous
Comment trouver dans une Base de Donnée la ligne correspondant à un choix
multicritère ?
Comme souvent, j’ai trouvé la solution dans Excelabo :
J’ai donc fait le test suivant qui fonctionne bien dans mon fichier ou je
choisi un Auteur une Oeuvre , une image ( Photo pochette de disque ) .
Range("essai").Value = Evaluate("MATCH(1,(Auteur=""BACH"")*(Oeuvre=""Cantate
N°244"")*(Image=""BACH5.jpg""),0)") + 1
Les champs Auteur , Oeuvre , Image sont des champs dynamiques définis avec
les fonctions DECALER
Pourquoi lorsque je définis trois variables grâce à 3 ListBox en cascades :
monauteur = Me.choixnom.List(Me.choixnom.ListIndex)
monoeuvre = Me.ChoixOeuvre.List(Me.ChoixOeuvre.ListIndex)
mondisque = Me.ChoixDisque.List(Me.ChoixDisque.ListIndex)
l’instruction suivante se plante (erreur de syntaxe):
Range("essai").Value > Evaluate("MATCH(1,(Auteur="&monauteur&")*(Oeuvre="&monoeuvre&")*(Image="&mondisque&"),0)")
+ 1
Comment corriger l’instruction ?
Est-ce que Flo Cabon se serait plantée pour le passage à des variables…ou
bien j'ai mal compris cette partie..


à + j’espère

--
Jean-Paul V



1 2 3