> Finalement j'ai trouvé cette macro ...
> Finalement j'ai trouvé cette macro ...
> Finalement j'ai trouvé cette macro ...
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
>
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
>
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
>
"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
"Jean-Paul V" <JeanPaulV@discussions.microsoft.com> a écrit dans le message de
news: 9299648F-227E-4859-A359-F1EEA43985D9@microsoft.com...
>
> 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
"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
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
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" <JeanPaulV@discussions.microsoft.com> a écrit dans le message de groupe de
discussion : 25B4609F-E319-45C0-A52F-0546568D761A@microsoft.com...
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
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
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
>
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" <JeanPaulV@discussions.microsoft.com> a écrit dans le message de groupe de
discussion : D9EDADC6-3BCD-45B5-A09A-6664E4AAC91F@microsoft.com...
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" <JeanPaulV@discussions.microsoft.com> a écrit dans le message de groupe de
> discussion : 25B4609F-E319-45C0-A52F-0546568D761A@microsoft.com...
> 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
>
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
>
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
>
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" <JeanPaulV@discussions.microsoft.com> a écrit dans le message de groupe de
discussion : D9EDADC6-3BCD-45B5-A09A-6664E4AAC91F@microsoft.com...
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" <JeanPaulV@discussions.microsoft.com> a écrit dans le message de groupe
> de
> discussion : 25B4609F-E319-45C0-A52F-0546568D761A@microsoft.com...
> 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
>
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
>
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
> >
Un fichier exemple là : http://cjoint.com/?jrnfDplfoD
"Jean-Paul V" <JeanPaulV@discussions.microsoft.com> a écrit dans le message de groupe de
discussion : B126EB60-CB85-44DB-B674-8DFD42D60DCE@microsoft.com...
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" <JeanPaulV@discussions.microsoft.com> a écrit dans le message de groupe de
> discussion : D9EDADC6-3BCD-45B5-A09A-6664E4AAC91F@microsoft.com...
>
> 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" <JeanPaulV@discussions.microsoft.com> a écrit dans le message de groupe
> > de
> > discussion : 25B4609F-E319-45C0-A52F-0546568D761A@microsoft.com...
> > 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
> >
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
> >
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
> >
Un fichier exemple là : http://cjoint.com/?jrnfDplfoD
"Jean-Paul V" <JeanPaulV@discussions.microsoft.com> a écrit dans le message de groupe de
discussion : B126EB60-CB85-44DB-B674-8DFD42D60DCE@microsoft.com...
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" <JeanPaulV@discussions.microsoft.com> a écrit dans le message de groupe
> de
> discussion : D9EDADC6-3BCD-45B5-A09A-6664E4AAC91F@microsoft.com...
>
> 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" <JeanPaulV@discussions.microsoft.com> a écrit dans le message de
> > groupe
> > de
> > discussion : 25B4609F-E319-45C0-A52F-0546568D761A@microsoft.com...
> > 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
> >
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
> >
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
> > >
http://cjoint.com/?jrryPy8h83
"Jean-Paul V" <JeanPaulV@discussions.microsoft.com> a écrit dans le message de groupe de
discussion : 5CB26498-DA98-4D98-B53E-EB921DDE3569@microsoft.com...
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" <JeanPaulV@discussions.microsoft.com> a écrit dans le message de groupe de
> discussion : B126EB60-CB85-44DB-B674-8DFD42D60DCE@microsoft.com...
> 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" <JeanPaulV@discussions.microsoft.com> a écrit dans le message de groupe
> > de
> > discussion : D9EDADC6-3BCD-45B5-A09A-6664E4AAC91F@microsoft.com...
> >
> > 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" <JeanPaulV@discussions.microsoft.com> a écrit dans le message de
> > > groupe
> > > de
> > > discussion : 25B4609F-E319-45C0-A52F-0546568D761A@microsoft.com...
> > > 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
> > >
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
> > >
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
> > >
http://cjoint.com/?jrryPy8h83
"Jean-Paul V" <JeanPaulV@discussions.microsoft.com> a écrit dans le message de groupe de
discussion : 5CB26498-DA98-4D98-B53E-EB921DDE3569@microsoft.com...
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" <JeanPaulV@discussions.microsoft.com> a écrit dans le message de groupe
> de
> discussion : B126EB60-CB85-44DB-B674-8DFD42D60DCE@microsoft.com...
> 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" <JeanPaulV@discussions.microsoft.com> a écrit dans le message de
> > groupe
> > de
> > discussion : D9EDADC6-3BCD-45B5-A09A-6664E4AAC91F@microsoft.com...
> >
> > 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" <JeanPaulV@discussions.microsoft.com> a écrit dans le message de
> > > groupe
> > > de
> > > discussion : 25B4609F-E319-45C0-A52F-0546568D761A@microsoft.com...
> > > 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
> > >
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
> > >