Feuilles nommer avec le même nom
Résolu
Mimi
-
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,
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
-
Bonjour,
Voir boucle sur les feuilles du classeur et adapter:
https://silkyroad.developpez.com/vba/boucles/#LII
-
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 -
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
-
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 ! -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
C'est un fichier texte, ce n'est pas un classeur Excel!!!!!!!!!!!!!!!
-
-
-
Cette fois ça devrait fonctionner ! Il est pas gros 135Ko...
Voici le lien :
https://mon-partage.fr/f/WhCp5GCA/ -
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
-
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, -
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 -
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
-
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