VBA insérer une cellule dans une plage nommée

  • Initiateur de la discussion Initiateur de la discussion Miorphee
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Miorphee

XLDnaute Nouveau
Bonjour tout le monde,

je reviens avec une nouvelle colle pour moi 😕! Je souhaite pouvoir ajouter une cellule sélectionnée suivant différents critères dans une plage que j'aurais nommé. L'objectif étant d'utiliser le nom de cette plage pour en faire une série graphique.
Un petit exemple pour vous éclairer si ma demande n'est pas claire :
J'ai une plage appelée "Maserie", si la cellule A1 contient la valeur "A" alors je veux que la cellule A1 intègre la plage "Maserie".

Petite précision, j'ai fait un essai avec l'enregistreur de macro et sa solution a l'air de rajouter l'adresse de la cellule dans la zone de référence:

With ActiveWorkbook.Names("Maserie")
.Name = "Maserie"
.RefersToR1C1 = _
"='Mafeuille'!R2C14:R6C14,''Mafeuille''!R14C14,''Mafeuille''!R19C14"
End With

Je suis pas convaincue que ce soit la solution la plus simple avec un SI pour sélectionner les cellules à intégrer dans la plage, si qqun a une idée, je suis toute ouie 🙂
 
Re : VBA insérer une cellule dans une plage nommée

je me suis enthousiasmée un brin trop vite, je n'arrive pas à l'adapter à mes données (Maserie s'arrête à la première cellule, malgré toutes les modifs testées), du coup j'aurais qq questions de compréhension :

Private Sub CommandButton1_Click()
Dim c As Range, Zone As Range
Set c = Range("A1"): Set Zone = Range("IV1")

c est ma cellule de départ mais Zone correspond à quoi? une cellule vide ou la dernière cellule du tableau?

Do While c <> ""
If Left(c, 1) = "A" Then Set Zone = Union(Zone, c)
Set c = c(2, 1)
Loop

Le Left(c,1) signifie bien lire le premier caractère dans l'ensemble c ? dans ce cas est-ce que c'est possible de le remplacer par c(1,1) pour regarder si le contenu de la cellule ligne 1, colonne 1 est "A"?
Set c = c(2,1) correspond à l'adresse de la cellule que l'on veut intégrer?
Est-ce que le passage à la cellule suivante de la colonne est automatique avec le loop ? (j'utilise plutôt des for)

Set Zone = Intersect(Range("A:A"), Zone)
ActiveWorkbook.Names.Add Name:="Maserie", RefersTo:=Zone
[Maserie].Select
End Sub

voila j'ai terminé avec mes interrogations, merci d'avance pour les réponses !
 
Re : VBA insérer une cellule dans une plage nommée

Re,

Houlà, il semble que tu aies besoin d'explications en effet :
VB:
Private Sub CommandButton1_Click()
Dim c As Range, Zone As Range
'(c va prendre chaque cellule de la colonne A tant que non vide
' et Zone représentera la Plage Maserie)
Set c = Range("A1"): Set Zone = Range("IV1")
'(au départ on place c en A1 et Zone sur la cellule IV1, afin qu'elle ne soit pas vide sinon l'union qui suit ne peut fonctionner)
Do While c <> ""
    If Left(c, 1) = "A" Then Set Zone = Union(Zone, c)  'Left(c(2,1) : ça c'est le 1er caractère de la cellule c. Si c'est A, alors je rajoute la cellule c à la Zone qui deviendra Maserie
    Set c = c(2, 1) 'Une manière rapide de passer à la cellule du dessous
Loop 'Boucle tant que c n'est pas vide
Set Zone = Intersect(Range("A:A"), Zone) 'à la fin, j'enlève la cellule IV1 à Zone pour ne garder que les cellules de la colonne A qui commencent par la lettre A
ActiveWorkbook.Names.Add Name:="Maserie", RefersTo:=Zone 'et je définis Maserie comme étant la plage Zone
[Maserie].Select 'et même que je la sélectionne pour qu'on la voit mieux
End Sub 'valà c'est fini, bonne nuit :)
 
Re : VBA insérer une cellule dans une plage nommée

Bonjour,

un grand merci pour les explications, j'ai l'impression d'avoir tout compris et pourtant les dernières lignes de mon code buguent 😡
Du coup, j'ai mis un extrait de mon tableau et le code que j'ai tapé.
 

Pièces jointes

Re : VBA insérer une cellule dans une plage nommée

Bonjour,

à priori, remplace
Code:
If Left(c, 1) = "A" & Left(z, 1) = "a" Then
et
Code:
        ElseIf Left(c, 1) = "A" & Left(z, 1) = "b" Then
par
Code:
If Left(c, 1) = "A" And Left(z, 1) = "a" Then
et
Code:
        ElseIf Left(c, 1) = "A" And Left(z, 1) = "b" Then

Je te laisse voir si ça marche mieux
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour