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
Caetera
> Finalement j'ai trouvé cette macro ...



Moi aussi...quelques lignes au-dessus !

Etc
Avatar
Jean-Paul V
Bonjour Misange
Et merci encore pour votre fichier qui va peut-être me mettre sur la voie.
J'ai regardé à nouveau ce fichier et
Evaluate("INDEX(date_commande,match(1,(fournisseur=""sigma"")*(montant!),0))") ne donne pas un n° de ligne mais une date de commande.
Je ne crois pas que le fichier donne un exemple avec des variables
calculées, il essait de nous mettre sur la piste.
Dans mon cas et grâce à MichDenis j'ai un Useform qui lorsqu'il s'ouvre en
s'initialisant alimente 3 ListBox en cascade dont le premier élément est
sélectionné.
Je cherche à déterminer le n° de ligne dans la feuille BD
--
Jean-Paul V


"Misange" wrote:

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
Jean-Paul V
Bonjour
Je suppose que vous avez oublié de cliquer sur Autoriser.
Vous verrez si vous lisez ma réponse à MichDenis que j'arrive à la même
solution que vous mais après j'ai des PB avec mes variables calculées avec
des ListBox en cascade.
par exemple
MonImage = Formulaire.ChoixDisque.List(Formulaire.ChoixDisque.ListIndex)
où Formulaire est un Userform et ChoixDisque une ListeBox
--
Jean-Paul V


"Caetera" wrote:

