Feuilles nommer avec le même nom

Résolu
Mimi -  
 Mimi -
Bonjour,

J'ai un code qui me permet de nommer une feuille selon le contenu de combobox...
Je souhaiterai rajouter une vérification et si une feuille à déjà la même nom un message d'erreur, qui ne rentre pas dans le débogage.

Sub NOMMER()
'
Dim nommerfeuille As String

Sheets("MODELE (2)").Select

nommerfeuille = Left(UserForm2.ComboBox1.Text, 3) & " - " & Left(UserForm2.ComboBox2.Text, 25)
Sheets("MODELE (2)").Name = nommerfeuille
ActiveSheet.Shapes.Range(Array("TextBox 3")).Select

ActiveWorkbook.Protect ("Toto"), Structure:=True, Windows:=True

End Sub


Merci d'avance,

13 réponses

cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
Bonjour,

Voir boucle sur les feuilles du classeur et adapter:

https://silkyroad.developpez.com/vba/boucles/#LII
0
Mimi
 
J'ai essayé d'ajouter le code :
Dim Ws As Worksheet

For Each Ws In ThisWorkbook.Worksheets
If Ws.Name = nommerfeuille Then Exit For

msgbox "Une feuille porte le même nom"
Next Ws

Mais cela ne fonctionne pas...
Si une page a le même nom le message apparait plusieurs fois
0
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
Il y a pas mal d’incohérences dans ton code, cela ne risque pas de marcher.

Met Option Explicit en haut du module, cela te signalera tes erreurs:

If sans End If

Après Exit For tu ne peux pas avoir de message

Option Explicit
Dim Ws As Worksheet
For Each Ws In ThisWorkbook.Worksheets
If Ws.Name = nommerfeuille Then
MsgBox "Une feuille porte le même nom"
Else
'code
End If
Next Ws

0
Mimi
 
Le fichier est assez "conséquent", excusez moi d'ores et déjà pour ma piteuse utilisation de VBA (je suis en phase d'apprentissage !)

Après avoir lu le lien conseillé il vaut peut-être mieux mettre la vérification du nom sur les OK des userform 1 et 2 ?

http://www.cjoint.com/c/GJxnDLrwPOw

Merci encore de votre aide, et si je suis un cas désespérée je comprendrai !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
C'est un fichier texte, ce n'est pas un classeur Excel!!!!!!!!!!!!!!!
0
Mimi
 
Je charge pourtant le document .xslm

Je cherche un autre moyen de le partager
0
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
Essayer avec

https://mon-partage.fr/

Il fait combien ce classeur?
0
Mimi
 
Cette fois ça devrait fonctionner ! Il est pas gros 135Ko...

Voici le lien :
https://mon-partage.fr/f/WhCp5GCA/
0
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
Je ne vais pas me plonger dans le fonctionnement de ce classeur, cela me prendrait trop de temps.
Par contre en changeant cela, ça devrait marcher.
Si il y a un bug dans une autre macro, me le signaler, je verrais au cas par cas:

Sub NOMMER()
 Dim nommerfeuille As String
 Sheets("MODELE (2)").Select
 nommerfeuille = Left(UserForm2.ComboBox1.Text, 3) & " - " & Left(UserForm2.ComboBox2.Text, 25)
    For Each Ws In ThisWorkbook.Worksheets
If Ws.Name = nommerfeuille Then
MsgBox "Une feuille porte le même nom"
Exit Sub
Else
 Sheets("MODELE (2)").Name = nommerfeuille
End If
Next Ws
    ActiveSheet.Shapes.Range(Array("TextBox 3")).Select
 ActiveWorkbook.Protect ("Toto"), Structure:=True, Windows:=True
End Sub

0
Mimi
 
Je comprends !

Ca ne fonctionne pas.
C'est en cliquant sur un bouton que l'on déclenche cette macro, voici le code :

Private Sub ok_Click()

Dim X As Boolean
Dim i As Byte

' vérification si combobox vides

For i = 1 To 2
If Me.Controls("Combobox" & i) = "" Then
X = True
End If
Next i

'message si une ou plusieurs sont vides
If X = True Then
msgbox "Veuillez remplir tous les champs"

'On colle les données des box dans les colonnes en dernière ligne
Else: Sheets("MODELE (2)").Select
Range("B3").Value = ComboBox1.Value
Range("B4").Value = ComboBox2.Value
Application.Run "'Modele.xlsm'!Module5.NOMMER"

Unload UserForm2
result = msgbox("Vous pouvez maintenant saisir votre argumentaire")

End If

End Sub

C'est ma dernière idée !
Encore mille mercis pour votre aide,
0
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
Remplacer:

Application.Run "'Modele.xlsm'!Module5.NOMMER" 


par

NOMMER


changer le code dans le module 5 par cela:

Sub NOMMER()
 Dim nommerfeuille As String
 Sheets("MODELE (2)").Select
 nommerfeuille = Left(UserForm2.ComboBox1.Text, 3) & " - " & Left(UserForm2.ComboBox2.Text, 25)
    For Each Ws In ThisWorkbook.Worksheets
If Ws.Name = nommerfeuille Then
MsgBox "Une feuille porte le même nom"
Exit Sub
End If
Next Ws
Sheets("MODELE (2)").Name = nommerfeuille
   ' ActiveSheet.Shapes.Range(Array("TextBox 3")).Select
 MsgBox("Vous pouvez maintenant saisir votre argumentaire")
 ActiveWorkbook.Protect ("Toto"), Structure:=True, Windows:=True
End Sub



supprimer le message de l'userForm2 et le mettre dans la sub Nommer

 MsgBox("Vous pouvez maintenant saisir votre argumentaire")


@+ Le Pivert
0
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
Si feuille même nom il faut supprimer la feuille qui vient d'être créée comme ceci:

Sub NOMMER()
 Dim nommerfeuille As String
 Application.DisplayAlerts = False
Sheets("MODELE (2)").Select
 nommerfeuille = Left(UserForm2.ComboBox1.Text, 3) & " - " & Left(UserForm2.ComboBox2.Text, 25)
    For Each Ws In ThisWorkbook.Worksheets
If Ws.Name = nommerfeuille Then
MsgBox "Une feuille porte le même nom"
Sheets("MODELE (2)").Delete
Exit Sub
End If
Next Ws
Sheets("MODELE (2)").Name = nommerfeuille
   ' ActiveSheet.Shapes.Range(Array("TextBox 3")).Select
   MsgBox ("Vous pouvez maintenant saisir votre argumentaire")
 ActiveWorkbook.Protect ("Toto"), Structure:=True, Windows:=True
 Application.DisplayAlerts = True
End Sub



je pense que cela devrait coller
0
Mimi
 
Ca marche super !
J'ai juste modifié le msgbox qui indiquait que l'argumentaire pouvait être saisi !

Mille mille mercis c'est tout simplement génial
0