Problème de création de nom de nouvel onglet [Résolu/Fermé]

Signaler
-
Messages postés
12235
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
6 janvier 2021
-
Bonjour à tous,

je m'adresse à vous car j 'ai un problème en vba et n'étant pas expert( loin de la) j'ai besoin d'une petite aide dans la mesure du possible. J'ai créer un code qui permet de créer un nouvel onglet en le renommant.
tout d'abord j'ouvre une combobox qui permet de sélectionner ou de créer des nom de projet via une base de données, puis cela ouvre un nouveau document et le projet sélectionné ou créer devient le nouvel onglet du document ouvert. (je ne sais pas si c'est très clair). voici mon code peut-être que ce sera plus clair :

Private Sub OK_Click()
Dim i As Integer
nom_fichier = "C:\Users\PERSO\recapcommandes.xlsm"

Me.Hide

If Me.Projet.ListIndex = -1 Then _

Workbooks("Commande fournisseur.xlsm").Sheets("Base").Cells(28, 6500).End(xlToLeft).Offset(0, 1).Value = Me.Projet.Value

Set wb = Workbooks.Open(nom_fichier)

        For i = 1 To Worksheets.Count
                If Worksheets(i).Name = Me.Projet.Value Then
                    Sheets(Me.Projet.Value).Select

                Else
                    With Workbooks("recapcommandes.xlsm")
                            Sheets.Add.Move After:=Sheets(Sheets.Count)
                            Sheets(Sheets.Count).Name = Me.Projet.Value
                          
                    End With
                    End If
        Next i
Else
Set wb = Workbooks.Open(nom_fichier)

    For i = 1 To Worksheets.Count
                If Worksheets(i).Name = Me.Projet.Value Then
                   Sheets(Me.Projet.Value).Select

                Else
                    With Workbooks("recapcommandes.xlsm")
                       Sheets.Add.Move After:=Sheets(Sheets.Count)
                        Sheets(Sheets.Count).Name = Me.Projet.Value     
                    End With
                End If
        Next i


L'erreur qui m'est affiché est : Erreur d'exécution 1004, ce nom est déjà attribué, veuillez utilisez un autre nom. Cette erreur concerne la ligne
Sheets(Sheets.Count).Name = Me.Projet.Value

Je ne vois pas quel est le problème,j'espère que quelqu'un pourra m'aider, je vous remercie de votre aide.


2 réponses

Messages postés
12235
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
6 janvier 2021
2 557
Bonjour,

Que veux tu faire?
- Vérifier que la feuille Me.Projet.Value existe,
- Si oui => on la sélectionne,
- Si non => on la crée.

OK?

Ce que tu fais :
Tu boucles sur toutes les feuilles :
For i = 1 To Worksheets.Count
    If Worksheets(i).Name = Me.Projet.Value Then
        Sheets(Me.Projet.Value).Select
    Else
        With Workbooks("recapcommandes.xlsm")
            Sheets.Add.Move After:=Sheets(Sheets.Count)
            Sheets(Sheets.Count).Name = Me.Projet.Value
        End With
    End If
Next i


Que fait exactement ta boucle?
Si la feuille(1) (appelons là "Feuil1") a le même nom que Me.Projet.Value, alors on la sélectionne. Mais si cette feuille (Feuil1) a un nom différent, alors on créé une nouvelle feuille...
Tu vois pourquoi cela ne fonctionne pas?
Messages postés
12235
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
6 janvier 2021
2 557 > PbOnglet
Est ce qu'il "bascule" (effectue) la fonction Feuil_Existe?
oui il l'effectue, mais ensuite il passe directement au else sans faire la ligne
Worksheets(nom_feuille).Select
Messages postés
12235
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
6 janvier 2021
2 557 > PbOnglet
Parce que la fonction Feuil_Existe renvoie False.
Pourquoi renvoit-elle False?
J'ai l'impression que l'on ne recherche pas la bonne feuille (nom_feuille = Me.Projet.Value) dans le bon classeur (nom_fichier = "C:\Users\PERSO\recapcommandes.xlsm")

Essaie ceci :
Private Sub OK_Click()
Dim nom_fichier As String, nom_feuille As String
Dim i As Integer
nom_fichier = "C:\Users\PERSO\Documents\recapcommandes.xlsm"

Me.Hide
If Me.Projet.ListIndex = -1 Then
Workbooks("Commande fournisseur.xlsm").Sheets("Base").Cells(28, 6500).End(xlToLeft).Offset(0, 1).Value = Me.Projet.Value
End If

Set wb = Workbooks.Open(nom_fichier)
nom_feuille = Me.Projet.Value
nom_fichier = "recapcommandes.xlsm"
'test si la feuille existe
If Feuil_Exist(nom_fichier, nom_feuille) = True Then
    'Si elle existe
     Worksheets(nom_feuille).Select
Else
    'si elle n'existe pas
    With wb
        .Sheets.Add.Move After:=.Sheets(.Sheets.Count)
        .Sheets(Sheets.Count).Name = Me.Projet.Value
    End With
End If
End sub
c'est bon ca marche niquel, c'était juste ca !!! la j'avoue que je comprend pas pourquoi il trouvais pas la feuille puisque juste au dessus on lui avait déja spécifié le chemin pour nom_feuille. Mais en tout cas merci beaucoup!! ca marche !!!
Messages postés
12235
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
6 janvier 2021
2 557 > PbOnglet
Il n'y avait pas de classeur nommé : "C:\Users\PERSO\Documents\recapcommandes.xlsm".
Le nom du classeur était : "recapcommandes.xlsm"

De rien.
A+
Messages postés
15526
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
22 janvier 2021
1 439
Bonjour Pijaku,

de plus le message est claire:

L'erreur qui m'est affiché est : Erreur d'exécution 1004, ce nom est déjà attribué,