Problème avec Range

Bonjour à tous,

Je dispose de deux variables String qui possède tout deux une valeur bien défini.

Supposons qu'elles s'appellent variable1 et variable2.

Dans mon cas j'ai :

Dim variable1 As String

Dim variable2 As String

Il se trouve que dans mon code à un moment les deux variables prennent respectivement la valeur "F16" et "F25"

Je souhaite faire un menu déroulant donc je tape tranquillement le code pour :

With Selection.Validation

.Delete

.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _

xlBetween, Formula1:=" variable1 & ":" & variable2"

Sauf que là vba sort en erreur en me disant qu'il y a une erreur de syntaxe (qui vient du Formula1:"...)

Sauriez-vous m'aider ?

Merci d'avance !

Bonjour,

Vous avez 2 guillemets en trop ! Une syntaxe révisée :

With Range("MaPlage").Validation
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=variable1 & ":" & variable2
End With

Bonjour,

 Formula1:=variable1 & ":" & variable2

edit : bonjour Pedro, trop tard pour moi !

edit2 : ATTENTION, BE CAREFUL, ACHTUNG : si tu ne mets pas de $ alors la plage sera différente selon la zone à laquelle elle aura été affectée !! comme je vois qu'il est écrit selection, cela laisse sous-entendre qu'il puisse y avoir plusieurs cellules concernées.

Salut ope_af, Pedro22, Steelson,

Message supprimé.

Premièrement : Très bien mais maintenant la liste déroulante contient un seul élément qui est F16:F25 et non chaque valeur de F16 à F25.

Steelson j'aimerais ne pas passer par sélection et donner directement l'endroit où je veux le mettre à savoir en cellule S40 mais je ne connais pas la syntaxe pourrais-tu m'éclairer ?

Salut Steelson, xorsankukai !

Premièrement : Très bien mais maintenant la liste déroulante contient un seul élément qui est F16:F25 et non chaque valeur de F16 à F25.

A tester :

Formula1:=Range(variable1 & ":" & variable2)

Steelson j'aimerais ne pas passer par sélection et donner directement l'endroit où je veux le mettre à savoir en cellule S40 mais je ne connais pas la syntaxe pourrais-tu m'éclairer ?

Comme indiqué dans mon premier post, vous pouvez écrire directement le nom de la plage à la place de "Selection" :

With Range("S40").Validation
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=variable1 & ":" & variable2
End With

Pedro lorsque j'utilise ta nouvelle formule j'ai une erreur d’exécution '1004', une erreur "définie par l'application ou par l'objet"..

Et merci j'ai changé le sélection parce que tu m'as dit.

Steelson j'aimerais ne pas passer par sélection et donner directement l'endroit où je veux le mettre à savoir en cellule S40 mais je ne connais pas la syntaxe pourrais-tu m'éclairer ?

Pedro a répondu (brillamment)

Je note que si ceci ne concerne qu'une seule zone, alors tu peux omettre les $, sinon il aurait fallu écrire $F$16:$F$25

Re,

Au risque de répondre à coté de la plaque.....

Tu as des données en F16:F25 que tu souhaites utiliser dans une liste en S40 ?

Sub test()

Sheets("Feuil1").Range("F16").CurrentRegion.Name = "plage"    'définit plage comme nom pour  F16:F25

With Range("S40").Validation
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=plage"
End With

End Sub

Pedro22 et Steelson me corrigeront si je dis une ânerie....

Cordialement,

Le problème c'est que la plage grandit au fur et a mesure : F26 peut devenir F27...

Re,

Le problème c'est que la plage grandit au fur et a mesure : F26 peut devenir F27...

As-tu essayé la macro ?

Fais le test en rajoutant des données.....CTRL+e pour exécuter la macro.

2classeur1.xlsm (15.07 Ko)

Cordialement,

Le problème c'est que la plage grandit au fur et a mesure : F26 peut devenir F27...

Au final, pas besoin de VBA dans l'histoire. Vous pouvez créer une plage nommée de façon dynamique (à l'aide d'une fonction INDIRECT ou DECALER par exemple) et la mettre comme référence pour la validation.

Je vous invite à ajouter un fichier type pour illustrer directement nos propositions.

Donc aucun moyen de le faire en vba ?

Sinon sur le fichier joint j'aimerais que lorsqu'on entre un nouveau nom en dessous des autres, le menu déroulant contienne ce nouveau nom.

Merci d'avance

2question.xlsx (8.72 Ko)

Re,

Donc aucun moyen de le faire en vba ?

Si tu ajoutes un nom en colonne F, il s'ajoute automatiquement dans la liste en H17.....(attention, pas de cellule vide entre les données).

Sinon sur le fichier joint j'aimerais que lorsqu'on entre un nouveau nom en dessous des autres, le menu déroulant contienne ce nouveau nom.

Une façon parmi d'autres....

Bonne soirée,

Rechercher des sujets similaires à "probleme range"