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

Miorphee

XLDnaute Nouveau
Bonjour tout le monde,

je reviens avec une nouvelle colle pour moi :confused:! 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 :)
 

Miorphee

XLDnaute Nouveau
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 !
 

Softmama

XLDnaute Accro
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 :)
 

Miorphee

XLDnaute Nouveau
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 :mad:
Du coup, j'ai mis un extrait de mon tableau et le code que j'ai tapé.
 

Pièces jointes

  • Maserie.xls
    38.5 KB · Affichages: 160
  • Maserie.xls
    38.5 KB · Affichages: 170
  • Maserie.xls
    38.5 KB · Affichages: 163

Softmama

XLDnaute Accro
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
 

Discussions similaires

Statistiques des forums

Discussions
312 202
Messages
2 086 177
Membres
103 152
dernier inscrit
Karibu