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

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
 

Pierrot93

XLDnaute Barbatruc
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
@+
 

luck8282

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

Pierrot93

XLDnaute Barbatruc
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...
@+
 

luck8282

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

Discussions similaires

Réponses
14
Affichages
863

Statistiques des forums

Discussions
314 655
Messages
2 111 605
Membres
111 217
dernier inscrit
aladinkabeya2