Feuilles nommer avec le même nom

Résolu/Fermé
Mimi - 16 oct. 2017 à 15:38
 Mimi - 25 oct. 2017 à 09:39
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 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
16 oct. 2017 à 16:00
Bonjour,

Voir boucle sur les feuilles du classeur et adapter:

https://silkyroad.developpez.com/vba/boucles/#LII
0
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 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
23 oct. 2017 à 14:23
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
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 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
23 oct. 2017 à 16:06
C'est un fichier texte, ce n'est pas un classeur Excel!!!!!!!!!!!!!!!
0
Je charge pourtant le document .xslm

Je cherche un autre moyen de le partager
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
23 oct. 2017 à 16:24
Essayer avec

https://mon-partage.fr/

Il fait combien ce classeur?
0
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 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
23 oct. 2017 à 17:08
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
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 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
Modifié le 23 oct. 2017 à 18:03
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 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
23 oct. 2017 à 18:16
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
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