Appeler une plage nommée définie via InputBox dans une autre feuille

Bonjour,

Je suis débutant en VBA et nouveau sur ce forum, car je tombe sur un os que je n'arrive pas à résoudre tout seul.

Dans le fichier ci-joint, j’ai une macro dans le Module3 qui me permet de sélectionner une plage de cellules à l’aide d’une inputBox, plage que je nomme « plageEtiquettes » (range). Excel reconnait bien ce nom puisqu’il affiche l’adresse de la plage dans la MsgBox de contrôle en fin de module.

Mais si je veux réutiliser ce nom dans le code du Module1 (même fichier), rien à faire, ça bloque au niveau de la ligne 34 :

For Each celluleTableau In plageEtiquettes (Erreur d’éxécution ‘424’ : Objet requis)

Par contre, si je place l’inputBox dans le module 3, là pas de problème, ça fonctionne, la plage est bien reconnue et le code va jusqu'au bout. Mais ça m’oblige à sélectionner à chaque fois la plage de cellule, même si c’est la même que la dernière fois.

Je me doute que c’est un problème d’identification de variable d’une feuille à l’autre, mais là je sèche : Au delà du bug, ça m'énerve de ne pas comprendre ce qui se passe !

Merci de votre aide.

Hello,

Au vu de ton code et au plus simple, il faut que tu places le code de ConvertirTableauEnListe dans le module 3 à la fin de Selection_plageEtiquette ou le code de Selection_plageEtiquette dans le module 1 au début de ConvertirTableauEnListe .

La raison est que une fois que tu définis ton range via ton inputbox ta procédure se termine donc ta plage n'existe plus.

R@g

R@g,

Merci de ta suggestion qui fonctionne parfaitement. J'avais testé dans un sens (le code du Module3 dans le Module1, lignes 30 à 32), et dans l'autre sens c'est également Ok. Mais ça couple de fait 2 actions que je voudrais garder séparées..

En d'autres mots, y a-t-il un moyen de garder dans la variable plageEtiquette le range choisi via l'inputBox, même et surtout à l'issue de la procédure ? Dans mon esprit, les autres plages de cellules nommées et déterminées par d'autres moyens qu'une inputBox sont gardées en mémoire et sont réutilisables dans d'autres modules. Mais peut-être que je me trompe.

Je suis preneur de votre expérience.

Merci !

Hello,

Si je comprends bien ce dont tu parles, ce n'est pas une "plage" classique disons mais plutôt une "plage nommée".

Une variable "plage classique" en VBA est de type :

Dim Ma_Plage as Range

Mais une "plage nommée" en VBA est de type :

Dim Ma_Plage as Name

Je t'ajoute ce code qui permet d'ajouter une plage nommée depuis une plage classique :

Set Plage_Input_Box = Sheets("Sheet1").Range("A1:B15") 
ActiveWorkbook.Names.Add Name:="Nom_De_Ma_Plage_Nommee", RefersTo:=Plage_Input_Box

R@g

R@g,

Désolé pour le retour tardif. Je regarde ça demain, mais je pense que tu as vu juste : il me manquait cette notion, et je sentais bien que ça tournais autour de ça, sans pour autant savoir comment avancer...

A suivre !

R@g, un grand merci pour ton intervention très précieuse : ça marche !

Dans le module de l'inputBox, j'attribue un nom au range qui a été défini, en suivant ton code. Dans le module de traitement, je fais l'inverse, à savoir définir un autre range en fonction de la plage nommée dans le premier module avant de lancer le traitement.

De cette façon, je peux éditer mes étiquettes en gardant toujours la même plage (plage habituelle, pas de re-saisie à chaque fois). Mais si épisodiquement je veux changer la plage, je clique sur le bouton adéquat avant l'édition, et celle-ci tient compte de la nouvelle plage et la garde en mémoire jusqu'au prochain ajustement.

C'est top ! Super forum, c'est cool de pouvoir compter sur pros comme R@g, disponibles pour partager leur expérience.

Rechercher des sujets similaires à "appeler plage nommee definie via inputbox feuille"