Guillemets ou pas guillemets ...? Telle est la question

Bonjour,

Je m'en remets à vos mains expertes.

Je souhaite faire une macro en VBA pour faire une liste déroulante, dépendamment d'une cellule dont les valeurs correspondent à une liste.

J'ai consulté un bon nombre de forums, et apparemment la réponse aurait été trouvée ... mais en 2015, et la solution semble ne plus fonctionner.

For MACROLIGNE = 1 To NOMBRESENTREES

    Range("A" & MACROLIGNE + 3 & "").Interior.Color = RGB(255, 192, 0)
    Range("A" & MACROLIGNE + 3 & "").Borders(xlEdgeLeft).Weight = xlMedium
    Range("A" & MACROLIGNE + 3 & "").HorizontalAlignment = xlCenter
    Range("B" & MACROLIGNE + 3 & "").FormulaLocal = "=SI(OU($A" & MACROLIGNE + 3 & "="""";$C" & MACROLIGNE + 3 & "="""");"""";RECHERCHEV($C" & MACROLIGNE + 3 & ";DONNEES!$A$2:$N$22;2;FAUX))"
    Range("B" & MACROLIGNE + 3 & "").Borders(xlEdgeLeft).Weight = xlMedium
    Range("B" & MACROLIGNE + 3 & "").HorizontalAlignment = xlCenter
    Range("C" & MACROLIGNE + 3 & "").Interior.Color = RGB(255, 192, 0)
    Range("C" & MACROLIGNE + 3 & "").Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
        Formula1:="=UNITES"
    Range("C" & MACROLIGNE + 3 & "").Borders(xlEdgeLeft).Weight = xlMedium
    Range("C" & MACROLIGNE + 3 & "").HorizontalAlignment = xlCenter
    Range("D" & MACROLIGNE + 3 & "").FormulaLocal = "=SI(OU($A" & MACROLIGNE + 3 & "="""";$C" & MACROLIGNE + 3 & "="""");"""";RECHERCHEV($C" & MACROLIGNE + 3 & ";DONNEES!$A$2:$N$22;14;FAUX))"
    Range("D" & MACROLIGNE + 3 & "").Borders(xlEdgeLeft).Weight = xlMedium
    Range("D" & MACROLIGNE + 3 & "").HorizontalAlignment = xlCenter
    Range("E" & MACROLIGNE + 3 & "").FormulaLocal = "=SI(OU($A" & MACROLIGNE + 3 & "="""";$F" & MACROLIGNE + 3 & "="""");0;$A" & MACROLIGNE + 3 & ")"
    Range("E" & MACROLIGNE + 3 & "").Borders(xlEdgeLeft).Weight = xlMedium
    Range("E" & MACROLIGNE + 3 & "").HorizontalAlignment = xlCenter
    Range("F" & MACROLIGNE + 3 & "").Interior.Color = RGB(255, 192, 0)
    Range("F" & MACROLIGNE + 3 & "").Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
        Formula1:="=INDIRECT(""" & Range("C" & MACROLIGNE + 3 & "").Address(False, True) & """)"
    Range("F" & MACROLIGNE + 3 & "").Borders(xlEdgeLeft).Weight = xlMedium
    Range("F" & MACROLIGNE + 3 & "").HorizontalAlignment = xlCenter
    Range("G" & MACROLIGNE + 3 & "").FormulaLocal = "=SI(OU($E" & MACROLIGNE + 3 & "="""";$F" & MACROLIGNE + 3 & "="""");0;RECHERCHEV($F" & MACROLIGNE + 3 & ";DONNEES!$Q$2:$S$27;3;FAUX))"
    Range("G" & MACROLIGNE + 3 & "").Borders(xlEdgeLeft).Weight = xlMedium
    Range("G" & MACROLIGNE + 3 & "").HorizontalAlignment = xlCenter
    Range("H" & MACROLIGNE + 3 & "").FormulaLocal = "=SI(OU($A" & MACROLIGNE + 3 & "="""";$I" & MACROLIGNE + 3 & "="""");0;$A" & MACROLIGNE + 3 & ")"
    Range("H" & MACROLIGNE + 3 & "").Borders(xlEdgeLeft).Weight = xlMedium
    Range("H" & MACROLIGNE + 3 & "").HorizontalAlignment = xlCenter
    Range("I" & MACROLIGNE + 3 & "").Interior.Color = RGB(255, 192, 0)
    Range("I" & MACROLIGNE + 3 & "").Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
        Formula1:="=INDIRECT(""" & Range("C" & MACROLIGNE + 3 & "").Address(False, True) & """)"
    Range("I" & MACROLIGNE + 3 & "").Borders(xlEdgeLeft).Weight = xlMedium
    Range("I" & MACROLIGNE + 3 & "").HorizontalAlignment = xlCenter
    Range("J" & MACROLIGNE + 3 & "").FormulaLocal = "=SI(OU($H" & MACROLIGNE + 3 & "="""";$I" & MACROLIGNE + 3 & "="""");0;RECHERCHEV($I" & MACROLIGNE + 3 & ";DONNEES!$Q$2:$S$27;3;FAUX))"
    Range("J" & MACROLIGNE + 3 & "").Borders(xlEdgeLeft).Weight = xlMedium
    Range("J" & MACROLIGNE + 3 & "").Borders(xlEdgeRight).Weight = xlMedium
    Range("J" & MACROLIGNE + 3 & "").HorizontalAlignment = xlCenter
    Range("L" & MACROLIGNE + 3 & "").FormulaLocal = "=SI(OU($A" & MACROLIGNE + 3 & "="""";$C" & MACROLIGNE + 3 & "="""");0;SOMME($A" & MACROLIGNE + 3 & "*$D" & MACROLIGNE + 3 & ";$E" & MACROLIGNE + 3 & "*$G" & MACROLIGNE + 3 & ";$H" & MACROLIGNE + 3 & "*$J" & MACROLIGNE + 3 & "))"
    Range("L" & MACROLIGNE + 3 & "").Borders(xlEdgeLeft).Weight = xlMedium
    Range("L" & MACROLIGNE + 3 & "").Borders(xlEdgeRight).Weight = xlMedium
    Range("L" & MACROLIGNE + 3 & "").HorizontalAlignment = xlCenter

Next

Voilà le bestiau.

Le problème est que dans les cellules avec la validation de données INDIRECT des colonnes F et J, la liste de valeurs disponibles n'est pas les valeurs associées au nom situées dans la colonne C de la même ligne, mais renvoient la valeur de cette cellule C.

Lorsque j'ouvre la validation de données en F7 ou J7, il est renseigné " =INDIRECT("$C7") ".

C'est-à-dire avec les guillemets entre les parenthèses de la formule INDIRECT. En les supprimant manuellement, la liste de valeurs fonctionne correctement.

Mais en supprimant deux des trois guillemets de :

Formula1:="=INDIRECT(""" & Range("C" & MACROLIGNE + 3 & "").Address(False, True) & """)"

passant à :

Formula1:="=INDIRECT(" & Range("C" & MACROLIGNE + 3 & "").Address(False, True) & ")"

la MACRO ne fonctionne plus.

Si un savant fou voit d'où peut provenir le problème, ou sait dans quelle discussion/forum chercher, je suis preneur.

Vous remerciant d'avance de votre attention.

A bientôt !

Bonjour

Excel 2023 n'existe pas donc vérifie si tu as 2016, 2019, 2021 ou 365 et corrige ton profil

Joins aussi un fichier exemple représentatif

En VBA on doit bien doubler les " qui ne sont pas les " externes qui indiquent une chaîne

Bonjour,

Navré de répondre aussi tard, les contraintes pro.... ;)

J'avais mis Excel 2023 car je ne parviens pas à trouver où chercher la version.

Utilisant le pack office 365, je présume que la modification sera correcte :)

Merci !

Quant au fichier, j'ai créé une copie que je pourrais transposer.

Espérant mieux démontrer le problème.

Vous en remerciant d'avance.

Rechercher des sujets similaires à "guillemets pas telle question"