Pour la formule, c'est celle que j'ai copiée à partir
d'un message sur ce fil, me semble-t-il !
Effectivement, tu as raison.
a ) pour le +1 , il s'agit de l'enlever si tu veux obtenir
le numéro de la ligne trouvée par la formule.
b ) Le 3 ième argument de la fonction Match(equiv) est
absent "omis" dans la formule. Dans ce cas, les données
de la plage doivent être en ordre croissant ce qui n'est
pas vrai dans l'exemple des données soumis. Ce paramètre
peut prendre 3 valeurs (-1, 0, 1) selon la présentation des
données. Consulte l'aide pour savoir lequel est le plus
approprié à ton tableau des données.
2 Façons d'écrire la formule en VBA :
Formule = "MATCH(1,(" & .Name & "!" & _
.Range("MonImage").Address & _
"=" & MonImage & ")*(" & .Name & "!" & _
.Range("MonOeuvre").Address & "=" & _
MonOeuvre & ")*(" & .Name & "!" & _
.Range("MonAuteur").Address & "=" & _
MonAuteur & "),0)"
Formule = "MATCH(1,(MonImage=" & MonImage & ")*(" & _
"MonOeuvre=" & MonOeuvre & ")*(" & _
"MonAuteur=" & MonAuteur & "),0)"
Je réitère l'avertissement : ne pas se méprendre entre le nom
des plages de cellules et le nom de la variable portant le même
nom.
"Jean-Paul V" a écrit dans le message de groupe de
discussion :
Bonjour MichDenis
J'ai regardé votre fichier, on constate que votre macro donne non pas le n°
de ligne mais n° de ligne + 1.
Et bizarrement si je change dans la macro les variables A3 , C3 , B3 en A2
C2 B2 cela donne 6 donc ligne + 4 je ne comprends pas pourquoi je ne trouve
pas 3 au lieu de 6
--
Jean-Paul V
"michdenis" wrote:
> http://cjoint.com/?jrryPy8h83
>
>
>
> "Jean-Paul V" a écrit dans le message de groupe de
> discussion :
>
> Je ne vois pas de macro dans ton fichier que j'ai chargé sur mon micro
> NB: puisque tu as créé des champs ta fonction matricielle avec des nom de
> champs donne :
> {=EQUIV(1;(MonImage="denis3")*(MonOeuvre="Sonate")*(MonAuteur="Bach"))+1}
> --
> Jean-Paul V
>
>
> "michdenis" wrote:
>
> > Un fichier exemple là : http://cjoint.com/?jrnfDplfoD
> >
> >
> >
> > "Jean-Paul V" a écrit dans le message de groupe
> > de
> > discussion :
> > Bonjour MichDenis
> >
> > J'ai essayé de reprendre ta macro en ajoutant les variables calculées.
> > Je n'ai pas pu garder :
> > MonImage = """ & .range("A1") & """ 'car VBA voit rouge dès l'écriture et
> > ça se plante ( Version Excel 2000 ) j'ai donc fait les corrections suivantes.
> > La macro avec les variables telles que tu les a précédemment définies avec 3
> > """ pourrait donner ceci, mais bien que je me suis assuré que j'ai en L1 , M1
> > , N1 des variable correctes cela se plante sur X = Evaluate...erreur 13
> > incompatibilité de type
> > '----------------------------------------------------
> > Sub TestMichDenisVariableCalculée()
> > 'Déclaration des variable
> > Dim MonImage As String
> > Dim MonOeuvre As String
> > Dim MonAuteur As String
> > Dim X As Long
> > Formulaire.Show
> > With Worksheets("BD")
> > Range("L1").Value > > > Formulaire.ChoixDisque.List(Formulaire.ChoixDisque.ListIndex) 'ça c'est OK
> > Range("M1").Value > > > Formulaire.ChoixOeuvre.List(Formulaire.ChoixOeuvre.ListIndex)
> > Range("N1").Value > > > Formulaire.choixnom.List(Formulaire.choixnom.ListIndex)
> > ' MonImage = """ & .range("L1") & """ 'ce plante et voit rouge dès
> > l'écriture
> > ' MonOeuvre = """ & .range("M1") & """
> > ' MonAuteur = """ & .range("N1") & """
> > MonImage = .Range("L1")
> > MonImage = """""""" & MonImage & """"""""
> > MonOeuvre = .Range("M1")
> > MonOeuvre = """""""" & MonOeuvre & """"""""
> > MonAuteur = .Range("N1")
> > MonAuteur = """""""" & MonAuteur & """"""""
> > 'Juste pour m'assurer que j'ai bien """ """ dans mes variables et
> > ça marche ! !
> > Range("L1").Value = MonImage
> > Range("M1").Value = MonOeuvre
> > Range("N1").Value = MonAuteur
> > End With
> > 'NB- On pourrait remplacer les "Range" par la valeur des textbox
> > X = Evaluate("=MATCH(1,(Image=" & MonImage & _
> > ")*(Oeuvre=" & MonOeuvre & _
> > ")*(Auteur=" & MonAuteur & "),0)+1")
> > End Sub
> > '----------------------------------------------------
> > Faut-il jeter l'éponge ?
> > http://cjoint.com/?jrjHJUngwB
> > --
> > Jean-Paul V
> >
> >
> > "michdenis" wrote:
> >
> > > Toujours la même procédure, mais si la valeur
> > > de tes variables est dans des cellules d'une feuille de calcul
> > > '----------------------------------------------------
> > > Sub test()
> > > 'Déclaration des variable
> > > Dim MonImage As String
> > > Dim MonOeuvre As String
> > > Dim MonAuteur As String
> > > Dim X As Long
> > >
> > > 'Renseigne les variables
> > > With Worksheets("NomDeLaFeuille"
> > > MonImage = """ & .range("A1") & """
> > > MonOeuvre = """ & .range("A2") & """
> > > MonAuteur = """ & .range("A3") & """
> > > End With
> > > 'NB- On pourrait remplacer les "Range" par la valeur des textbox
> > > 'C'est beaucoup plus facile de travailler de cette façon quand il
> > > 'y a plusieurs variables... tu as le choix !
> > >
> > > X = Evaluate("=MATCH(1,(Image=" & MonImage & _
> > > ")*(Oeuvre=" & MonOeuvre & _
> > > ")*(Auteur=" & MonAuteur & "),0)+1")
> > >
> > > End Sub
> > > '----------------------------------------------------
> > >
> > > Pourquoi autant de guillemets autour des variables :
> > >
> > > Je t'ai fait un petit exemple : Suppose que tu veuilles
> > > afficher dans une boîte de message la valeur d'une
> > > variable mais entouré de guillemets : il y a 2 façons
> > > de faire... et je préfère de loin la deuxième approche.
> > > Dans cette dernière : les premiers guillemets "Denis"
> > > sert à délimiter la chaîne de caractères. Comme il est
> > > demandé d'afficher la variable entourée de guillemets
> > > il faut alors les dédoubler, donc, ajouter 2 guillemets de
> > > chaque côté de "Denis" -> """Denis"""
> > >
> > > '------------------------------------
> > > Sub test1()
> > > Dim Nom As String
> > > Nom = "denis"
> > > MsgBox "Bonjour " & """" & Nom & """"
> > > End Sub
> > > '------------------------------------
> > > Sub test2()
> > > Dim Nom As String
> > > Nom = """denis"""
> > > MsgBox "Bonjour " & Nom
> > > End Sub
> > > '------------------------------------
> > >
> > >
> > >
> > >
> > >
> > > "Jean-Paul V" a écrit dans le message de
> > > groupe
> > > de
> > > discussion :
> > >
> > > Bonjour MichDenis
> > > Votre macro marche mais sans variable calculée.
> > > J’ai regardé votre macro Test, et je me suis dit en voyant :
> > > MonImage = """BACH5.jpg""" mais bon sang est-ce que Excel ferait une
> > > allergie au String pour qu’il faille 3 " pour qu’il comprenne que BACH5.jpg
> > > est mon String.
> > > Finalement j’ai trouvé cette macro qui marche également mais que je
> > > comprends mieux :
> > > Sub Test2()
> > > 'Déclaration des variables cela ne semble pas nécessaire, ça marche sans
> > > ' Dim MonImage As String
> > > ' Dim MonOeuvre As String
> > > ' Dim MonAuteur As String
> > > ' Dim X As Long
> > > 'Avec ses variables j'obtiens bien le n° de ligne dans le Range "essai"
> > > MonImage = "BACH5.jpg"
> > > MonOeuvre = "Cantate N°244"
> > > MonAuteur = "BACH"
> > > X = Evaluate("=MATCH(1,(Image=""" & MonImage & _
> > > """)*(Oeuvre=""" & MonOeuvre & _
> > > """)*(Auteur=""" & MonAuteur & """),0)+1")
> > > Range("essai").Value = X 'ça marche j'ai ce que je cherche c'est à dire
> > > la ligne
> > > Range("essai2").Value = """BACH5.jpg""" 'permet d'obtenir "BACH5.jpg"
> > > Range("essai3").Value = "BACH5.jpg" 'permet d'obtenir BACH5.jpg
> > > End Sub
> > >
> > > Maintenant j’essaye de passer à 3 variables calculées données par les
> > > valeurs des 3 ListBox en cascade ( qui sont je vous le rappelle grâce à vous
> > > initialisées et sélectionnées dès l’ouverture du Userform « Formulaire »)
> > > Sub Test3()
> > > 'Déclaration des variable certaines ne sont pas utiles...
> > > ' Dim essai As Range
> > > ' Dim essai2 As Range
> > > ' Dim essai3 As Range
> > > ' Dim essai4 As Range
> > > Dim MonImage As String
> > > Dim MonOeuvre As String
> > > Dim MonAuteur As String
> > > Dim X As Long
> > > Dim Y As String
> > > 'Essayons maintenant d'alimenter les variables avec les ListBox en
> > > cascade définies par l'initialisation du Userform "Formulaire"
> > > Formulaire.Show
> > > Range("essai").Value > > > > Formulaire.ChoixDisque.List(Formulaire.ChoixDisque.ListIndex) 'ça c'est OK
> > > Range("essai2").Value > > > > Formulaire.ChoixOeuvre.List(Formulaire.ChoixOeuvre.ListIndex)
> > > Range("essai3").Value > > > > Formulaire.choixnom.List(Formulaire.choixnom.ListIndex)
> > > 'ce qui suit est pour obtenir dans ma variable les " "
> > > Range("essai5").Value = "=""""""""&essai&"""""""""
> > > Range("essai5").Select
> > > Selection.Copy 'et ça marche ! ! !
> > > Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
> > > False, Transpose:úlse
> > > Range("essai6").Value = "=""""""""&essai2&"""""""""
> > > Range("essai6").Select
> > > Selection.Copy
> > > Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
> > > False, Transpose:úlse
> > > Range("essai7").Value = "=""""""""&essai3&"""""""""
> > > Range("essai7").Select
> > > Selection.Copy
> > > Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
> > > False, Transpose:úlse
> > > 'transférer dans mes 3 variables ce que je veux des trucs avec des " "
> > > MonImage = Range("essai5").Value
> > > MonOeuvre = Range("essai6").Value
> > > MonAuteur = Range("essai7").Value
> > > 'malheureusement ce qui suit se plante avec erreur 13
> > > X = Evaluate("=MATCH(1,(Image=""" & MonImage & _
> > > """)*(Oeuvre=""" & MonOeuvre & _
> > > """)*(Auteur=""" & MonAuteur & """),0)+1")
> > > Range("essai4").Value = X 'ça se plante au dessus
> > > End Sub
> > > 1) Comment éviter que ça se plante
> > > 2) Comment se passer de tous ces Ranges intermédiaires pour trouver X le n°
> > > de ligne de la feuille
> > > http://cjoint.com/?jqqzhXBpyH
> > > à + j’espère
> > >
> > >
> > > Jean-Paul V
> > >
> > >
> > > "michdenis" wrote:
> > >
> > > > Bonjour Jean-Paul,
> > > >
> > > > Voici un bout de code... et observe bien les guillements
> > > >
> > > > C'est une forme générique qui te permet de renseigner tes variables
> > > > avec les valeurs de ton choix
> > > > '----------------------------------------
> > > > Sub test()
> > > > 'Déclaration des variable
> > > > Dim MonImage As String
> > > > Dim MonOeuvre As String
> > > > Dim MonAuteur As String
> > > > Dim X As Long
> > > >
> > > > 'Renseigne les variables
> > > > MonImage = """BACH5.jpg"""
> > > > MonOeuvre = """Cantate"""
> > > > MonAuteur = """Bach5"""
> > > >
Pour la formule, c'est celle que j'ai copiée à partir
d'un message sur ce fil, me semble-t-il !
Effectivement, tu as raison.
a ) pour le +1 , il s'agit de l'enlever si tu veux obtenir
le numéro de la ligne trouvée par la formule.
b ) Le 3 ième argument de la fonction Match(equiv) est
absent "omis" dans la formule. Dans ce cas, les données
de la plage doivent être en ordre croissant ce qui n'est
pas vrai dans l'exemple des données soumis. Ce paramètre
peut prendre 3 valeurs (-1, 0, 1) selon la présentation des
données. Consulte l'aide pour savoir lequel est le plus
approprié à ton tableau des données.
2 Façons d'écrire la formule en VBA :
Formule = "MATCH(1,(" & .Name & "!" & _
.Range("MonImage").Address & _
"=" & MonImage & ")*(" & .Name & "!" & _
.Range("MonOeuvre").Address & "=" & _
MonOeuvre & ")*(" & .Name & "!" & _
.Range("MonAuteur").Address & "=" & _
MonAuteur & "),0)"
Formule = "MATCH(1,(MonImage=" & MonImage & ")*(" & _
"MonOeuvre=" & MonOeuvre & ")*(" & _
"MonAuteur=" & MonAuteur & "),0)"
Je réitère l'avertissement : ne pas se méprendre entre le nom
des plages de cellules et le nom de la variable portant le même
nom.
"Jean-Paul V" <JeanPaulV@discussions.microsoft.com> a écrit dans le message de groupe de
discussion : 3975A2BB-8A2F-4381-B002-70CBEF2A180A@microsoft.com...
Bonjour MichDenis
J'ai regardé votre fichier, on constate que votre macro donne non pas le n°
de ligne mais n° de ligne + 1.
Et bizarrement si je change dans la macro les variables A3 , C3 , B3 en A2
C2 B2 cela donne 6 donc ligne + 4 je ne comprends pas pourquoi je ne trouve
pas 3 au lieu de 6
--
Jean-Paul V
"michdenis" wrote:
> http://cjoint.com/?jrryPy8h83
>
>
>
> "Jean-Paul V" <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"""
> > > >
Pour la formule, c'est celle que j'ai copiée à partir
d'un message sur ce fil, me semble-t-il !
Effectivement, tu as raison.
a ) pour le +1 , il s'agit de l'enlever si tu veux obtenir
le numéro de la ligne trouvée par la formule.
b ) Le 3 ième argument de la fonction Match(equiv) est
absent "omis" dans la formule. Dans ce cas, les données
de la plage doivent être en ordre croissant ce qui n'est
pas vrai dans l'exemple des données soumis. Ce paramètre
peut prendre 3 valeurs (-1, 0, 1) selon la présentation des
données. Consulte l'aide pour savoir lequel est le plus
approprié à ton tableau des données.
2 Façons d'écrire la formule en VBA :
Formule = "MATCH(1,(" & .Name & "!" & _
.Range("MonImage").Address & _
"=" & MonImage & ")*(" & .Name & "!" & _
.Range("MonOeuvre").Address & "=" & _
MonOeuvre & ")*(" & .Name & "!" & _
.Range("MonAuteur").Address & "=" & _
MonAuteur & "),0)"
Formule = "MATCH(1,(MonImage=" & MonImage & ")*(" & _
"MonOeuvre=" & MonOeuvre & ")*(" & _
"MonAuteur=" & MonAuteur & "),0)"
Je réitère l'avertissement : ne pas se méprendre entre le nom
des plages de cellules et le nom de la variable portant le même
nom.
"Jean-Paul V" a écrit dans le message de groupe de
discussion :
Bonjour MichDenis
J'ai regardé votre fichier, on constate que votre macro donne non pas le n°
de ligne mais n° de ligne + 1.
Et bizarrement si je change dans la macro les variables A3 , C3 , B3 en A2
C2 B2 cela donne 6 donc ligne + 4 je ne comprends pas pourquoi je ne trouve
pas 3 au lieu de 6
--
Jean-Paul V
"michdenis" wrote:
> http://cjoint.com/?jrryPy8h83
>
>
>
> "Jean-Paul V" a écrit dans le message de groupe de
> discussion :
>
> Je ne vois pas de macro dans ton fichier que j'ai chargé sur mon micro
> NB: puisque tu as créé des champs ta fonction matricielle avec des nom de
> champs donne :
> {=EQUIV(1;(MonImage="denis3")*(MonOeuvre="Sonate")*(MonAuteur="Bach"))+1}
> --
> Jean-Paul V
>
>
> "michdenis" wrote:
>
> > Un fichier exemple là : http://cjoint.com/?jrnfDplfoD
> >
> >
> >
> > "Jean-Paul V" a écrit dans le message de groupe
> > de
> > discussion :
> > Bonjour MichDenis
> >
> > J'ai essayé de reprendre ta macro en ajoutant les variables calculées.
> > Je n'ai pas pu garder :
> > MonImage = """ & .range("A1") & """ 'car VBA voit rouge dès l'écriture et
> > ça se plante ( Version Excel 2000 ) j'ai donc fait les corrections suivantes.
> > La macro avec les variables telles que tu les a précédemment définies avec 3
> > """ pourrait donner ceci, mais bien que je me suis assuré que j'ai en L1 , M1
> > , N1 des variable correctes cela se plante sur X = Evaluate...erreur 13
> > incompatibilité de type
> > '----------------------------------------------------
> > Sub TestMichDenisVariableCalculée()
> > 'Déclaration des variable
> > Dim MonImage As String
> > Dim MonOeuvre As String
> > Dim MonAuteur As String
> > Dim X As Long
> > Formulaire.Show
> > With Worksheets("BD")
> > Range("L1").Value > > > Formulaire.ChoixDisque.List(Formulaire.ChoixDisque.ListIndex) 'ça c'est OK
> > Range("M1").Value > > > Formulaire.ChoixOeuvre.List(Formulaire.ChoixOeuvre.ListIndex)
> > Range("N1").Value > > > Formulaire.choixnom.List(Formulaire.choixnom.ListIndex)
> > ' MonImage = """ & .range("L1") & """ 'ce plante et voit rouge dès
> > l'écriture
> > ' MonOeuvre = """ & .range("M1") & """
> > ' MonAuteur = """ & .range("N1") & """
> > MonImage = .Range("L1")
> > MonImage = """""""" & MonImage & """"""""
> > MonOeuvre = .Range("M1")
> > MonOeuvre = """""""" & MonOeuvre & """"""""
> > MonAuteur = .Range("N1")
> > MonAuteur = """""""" & MonAuteur & """"""""
> > 'Juste pour m'assurer que j'ai bien """ """ dans mes variables et
> > ça marche ! !
> > Range("L1").Value = MonImage
> > Range("M1").Value = MonOeuvre
> > Range("N1").Value = MonAuteur
> > End With
> > 'NB- On pourrait remplacer les "Range" par la valeur des textbox
> > X = Evaluate("=MATCH(1,(Image=" & MonImage & _
> > ")*(Oeuvre=" & MonOeuvre & _
> > ")*(Auteur=" & MonAuteur & "),0)+1")
> > End Sub
> > '----------------------------------------------------
> > Faut-il jeter l'éponge ?
> > http://cjoint.com/?jrjHJUngwB
> > --
> > Jean-Paul V
> >
> >
> > "michdenis" wrote:
> >
> > > Toujours la même procédure, mais si la valeur
> > > de tes variables est dans des cellules d'une feuille de calcul
> > > '----------------------------------------------------
> > > Sub test()
> > > 'Déclaration des variable
> > > Dim MonImage As String
> > > Dim MonOeuvre As String
> > > Dim MonAuteur As String
> > > Dim X As Long
> > >
> > > 'Renseigne les variables
> > > With Worksheets("NomDeLaFeuille"
> > > MonImage = """ & .range("A1") & """
> > > MonOeuvre = """ & .range("A2") & """
> > > MonAuteur = """ & .range("A3") & """
> > > End With
> > > 'NB- On pourrait remplacer les "Range" par la valeur des textbox
> > > 'C'est beaucoup plus facile de travailler de cette façon quand il
> > > 'y a plusieurs variables... tu as le choix !
> > >
> > > X = Evaluate("=MATCH(1,(Image=" & MonImage & _
> > > ")*(Oeuvre=" & MonOeuvre & _
> > > ")*(Auteur=" & MonAuteur & "),0)+1")
> > >
> > > End Sub
> > > '----------------------------------------------------
> > >
> > > Pourquoi autant de guillemets autour des variables :
> > >
> > > Je t'ai fait un petit exemple : Suppose que tu veuilles
> > > afficher dans une boîte de message la valeur d'une
> > > variable mais entouré de guillemets : il y a 2 façons
> > > de faire... et je préfère de loin la deuxième approche.
> > > Dans cette dernière : les premiers guillemets "Denis"
> > > sert à délimiter la chaîne de caractères. Comme il est
> > > demandé d'afficher la variable entourée de guillemets
> > > il faut alors les dédoubler, donc, ajouter 2 guillemets de
> > > chaque côté de "Denis" -> """Denis"""
> > >
> > > '------------------------------------
> > > Sub test1()
> > > Dim Nom As String
> > > Nom = "denis"
> > > MsgBox "Bonjour " & """" & Nom & """"
> > > End Sub
> > > '------------------------------------
> > > Sub test2()
> > > Dim Nom As String
> > > Nom = """denis"""
> > > MsgBox "Bonjour " & Nom
> > > End Sub
> > > '------------------------------------
> > >
> > >
> > >
> > >
> > >
> > > "Jean-Paul V" a écrit dans le message de
> > > groupe
> > > de
> > > discussion :
> > >
> > > Bonjour MichDenis
> > > Votre macro marche mais sans variable calculée.
> > > J’ai regardé votre macro Test, et je me suis dit en voyant :
> > > MonImage = """BACH5.jpg""" mais bon sang est-ce que Excel ferait une
> > > allergie au String pour qu’il faille 3 " pour qu’il comprenne que BACH5.jpg
> > > est mon String.
> > > Finalement j’ai trouvé cette macro qui marche également mais que je
> > > comprends mieux :
> > > Sub Test2()
> > > 'Déclaration des variables cela ne semble pas nécessaire, ça marche sans
> > > ' Dim MonImage As String
> > > ' Dim MonOeuvre As String
> > > ' Dim MonAuteur As String
> > > ' Dim X As Long
> > > 'Avec ses variables j'obtiens bien le n° de ligne dans le Range "essai"
> > > MonImage = "BACH5.jpg"
> > > MonOeuvre = "Cantate N°244"
> > > MonAuteur = "BACH"
> > > X = Evaluate("=MATCH(1,(Image=""" & MonImage & _
> > > """)*(Oeuvre=""" & MonOeuvre & _
> > > """)*(Auteur=""" & MonAuteur & """),0)+1")
> > > Range("essai").Value = X 'ça marche j'ai ce que je cherche c'est à dire
> > > la ligne
> > > Range("essai2").Value = """BACH5.jpg""" 'permet d'obtenir "BACH5.jpg"
> > > Range("essai3").Value = "BACH5.jpg" 'permet d'obtenir BACH5.jpg
> > > End Sub
> > >
> > > Maintenant j’essaye de passer à 3 variables calculées données par les
> > > valeurs des 3 ListBox en cascade ( qui sont je vous le rappelle grâce à vous
> > > initialisées et sélectionnées dès l’ouverture du Userform « Formulaire »)
> > > Sub Test3()
> > > 'Déclaration des variable certaines ne sont pas utiles...
> > > ' Dim essai As Range
> > > ' Dim essai2 As Range
> > > ' Dim essai3 As Range
> > > ' Dim essai4 As Range
> > > Dim MonImage As String
> > > Dim MonOeuvre As String
> > > Dim MonAuteur As String
> > > Dim X As Long
> > > Dim Y As String
> > > 'Essayons maintenant d'alimenter les variables avec les ListBox en
> > > cascade définies par l'initialisation du Userform "Formulaire"
> > > Formulaire.Show
> > > Range("essai").Value > > > > Formulaire.ChoixDisque.List(Formulaire.ChoixDisque.ListIndex) 'ça c'est OK
> > > Range("essai2").Value > > > > Formulaire.ChoixOeuvre.List(Formulaire.ChoixOeuvre.ListIndex)
> > > Range("essai3").Value > > > > Formulaire.choixnom.List(Formulaire.choixnom.ListIndex)
> > > 'ce qui suit est pour obtenir dans ma variable les " "
> > > Range("essai5").Value = "=""""""""&essai&"""""""""
> > > Range("essai5").Select
> > > Selection.Copy 'et ça marche ! ! !
> > > Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
> > > False, Transpose:úlse
> > > Range("essai6").Value = "=""""""""&essai2&"""""""""
> > > Range("essai6").Select
> > > Selection.Copy
> > > Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
> > > False, Transpose:úlse
> > > Range("essai7").Value = "=""""""""&essai3&"""""""""
> > > Range("essai7").Select
> > > Selection.Copy
> > > Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
> > > False, Transpose:úlse
> > > 'transférer dans mes 3 variables ce que je veux des trucs avec des " "
> > > MonImage = Range("essai5").Value
> > > MonOeuvre = Range("essai6").Value
> > > MonAuteur = Range("essai7").Value
> > > 'malheureusement ce qui suit se plante avec erreur 13
> > > X = Evaluate("=MATCH(1,(Image=""" & MonImage & _
> > > """)*(Oeuvre=""" & MonOeuvre & _
> > > """)*(Auteur=""" & MonAuteur & """),0)+1")
> > > Range("essai4").Value = X 'ça se plante au dessus
> > > End Sub
> > > 1) Comment éviter que ça se plante
> > > 2) Comment se passer de tous ces Ranges intermédiaires pour trouver X le n°
> > > de ligne de la feuille
> > > http://cjoint.com/?jqqzhXBpyH
> > > à + j’espère
> > >
> > >
> > > Jean-Paul V
> > >
> > >
> > > "michdenis" wrote:
> > >
> > > > Bonjour Jean-Paul,
> > > >
> > > > Voici un bout de code... et observe bien les guillements
> > > >
> > > > C'est une forme générique qui te permet de renseigner tes variables
> > > > avec les valeurs de ton choix
> > > > '----------------------------------------
> > > > Sub test()
> > > > 'Déclaration des variable
> > > > Dim MonImage As String
> > > > Dim MonOeuvre As String
> > > > Dim MonAuteur As String
> > > > Dim X As Long
> > > >
> > > > 'Renseigne les variables
> > > > MonImage = """BACH5.jpg"""
> > > > MonOeuvre = """Cantate"""
> > > > MonAuteur = """Bach5"""
> > > >