"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
michdenis
Toujours la même procédure, mais si la valeur
de tes variables est dans des cellules d'une feuille de calcul
'----------------------------------------------------
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
With Worksheets("NomDeLaFeuille"
MonImage = """ & .range("A1") & """
MonOeuvre = """ & .range("A2") & """
MonAuteur = """ & .range("A3") & """
End With
'NB- On pourrait remplacer les "Range" par la valeur des textbox
'C'est beaucoup plus facile de travailler de cette façon quand il
'y a plusieurs variables... tu as le choix !

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

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

Pourquoi autant de guillemets autour des variables :

Je t'ai fait un petit exemple : Suppose que tu veuilles
afficher dans une boîte de message la valeur d'une
variable mais entouré de guillemets : il y a 2 façons
de faire... et je préfère de loin la deuxième approche.
Dans cette dernière : les premiers guillemets "Denis"
sert à délimiter la chaîne de caractères. Comme il est
demandé d'afficher la variable entourée de guillemets
il faut alors les dédoubler, donc, ajouter 2 guillemets de
chaque côté de "Denis" -> """Denis"""

'------------------------------------
Sub test1()
Dim Nom As String
Nom = "denis"
MsgBox "Bonjour " & """" & Nom & """"
End Sub
'------------------------------------
Sub test2()
Dim Nom As String
Nom = """denis"""
MsgBox "Bonjour " & Nom
End Sub
'------------------------------------





"Jean-Paul V" a écrit dans le message de groupe de
discussion :

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



Avatar
Jean-Paul V
Bonjour MichDenis

J'ai essayé de reprendre ta macro en ajoutant les variables calculées.
Je n'ai pas pu garder :
MonImage = """ & .range("A1") & """ 'car VBA voit rouge dès l'écriture et
ça se plante ( Version Excel 2000 ) j'ai donc fait les corrections suivantes.
La macro avec les variables telles que tu les a précédemment définies avec 3
""" pourrait donner ceci, mais bien que je me suis assuré que j'ai en L1 , M1
, N1 des variable correctes cela se plante sur X = Evaluate...erreur 13
incompatibilité de type
'----------------------------------------------------
Sub TestMichDenisVariableCalculée()
'Déclaration des variable
Dim MonImage As String
Dim MonOeuvre As String
Dim MonAuteur As String
Dim X As Long
Formulaire.Show
With Worksheets("BD")
Range("L1").Value =
Formulaire.ChoixDisque.List(Formulaire.ChoixDisque.ListIndex) 'ça c'est OK
Range("M1").Value =
Formulaire.ChoixOeuvre.List(Formulaire.ChoixOeuvre.ListIndex)
Range("N1").Value =
Formulaire.choixnom.List(Formulaire.choixnom.ListIndex)
' MonImage = """ & .range("L1") & """ 'ce plante et voit rouge dès
l'écriture
' MonOeuvre = """ & .range("M1") & """
' MonAuteur = """ & .range("N1") & """
MonImage = .Range("L1")
MonImage = """""""" & MonImage & """"""""
MonOeuvre = .Range("M1")
MonOeuvre = """""""" & MonOeuvre & """"""""
MonAuteur = .Range("N1")
MonAuteur = """""""" & MonAuteur & """"""""
'Juste pour m'assurer que j'ai bien """ """ dans mes variables et
ça marche ! !
Range("L1").Value = MonImage
Range("M1").Value = MonOeuvre
Range("N1").Value = MonAuteur
End With
'NB- On pourrait remplacer les "Range" par la valeur des textbox
X = Evaluate("=MATCH(1,(Image=" & MonImage & _
")*(Oeuvre=" & MonOeuvre & _
")*(Auteur=" & MonAuteur & "),0)+1")
End Sub
'----------------------------------------------------
Faut-il jeter l'éponge ?
http://cjoint.com/?jrjHJUngwB
--
Jean-Paul V


"michdenis" wrote:

Toujours la même procédure, mais si la valeur
de tes variables est dans des cellules d'une feuille de calcul
'----------------------------------------------------
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
With Worksheets("NomDeLaFeuille"
MonImage = """ & .range("A1") & """
MonOeuvre = """ & .range("A2") & """
MonAuteur = """ & .range("A3") & """
End With
'NB- On pourrait remplacer les "Range" par la valeur des textbox
'C'est beaucoup plus facile de travailler de cette façon quand il
'y a plusieurs variables... tu as le choix !

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

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

Pourquoi autant de guillemets autour des variables :

Je t'ai fait un petit exemple : Suppose que tu veuilles
afficher dans une boîte de message la valeur d'une
variable mais entouré de guillemets : il y a 2 façons
de faire... et je préfère de loin la deuxième approche.
Dans cette dernière : les premiers guillemets "Denis"
sert à délimiter la chaîne de caractères. Comme il est
demandé d'afficher la variable entourée de guillemets
il faut alors les dédoubler, donc, ajouter 2 guillemets de
chaque côté de "Denis" -> """Denis"""

'------------------------------------
Sub test1()
Dim Nom As String
Nom = "denis"
MsgBox "Bonjour " & """" & Nom & """"
End Sub
'------------------------------------
Sub test2()
Dim Nom As String
Nom = """denis"""
MsgBox "Bonjour " & Nom
End Sub
'------------------------------------





"Jean-Paul V" a écrit dans le message de groupe de
discussion :

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
>


Avatar
michdenis
Un fichier exemple là : http://cjoint.com/?jrnfDplfoD



"Jean-Paul V" a écrit dans le message de groupe de
discussion :
Bonjour MichDenis

J'ai essayé de reprendre ta macro en ajoutant les variables calculées.
Je n'ai pas pu garder :
MonImage = """ & .range("A1") & """ 'car VBA voit rouge dès l'écriture et
ça se plante ( Version Excel 2000 ) j'ai donc fait les corrections suivantes.
La macro avec les variables telles que tu les a précédemment définies avec 3
""" pourrait donner ceci, mais bien que je me suis assuré que j'ai en L1 , M1
, N1 des variable correctes cela se plante sur X = Evaluate...erreur 13
incompatibilité de type
'----------------------------------------------------
Sub TestMichDenisVariableCalculée()
'Déclaration des variable
Dim MonImage As String
Dim MonOeuvre As String
Dim MonAuteur As String
Dim X As Long
Formulaire.Show
With Worksheets("BD")
Range("L1").Value Formulaire.ChoixDisque.List(Formulaire.ChoixDisque.ListIndex) 'ça c'est OK
Range("M1").Value Formulaire.ChoixOeuvre.List(Formulaire.ChoixOeuvre.ListIndex)
Range("N1").Value Formulaire.choixnom.List(Formulaire.choixnom.ListIndex)
' MonImage = """ & .range("L1") & """ 'ce plante et voit rouge dès
l'écriture
' MonOeuvre = """ & .range("M1") & """
' MonAuteur = """ & .range("N1") & """
MonImage = .Range("L1")
MonImage = """""""" & MonImage & """"""""
MonOeuvre = .Range("M1")
MonOeuvre = """""""" & MonOeuvre & """"""""
MonAuteur = .Range("N1")
MonAuteur = """""""" & MonAuteur & """"""""
'Juste pour m'assurer que j'ai bien """ """ dans mes variables et
ça marche ! !
Range("L1").Value = MonImage
Range("M1").Value = MonOeuvre
Range("N1").Value = MonAuteur
End With
'NB- On pourrait remplacer les "Range" par la valeur des textbox
X = Evaluate("=MATCH(1,(Image=" & MonImage & _
")*(Oeuvre=" & MonOeuvre & _
")*(Auteur=" & MonAuteur & "),0)+1")
End Sub
'----------------------------------------------------
Faut-il jeter l'éponge ?
http://cjoint.com/?jrjHJUngwB
--
Jean-Paul V


"michdenis" wrote:

Toujours la même procédure, mais si la valeur
de tes variables est dans des cellules d'une feuille de calcul
'----------------------------------------------------
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
With Worksheets("NomDeLaFeuille"
MonImage = """ & .range("A1") & """
MonOeuvre = """ & .range("A2") & """
MonAuteur = """ & .range("A3") & """
End With
'NB- On pourrait remplacer les "Range" par la valeur des textbox
'C'est beaucoup plus facile de travailler de cette façon quand il
'y a plusieurs variables... tu as le choix !

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

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

Pourquoi autant de guillemets autour des variables :

Je t'ai fait un petit exemple : Suppose que tu veuilles
afficher dans une boîte de message la valeur d'une
variable mais entouré de guillemets : il y a 2 façons
de faire... et je préfère de loin la deuxième approche.
Dans cette dernière : les premiers guillemets "Denis"
sert à délimiter la chaîne de caractères. Comme il est
demandé d'afficher la variable entourée de guillemets
il faut alors les dédoubler, donc, ajouter 2 guillemets de
chaque côté de "Denis" -> """Denis"""

'------------------------------------
Sub test1()
Dim Nom As String
Nom = "denis"
MsgBox "Bonjour " & """" & Nom & """"
End Sub
'------------------------------------
Sub test2()
Dim Nom As String
Nom = """denis"""
MsgBox "Bonjour " & Nom
End Sub
'------------------------------------





"Jean-Paul V" a écrit dans le message de groupe de
discussion :

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
>


Avatar
Jean-Paul V
Je ne vois pas de macro dans ton fichier que j'ai chargé sur mon micro
NB: puisque tu as créé des champs ta fonction matricielle avec des nom de
champs donne :
{=EQUIV(1;(MonImage="denis3")*(MonOeuvre="Sonate")*(MonAuteur="Bach"))+1}
--
Jean-Paul V


"michdenis" wrote:

Un fichier exemple là : http://cjoint.com/?jrnfDplfoD



"Jean-Paul V" a écrit dans le message de groupe de
discussion :
Bonjour MichDenis

J'ai essayé de reprendre ta macro en ajoutant les variables calculées.
Je n'ai pas pu garder :
MonImage = """ & .range("A1") & """ 'car VBA voit rouge dès l'écriture et
ça se plante ( Version Excel 2000 ) j'ai donc fait les corrections suivantes.
La macro avec les variables telles que tu les a précédemment définies avec 3
""" pourrait donner ceci, mais bien que je me suis assuré que j'ai en L1 , M1
, N1 des variable correctes cela se plante sur X = Evaluate...erreur 13
incompatibilité de type
'----------------------------------------------------
Sub TestMichDenisVariableCalculée()
'Déclaration des variable
Dim MonImage As String
Dim MonOeuvre As String
Dim MonAuteur As String
Dim X As Long
Formulaire.Show
With Worksheets("BD")
Range("L1").Value > Formulaire.ChoixDisque.List(Formulaire.ChoixDisque.ListIndex) 'ça c'est OK
Range("M1").Value > Formulaire.ChoixOeuvre.List(Formulaire.ChoixOeuvre.ListIndex)
Range("N1").Value > Formulaire.choixnom.List(Formulaire.choixnom.ListIndex)
' MonImage = """ & .range("L1") & """ 'ce plante et voit rouge dès
l'écriture
' MonOeuvre = """ & .range("M1") & """
' MonAuteur = """ & .range("N1") & """
MonImage = .Range("L1")
MonImage = """""""" & MonImage & """"""""
MonOeuvre = .Range("M1")
MonOeuvre = """""""" & MonOeuvre & """"""""
MonAuteur = .Range("N1")
MonAuteur = """""""" & MonAuteur & """"""""
'Juste pour m'assurer que j'ai bien """ """ dans mes variables et
ça marche ! !
Range("L1").Value = MonImage
Range("M1").Value = MonOeuvre
Range("N1").Value = MonAuteur
End With
'NB- On pourrait remplacer les "Range" par la valeur des textbox
X = Evaluate("=MATCH(1,(Image=" & MonImage & _
")*(Oeuvre=" & MonOeuvre & _
")*(Auteur=" & MonAuteur & "),0)+1")
End Sub
'----------------------------------------------------
Faut-il jeter l'éponge ?
http://cjoint.com/?jrjHJUngwB
--
Jean-Paul V


"michdenis" wrote:

> Toujours la même procédure, mais si la valeur
> de tes variables est dans des cellules d'une feuille de calcul
> '----------------------------------------------------
> 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
> With Worksheets("NomDeLaFeuille"
> MonImage = """ & .range("A1") & """
> MonOeuvre = """ & .range("A2") & """
> MonAuteur = """ & .range("A3") & """
> End With
> 'NB- On pourrait remplacer les "Range" par la valeur des textbox
> 'C'est beaucoup plus facile de travailler de cette façon quand il
> 'y a plusieurs variables... tu as le choix !
>
> X = Evaluate("=MATCH(1,(Image=" & MonImage & _
> ")*(Oeuvre=" & MonOeuvre & _
> ")*(Auteur=" & MonAuteur & "),0)+1")
>
> End Sub
> '----------------------------------------------------
>
> Pourquoi autant de guillemets autour des variables :
>
> Je t'ai fait un petit exemple : Suppose que tu veuilles
> afficher dans une boîte de message la valeur d'une
> variable mais entouré de guillemets : il y a 2 façons
> de faire... et je préfère de loin la deuxième approche.
> Dans cette dernière : les premiers guillemets "Denis"
> sert à délimiter la chaîne de caractères. Comme il est
> demandé d'afficher la variable entourée de guillemets
> il faut alors les dédoubler, donc, ajouter 2 guillemets de
> chaque côté de "Denis" -> """Denis"""
>
> '------------------------------------
> Sub test1()
> Dim Nom As String
> Nom = "denis"
> MsgBox "Bonjour " & """" & Nom & """"
> End Sub
> '------------------------------------
> Sub test2()
> Dim Nom As String
> Nom = """denis"""
> MsgBox "Bonjour " & Nom
> End Sub
> '------------------------------------
>
>
>
>
>
> "Jean-Paul V" a écrit dans le message de groupe de
> discussion :
>
> 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
> >


Avatar
michdenis
http://cjoint.com/?jrryPy8h83



"Jean-Paul V" a écrit dans le message de groupe de
discussion :

Je ne vois pas de macro dans ton fichier que j'ai chargé sur mon micro
NB: puisque tu as créé des champs ta fonction matricielle avec des nom de
champs donne :
{=EQUIV(1;(MonImage="denis3")*(MonOeuvre="Sonate")*(MonAuteur="Bach"))+1}
--
Jean-Paul V


"michdenis" wrote:

Un fichier exemple là : http://cjoint.com/?jrnfDplfoD



"Jean-Paul V" a écrit dans le message de groupe de
discussion :
Bonjour MichDenis

J'ai essayé de reprendre ta macro en ajoutant les variables calculées.
Je n'ai pas pu garder :
MonImage = """ & .range("A1") & """ 'car VBA voit rouge dès l'écriture et
ça se plante ( Version Excel 2000 ) j'ai donc fait les corrections suivantes.
La macro avec les variables telles que tu les a précédemment définies avec 3
""" pourrait donner ceci, mais bien que je me suis assuré que j'ai en L1 , M1
, N1 des variable correctes cela se plante sur X = Evaluate...erreur 13
incompatibilité de type
'----------------------------------------------------
Sub TestMichDenisVariableCalculée()
'Déclaration des variable
Dim MonImage As String
Dim MonOeuvre As String
Dim MonAuteur As String
Dim X As Long
Formulaire.Show
With Worksheets("BD")
Range("L1").Value > Formulaire.ChoixDisque.List(Formulaire.ChoixDisque.ListIndex) 'ça c'est OK
Range("M1").Value > Formulaire.ChoixOeuvre.List(Formulaire.ChoixOeuvre.ListIndex)
Range("N1").Value > Formulaire.choixnom.List(Formulaire.choixnom.ListIndex)
' MonImage = """ & .range("L1") & """ 'ce plante et voit rouge dès
l'écriture
' MonOeuvre = """ & .range("M1") & """
' MonAuteur = """ & .range("N1") & """
MonImage = .Range("L1")
MonImage = """""""" & MonImage & """"""""
MonOeuvre = .Range("M1")
MonOeuvre = """""""" & MonOeuvre & """"""""
MonAuteur = .Range("N1")
MonAuteur = """""""" & MonAuteur & """"""""
'Juste pour m'assurer que j'ai bien """ """ dans mes variables et
ça marche ! !
Range("L1").Value = MonImage
Range("M1").Value = MonOeuvre
Range("N1").Value = MonAuteur
End With
'NB- On pourrait remplacer les "Range" par la valeur des textbox
X = Evaluate("=MATCH(1,(Image=" & MonImage & _
")*(Oeuvre=" & MonOeuvre & _
")*(Auteur=" & MonAuteur & "),0)+1")
End Sub
'----------------------------------------------------
Faut-il jeter l'éponge ?
http://cjoint.com/?jrjHJUngwB
--
Jean-Paul V


"michdenis" wrote:

> Toujours la même procédure, mais si la valeur
> de tes variables est dans des cellules d'une feuille de calcul
> '----------------------------------------------------
> 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
> With Worksheets("NomDeLaFeuille"
> MonImage = """ & .range("A1") & """
> MonOeuvre = """ & .range("A2") & """
> MonAuteur = """ & .range("A3") & """
> End With
> 'NB- On pourrait remplacer les "Range" par la valeur des textbox
> 'C'est beaucoup plus facile de travailler de cette façon quand il
> 'y a plusieurs variables... tu as le choix !
>
> X = Evaluate("=MATCH(1,(Image=" & MonImage & _
> ")*(Oeuvre=" & MonOeuvre & _
> ")*(Auteur=" & MonAuteur & "),0)+1")
>
> End Sub
> '----------------------------------------------------
>
> Pourquoi autant de guillemets autour des variables :
>
> Je t'ai fait un petit exemple : Suppose que tu veuilles
> afficher dans une boîte de message la valeur d'une
> variable mais entouré de guillemets : il y a 2 façons
> de faire... et je préfère de loin la deuxième approche.
> Dans cette dernière : les premiers guillemets "Denis"
> sert à délimiter la chaîne de caractères. Comme il est
> demandé d'afficher la variable entourée de guillemets
> il faut alors les dédoubler, donc, ajouter 2 guillemets de
> chaque côté de "Denis" -> """Denis"""
>
> '------------------------------------
> Sub test1()
> Dim Nom As String
> Nom = "denis"
> MsgBox "Bonjour " & """" & Nom & """"
> End Sub
> '------------------------------------
> Sub test2()
> Dim Nom As String
> Nom = """denis"""
> MsgBox "Bonjour " & Nom
> End Sub
> '------------------------------------
>
>
>
>
>
> "Jean-Paul V" a écrit dans le message de groupe
> de
> discussion :
>
> 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
> >


Avatar
Jean-Paul V
Bonjour MichDenis
J'ai regardé votre fichier, on constate que votre macro donne non pas le n°
de ligne mais n° de ligne + 1.
Et bizarrement si je change dans la macro les variables A3 , C3 , B3 en A2
C2 B2 cela donne 6 donc ligne + 4 je ne comprends pas pourquoi je ne trouve
pas 3 au lieu de 6
--
Jean-Paul V


"michdenis" wrote:

http://cjoint.com/?jrryPy8h83



"Jean-Paul V" a écrit dans le message de groupe de
discussion :

Je ne vois pas de macro dans ton fichier que j'ai chargé sur mon micro
NB: puisque tu as créé des champs ta fonction matricielle avec des nom de
champs donne :
{=EQUIV(1;(MonImage="denis3")*(MonOeuvre="Sonate")*(MonAuteur="Bach"))+1}
--
Jean-Paul V


"michdenis" wrote:

> Un fichier exemple là : http://cjoint.com/?jrnfDplfoD
>
>
>
> "Jean-Paul V" a écrit dans le message de groupe de
> discussion :
> Bonjour MichDenis
>
> J'ai essayé de reprendre ta macro en ajoutant les variables calculées.
> Je n'ai pas pu garder :
> MonImage = """ & .range("A1") & """ 'car VBA voit rouge dès l'écriture et
> ça se plante ( Version Excel 2000 ) j'ai donc fait les corrections suivantes.
> La macro avec les variables telles que tu les a précédemment définies avec 3
> """ pourrait donner ceci, mais bien que je me suis assuré que j'ai en L1 , M1
> , N1 des variable correctes cela se plante sur X = Evaluate...erreur 13
> incompatibilité de type
> '----------------------------------------------------
> Sub TestMichDenisVariableCalculée()
> 'Déclaration des variable
> Dim MonImage As String
> Dim MonOeuvre As String
> Dim MonAuteur As String
> Dim X As Long
> Formulaire.Show
> With Worksheets("BD")
> Range("L1").Value > > Formulaire.ChoixDisque.List(Formulaire.ChoixDisque.ListIndex) 'ça c'est OK
> Range("M1").Value > > Formulaire.ChoixOeuvre.List(Formulaire.ChoixOeuvre.ListIndex)
> Range("N1").Value > > Formulaire.choixnom.List(Formulaire.choixnom.ListIndex)
> ' MonImage = """ & .range("L1") & """ 'ce plante et voit rouge dès
> l'écriture
> ' MonOeuvre = """ & .range("M1") & """
> ' MonAuteur = """ & .range("N1") & """
> MonImage = .Range("L1")
> MonImage = """""""" & MonImage & """"""""
> MonOeuvre = .Range("M1")
> MonOeuvre = """""""" & MonOeuvre & """"""""
> MonAuteur = .Range("N1")
> MonAuteur = """""""" & MonAuteur & """"""""
> 'Juste pour m'assurer que j'ai bien """ """ dans mes variables et
> ça marche ! !
> Range("L1").Value = MonImage
> Range("M1").Value = MonOeuvre
> Range("N1").Value = MonAuteur
> End With
> 'NB- On pourrait remplacer les "Range" par la valeur des textbox
> X = Evaluate("=MATCH(1,(Image=" & MonImage & _
> ")*(Oeuvre=" & MonOeuvre & _
> ")*(Auteur=" & MonAuteur & "),0)+1")
> End Sub
> '----------------------------------------------------
> Faut-il jeter l'éponge ?
> http://cjoint.com/?jrjHJUngwB
> --
> Jean-Paul V
>
>
> "michdenis" wrote:
>
> > Toujours la même procédure, mais si la valeur
> > de tes variables est dans des cellules d'une feuille de calcul
> > '----------------------------------------------------
> > 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
> > With Worksheets("NomDeLaFeuille"
> > MonImage = """ & .range("A1") & """
> > MonOeuvre = """ & .range("A2") & """
> > MonAuteur = """ & .range("A3") & """
> > End With
> > 'NB- On pourrait remplacer les "Range" par la valeur des textbox
> > 'C'est beaucoup plus facile de travailler de cette façon quand il
> > 'y a plusieurs variables... tu as le choix !
> >
> > X = Evaluate("=MATCH(1,(Image=" & MonImage & _
> > ")*(Oeuvre=" & MonOeuvre & _
> > ")*(Auteur=" & MonAuteur & "),0)+1")
> >
> > End Sub
> > '----------------------------------------------------
> >
> > Pourquoi autant de guillemets autour des variables :
> >
> > Je t'ai fait un petit exemple : Suppose que tu veuilles
> > afficher dans une boîte de message la valeur d'une
> > variable mais entouré de guillemets : il y a 2 façons
> > de faire... et je préfère de loin la deuxième approche.
> > Dans cette dernière : les premiers guillemets "Denis"
> > sert à délimiter la chaîne de caractères. Comme il est
> > demandé d'afficher la variable entourée de guillemets
> > il faut alors les dédoubler, donc, ajouter 2 guillemets de
> > chaque côté de "Denis" -> """Denis"""
> >
> > '------------------------------------
> > Sub test1()
> > Dim Nom As String
> > Nom = "denis"
> > MsgBox "Bonjour " & """" & Nom & """"
> > End Sub
> > '------------------------------------
> > Sub test2()
> > Dim Nom As String
> > Nom = """denis"""
> > MsgBox "Bonjour " & Nom
> > End Sub
> > '------------------------------------
> >
> >
> >
> >
> >
> > "Jean-Paul V" a écrit dans le message de groupe
> > de
> > discussion :
> >
> > 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
> > >


Avatar
michdenis
Pour la formule, c'est celle que j'ai copiée à partir
d'un message sur ce fil, me semble-t-il !

Effectivement, tu as raison.
a ) pour le +1 , il s'agit de l'enlever si tu veux obtenir
le numéro de la ligne trouvée par la formule.


b ) Le 3 ième argument de la fonction Match(equiv) est
absent "omis" dans la formule. Dans ce cas, les données
de la plage doivent être en ordre croissant ce qui n'est
pas vrai dans l'exemple des données soumis. Ce paramètre
peut prendre 3 valeurs (-1, 0, 1) selon la présentation des
données. Consulte l'aide pour savoir lequel est le plus
approprié à ton tableau des données.


2 Façons d'écrire la formule en VBA :

Formule = "MATCH(1,(" & .Name & "!" & _
.Range("MonImage").Address & _
"=" & MonImage & ")*(" & .Name & "!" & _
.Range("MonOeuvre").Address & "=" & _
MonOeuvre & ")*(" & .Name & "!" & _
.Range("MonAuteur").Address & "=" & _
MonAuteur & "),0)"

Formule = "MATCH(1,(MonImage=" & MonImage & ")*(" & _
"MonOeuvre=" & MonOeuvre & ")*(" & _
"MonAuteur=" & MonAuteur & "),0)"

Je réitère l'avertissement : ne pas se méprendre entre le nom
des plages de cellules et le nom de la variable portant le même
nom.




"Jean-Paul V" a écrit dans le message de groupe de
discussion :
Bonjour MichDenis
J'ai regardé votre fichier, on constate que votre macro donne non pas le n°
de ligne mais n° de ligne + 1.
Et bizarrement si je change dans la macro les variables A3 , C3 , B3 en A2
C2 B2 cela donne 6 donc ligne + 4 je ne comprends pas pourquoi je ne trouve
pas 3 au lieu de 6
--
Jean-Paul V


"michdenis" wrote:

http://cjoint.com/?jrryPy8h83



"Jean-Paul V" a écrit dans le message de groupe de
discussion :

Je ne vois pas de macro dans ton fichier que j'ai chargé sur mon micro
NB: puisque tu as créé des champs ta fonction matricielle avec des nom de
champs donne :
{=EQUIV(1;(MonImage="denis3")*(MonOeuvre="Sonate")*(MonAuteur="Bach"))+1}
--
Jean-Paul V


"michdenis" wrote:

> Un fichier exemple là : http://cjoint.com/?jrnfDplfoD
>
>
>
> "Jean-Paul V" a écrit dans le message de groupe
> de
> discussion :
> Bonjour MichDenis
>
> J'ai essayé de reprendre ta macro en ajoutant les variables calculées.
> Je n'ai pas pu garder :
> MonImage = """ & .range("A1") & """ 'car VBA voit rouge dès l'écriture et
> ça se plante ( Version Excel 2000 ) j'ai donc fait les corrections suivantes.
> La macro avec les variables telles que tu les a précédemment définies avec 3
> """ pourrait donner ceci, mais bien que je me suis assuré que j'ai en L1 , M1
> , N1 des variable correctes cela se plante sur X = Evaluate...erreur 13
> incompatibilité de type
> '----------------------------------------------------
> Sub TestMichDenisVariableCalculée()
> 'Déclaration des variable
> Dim MonImage As String
> Dim MonOeuvre As String
> Dim MonAuteur As String
> Dim X As Long
> Formulaire.Show
> With Worksheets("BD")
> Range("L1").Value > > Formulaire.ChoixDisque.List(Formulaire.ChoixDisque.ListIndex) 'ça c'est OK
> Range("M1").Value > > Formulaire.ChoixOeuvre.List(Formulaire.ChoixOeuvre.ListIndex)
> Range("N1").Value > > Formulaire.choixnom.List(Formulaire.choixnom.ListIndex)
> ' MonImage = """ & .range("L1") & """ 'ce plante et voit rouge dès
> l'écriture
> ' MonOeuvre = """ & .range("M1") & """
> ' MonAuteur = """ & .range("N1") & """
> MonImage = .Range("L1")
> MonImage = """""""" & MonImage & """"""""
> MonOeuvre = .Range("M1")
> MonOeuvre = """""""" & MonOeuvre & """"""""
> MonAuteur = .Range("N1")
> MonAuteur = """""""" & MonAuteur & """"""""
> 'Juste pour m'assurer que j'ai bien """ """ dans mes variables et
> ça marche ! !
> Range("L1").Value = MonImage
> Range("M1").Value = MonOeuvre
> Range("N1").Value = MonAuteur
> End With
> 'NB- On pourrait remplacer les "Range" par la valeur des textbox
> X = Evaluate("=MATCH(1,(Image=" & MonImage & _
> ")*(Oeuvre=" & MonOeuvre & _
> ")*(Auteur=" & MonAuteur & "),0)+1")
> End Sub
> '----------------------------------------------------
> Faut-il jeter l'éponge ?
> http://cjoint.com/?jrjHJUngwB
> --
> Jean-Paul V
>
>
> "michdenis" wrote:
>
> > Toujours la même procédure, mais si la valeur
> > de tes variables est dans des cellules d'une feuille de calcul
> > '----------------------------------------------------
> > 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
> > With Worksheets("NomDeLaFeuille"
> > MonImage = """ & .range("A1") & """
> > MonOeuvre = """ & .range("A2") & """
> > MonAuteur = """ & .range("A3") & """
> > End With
> > 'NB- On pourrait remplacer les "Range" par la valeur des textbox
> > 'C'est beaucoup plus facile de travailler de cette façon quand il
> > 'y a plusieurs variables... tu as le choix !
> >
> > X = Evaluate("=MATCH(1,(Image=" & MonImage & _
> > ")*(Oeuvre=" & MonOeuvre & _
> > ")*(Auteur=" & MonAuteur & "),0)+1")
> >
> > End Sub
> > '----------------------------------------------------
> >
> > Pourquoi autant de guillemets autour des variables :
> >
> > Je t'ai fait un petit exemple : Suppose que tu veuilles
> > afficher dans une boîte de message la valeur d'une
> > variable mais entouré de guillemets : il y a 2 façons
> > de faire... et je préfère de loin la deuxième approche.
> > Dans cette dernière : les premiers guillemets "Denis"
> > sert à délimiter la chaîne de caractères. Comme il est
> > demandé d'afficher la variable entourée de guillemets
> > il faut alors les dédoubler, donc, ajouter 2 guillemets de
> > chaque côté de "Denis" -> """Denis"""
> >
> > '------------------------------------
> > Sub test1()
> > Dim Nom As String
> > Nom = "denis"
> > MsgBox "Bonjour " & """" & Nom & """"
> > End Sub
> > '------------------------------------
> > Sub test2()
> > Dim Nom As String
> > Nom = """denis"""
> > MsgBox "Bonjour " & Nom
> > End Sub
> > '------------------------------------
> >
> >
> >
> >
> >
> > "Jean-Paul V" a écrit dans le message de
> > groupe
> > de
> > discussion :
> >
> > 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