Comment parcourrir l'ensemble des plage nommé et les comparer à une variable en VBA

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 !

luck8282

XLDnaute Nouveau
Bonjour,

Je suis en train de faire une macro pour créer des plages nommées. Le truc c'est qu'avant de créer une nouvelle plage nommée je voudrais vérifier que le nom n'existe pas déjà et si c'est le cas arrêter la Macro.

Le nom de la plage en cours de création est stocké dans la variable C as String. Je suis en train de créer une boucle for each N... (avec N as Name) mais ça ne marche pas. C'est probablement pas la bonne façon de faire.

Si quelqu'un à une idée merci d'avance. En gras dans le code.

Voici le code:

Sub creaction_nouvelle_reference()

Dim A As Long
Dim B As String
Dim C As String
Dim E As String
Dim F As String
Dim H As String
Dim I As String
Dim N As Name

A = InputBox(Title:="Bonjour, Salamalikoun, Welcome, Auch kommen, Así vienen", Prompt:="Veuillez Saisir la reférence du produit (uniquement des chiffres) Merci pour votre coopération.")
B = Right(A, 5)
C = "_605_" & B
E = "605-" & B
F = E & """"
H = Right(F, 1)
I = H & F

For Each N In ActiveWorkbook.Names
If N = C Then GoTo erreur
erreur:
MsgBox "le nom existe déjà veuiller recommercer"
Exit Sub
Else
Next N
End If


ActiveWorkbook.Names.Add Name:=C, RefersToR1C1:= _
"=OFFSET('Prod Vitro ASM'!R1C2,MATCH(" & I & ",'Prod Vitro ASM'!R1C2:R9998C2,0)" _
& "-1,0,COUNTIF('Prod Vitro ASM'!R1C2:R9998C2," & I & "),1)"

Range(C).Offset(0, 34).FormulaR1C1 = "=SUM(OFFSET(" & C & ",0,33,COUNTA(" & C & "),1))"
Range(C).Offset(0, 36).FormulaR1C1 = "=AVERAGE(OFFSET(" & C & ",0,25,COUNTA(" & C & "),1))"
Range(C).Offset(0, 37).FormulaR1C1 = "=SUM(OFFSET(" & C & ",0,27,COUNTA(" & C & "),1))/SUM(OFFSET(" & C & ",0,24,COUNTA(" & C & "),1))"
Range(C).Offset(0, 38).FormulaR1C1 = "=AVERAGE(OFFSET(" & C & ",0,27,COUNTA(" & C & "),1))"


End Sub
 
Re : Comment parcourrir l'ensemble des plage nommé et les comparer à une variable en

Bonjour Luck

peut être comme ceci :

Code:
Sub test()
Dim n As Name, monnom As String, b As Boolean
Do
b = False
monnom = InputBox("Quel nom de plage ?")
For Each n In ActiveWorkbook.Names
    If n.Name = monnom Then
        b = True
        MsgBox "nom existe déjà..."
    End If
Next n
Loop While b
End Sub

bonne journée
@+
 
Re : Comment parcourrir l'ensemble des plage nommé et les comparer à une variable en

Bonjour Luck

peut être comme ceci :

bonne journée
@+

Merci Pierrot.
Ca marche mais j'ai juste modifié un peu le code car dans le cas d'une plage déjà existante ça boucle en continue sur la MsgBox (légèrement viral 🙁) .

Petit question: comment faire dans ce forum pour mettre du code dans un encadré.

Voici le code:
Sub creaction_nouvelle_reference()

Dim A As Long
Dim b As String
Dim C As String
Dim E As String
Dim F As String
Dim H As String
Dim I As String
Dim n As Name, monnom As String, V As Boolean

A = InputBox(Title:="Bonjour, Salamalikoun, Welcome, Auch kommen, Así vienen", Prompt:="Veuillez Saisir la reférence du produit (uniquement des chiffres) Merci pour votre coopération.")
b = Right(A, 5)
C = "_605_" & b
E = "605-" & b
F = E & """"
H = Right(F, 1)
I = H & F

Do
V = False
monnom = C
For Each n In ActiveWorkbook.Names
If n.Name = monnom Then
V = True
MsgBox "nom existe déjà..."
Exit Sub
End If
Next n
Loop While V

ActiveWorkbook.Names.Add Name:=C, RefersToR1C1:= _
"=OFFSET('Prod Vitro ASM'!R1C2,MATCH(" & I & ",'Prod Vitro ASM'!R1C2:R9998C2,0)" _
& "-1,0,COUNTIF('Prod Vitro ASM'!R1C2:R9998C2," & I & "),1)"

Range(C).Offset(0, 34).FormulaR1C1 = "=SUM(OFFSET(" & C & ",0,33,COUNTA(" & C & "),1))"
Range(C).Offset(0, 36).FormulaR1C1 = "=AVERAGE(OFFSET(" & C & ",0,25,COUNTA(" & C & "),1))"
Range(C).Offset(0, 37).FormulaR1C1 = "=SUM(OFFSET(" & C & ",0,27,COUNTA(" & C & "),1))/SUM(OFFSET(" & C & ",0,24,COUNTA(" & C & "),1))"
Range(C).Offset(0, 38).FormulaR1C1 = "=AVERAGE(OFFSET(" & C & ",0,27,COUNTA(" & C & "),1))"


End Sub
 
Re : Comment parcourrir l'ensemble des plage nommé et les comparer à une variable en

Re

sauf erreur, cela doit boucler sur "l'inputbox" et non sr la "msgbox" enfin me semble t-il , te renvoie l'inputbox, jusqu'à ce que le nom ne soit pas trouvé... ceci était fait dans ce sens... maintenant effectivement, si tu préfères sortir de la procédure...
@+
 
Re : Comment parcourrir l'ensemble des plage nommé et les comparer à une variable en

En effet autant pour moi.
Mais j'ai modifié le code pour pouvoir l'intégrer dans ma Macro en cours de construction et dans ce cas le nom de la plage est stocké dans la variable C.

Mais c'est parfait: ça marche.
 
- 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

Réponses
4
Affichages
332
Réponses
3
Affichages
518
  • Question Question
Microsoft 365 Code VBA
Réponses
7
Affichages
622
Réponses
5
Affichages
379
Réponses
6
Affichages
522
Retour