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

  1. 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
  2. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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
  3. 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
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    C'est un fichier texte, ce n'est pas un classeur Excel!!!!!!!!!!!!!!!
    0
  6. Mimi
     
    Je charge pourtant le document .xslm

    Je cherche un autre moyen de le partager
    0
  7. Mimi
     
    Cette fois ça devrait fonctionner ! Il est pas gros 135Ko...

    Voici le lien :
    https://mon-partage.fr/f/WhCp5GCA/
    0
  8. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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
  9. 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
  10. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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
  11. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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
  12. 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