IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

feuille qui porte le même nom impossible a créer


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mai 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 21
    Points : 16
    Points
    16
    Par défaut feuille qui porte le même nom impossible a créer
    bonjour
    J'ai tourver dans les divers discussion des bouts de code pour verifiée qu'une feuille ne porte pas le même nom que celle que je veu créer et si il y a doublon il rajoute un chiffre derière, mais sa ne marche que pour une seule fois
    j'ai bien une feuille teste une teste1 mais après sa plante.
    déclaration des variables

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim s As Worksheet
    Dim i As Integer
    le bout de code qui plante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    For Each s In Sheets
     
        If s.Name = nomoffre Then
            Debug.Print s.Name
            i = i + 1
            s.Name = nomoffre & i
        End If
    Next
     
     Sheets("ETUDE").Select
        Sheets("ETUDE").Name = nomoffre
    J'ai l'impression que c'est avec le i que sa bugue

    Merci de votre aide

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Une solution possible avec ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    Public S As Worksheet
    Public I As Long
    Public NomOffre As String
    Public NbFeuillesEtude As Long
     
    Sub Essai()
     
    NomOffre = "ETUDE"
    I = 0
    NbFeuillesEtude = 0
     
    For Each S In Sheets
        If S.Name = NomOffre Then NbFeuillesEtude = 1
        If Mid(S.Name, 1, Len(NomOffre)) = NomOffre Then
            I = I + 1
        End If
    Next
     
    If NbFeuillesEtude = 1 Then Sheets("ETUDE").Name = NomOffre & I
     
    End Sub
    Bien sûr, il faut que vous ayez toujours une feuille appelée ETUDE pour que cela fonctionne. Votre code ne permet pas de voir comment vous créez cette feuille ETUDE.

    Cordialement.

  3. #3
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Autre exemple permet d'ajouter une nouvelle feuille. Le nom aura ou nom un suffixe selon le cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Sub Test()
    Dim i As Integer
    Dim NomOffre As String, Suf As String
     
    NomOffre = "ETUDE"
    Do
        Suf = IIf(i = 0, "", CStr(i))
        If Not Existe(NomOffre & Suf) Then
            Worksheets.Add.Name = NomOffre & Suf
            Exit Do
        End If
        i = i + 1
    Loop
    End Sub
     
    Private Function Existe(ByVal Tmp As String) As Boolean
     
    On Error Resume Next
    Existe = Worksheets(Tmp).Index
    End Function

  4. #4
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut
    Bonjour.
    Citation Envoyé par phileurof Voir le message
    J'ai tourver dans les divers discussion des bouts de code pour verifiée qu'une feuille ne porte pas le même nom que celle que je veu créer et si il y a doublon il rajoute un chiffre derière, mais sa ne marche que pour une seule fois […] J'ai l'impression que c'est avec le i que sa bugue
    Parmi les solutions non encore évoquées il y a l'utilisation de l'objet dictionnaire mais je n'oserai pas ‼

    Le souci vient bien du i à cause d'une logique, heu … incomplète !
    C'est bien de l'incrémenter mais faut-il encore tester si le nom avec cet indice i n'existe pas déjà !

    Donc hormis l'utilisation de l'objet Dictionary, solution la plus véloce quand il y a beaucoup d'éléments
    mais p't'être too much ici, en dehors de l'utilisation d'une variable tableau regroupant les noms des feuilles,
    le plus simple à comprendre pour un débutant serait le stockage des noms dans une variable texte avec un séparateur
    puis si le nom existe déjà dans la variable, incrémenter au fur et à mesure jusqu'au nom indicé ne s'y trouvant pas
    pour enfin renommer la feuille …

    La procédure suivante a pour premier paramètre le nouveau nom de la feuille puis le second - optionnel - pointant sur
    la feuille elle-même. Si ce paramètre est manquant, la feuille active du classeur actif est donc renommée …
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Sub RenommeIndiceFeuille(NOM$, Optional Ws As Worksheet)
        If NOM = "" Or IsNumeric(Right(NOM, 1)) Then Beep: Exit Sub
        If Ws Is Nothing Then Set Ws = ActiveWorkbook.ActiveSheet
     
        With Ws.Parent.Worksheets
            ReDim TN(1 To .Count)
            For N& = 1 To .Count:  SN$ = SN$ & "¤" & .Item(N).Name & "¤":  Next
        End With
     
        Do
            NF$ = NOM & S:  N = InStr(SN, "¤" & NF & "¤"):  If N Then S = S + 1
        Loop While N
     
        Ws.Name = NF
    End Sub
     
     
    Sub Demo()
        RenommeIndiceFeuille "ETUDE"
    End Sub
    _______________ _____________________________________ _____________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjours,

    Il faut absolument vérifier si une feuille ou un graphique ne porteront pas le même nom. C'est important car c'est bien la collection Sheets qu'il faut prendre en compte. Une feuille et un graphique ne peuvent pas simultanément porter le même nom au sein du même Classeur.
    C'est pas si simple que ça on dirai bien alors.
    Le nom ne doit pas non plus excéder 31 caractères.
    Dernière modification par Invité ; 10/11/2013 à 12h00.

  6. #6
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    C'est pas faux ! A corriger en ligne n°5 dans mon exemple, pas gênant sinon sans graphique …

    Sinon j'utilise une fonction comme celle de Mercatog pour vérifier si une feuille existe comme dans cette discussion

    __________________________________________________________________________________________
    La connaissance, c'est comme la confiture, moins on en a plus on l'étale !

  7. #7
    Membre à l'essai
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mai 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 21
    Points : 16
    Points
    16
    Par défaut
    Merci de ces premier retour mais effectivement je n'est pas donné asser d'info.
    alors :
    Cette feuille "ETUDE" est en faite une matrice de devis.
    Le programme la rempli et à la fin l'utilisateur peut via un MSGBOX
    soit :
    1 )l'enregistré dans un nouveau classeur.
    2 ) l'enregistré dans un classeur appeler listes etudes (le code fonction en cas de doublon il incrémente d'un numéro chaque copie.
    3) en dernier l'enregistre dans le classeur appeler CALTREX(la où ce trouve la feuille ETUDE.


    J'ai bien essaye le code de Eric KERGRESSE

    cela fonction si une feuille porte déja le même nom que ma variable (nomoffre)
    si non j'ai une erreur
    voici la partie de code complète
    mes variable au complet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    Private Sub validedirect_Click()
    Dim s As Worksheet
    Dim NbFeuillesEtude As Long
     
    Dim I As Long
     
    'reference du reservoir
    Dim val1 As Double
    Dim QUESTION As Variant
    Dim ref As Variant
    Dim REFRESERVOIRE As String
    Dim calculfindeligne As Variant
    Dim TUBE As String
    'concerne l'imaje
    Dim IMAGE As Shape
    Dim chemin As String
    Dim Fichier As String
    Dim nomoffre As Variant
    Dim REPONSSE As Variant
    Dim tarifs As Double
    'declaration des variables
    Dim designation, Nclient, text, tempmax, suivi, objet, client, adre, adre1, adre2, cpe, ville1, cede, textekb As String
    Dim qtedesignation, longeur, largeur, hauteur, supouv, supmur, suptotal, volume, vai, vdeduit, vototal, _
    facteurkb, Q, QgazAo, qtereservoir, volumeloc, qtegazrete, reservoir, nbcompart, nbarmoire, tauxconcentr, tauxconcentrearmo As Double
    Dim dureeoffre As Date

    parti du code où l'on copie la feuille etude afin de la garder vierge

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Sheets("ETUDE").Select
     Sheets("ETUDE").Copy After:=Sheets(2)
        Sheets("ETUDE").Select
     
    Sheets("feuille de selection article").Select
    Range("c18").Select
    ActiveCell.FormulaR1C1 = CDbl(rangée)
    Range("c19").Select
    ActiveCell.FormulaR1C1 = CDbl(distancereservoir)
     
     
    nomoffre = Range("c46").Value
    Et là le code qui coince
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
     
    Select Case MsgBox( _
    "Cliquer sur OUI pour enregistrer votre étude dans un nouveau classeur." + vbCr + _
    "Cliquer sur ANNULER pour l'enregister dans caltrex" + vbCr + _
    "Cliquer sur NON pour enregister dans la listes des etudes" + vbCr + _
    "", vbYesNoCancel + vbInformation + vbDefaultButton1, _
    "enregistrement de l'etude")
     
     
     
    Case vbYes
     
     
      Windows("CALTREX.xls").Activate
     Sheets("ETUDE").Select
    '
     Sheets("ETUDE").Select
        Sheets("ETUDE").Name = nomoffre
     
     
    '
        Sheets("ETUDE (2)").Select
        Sheets("ETUDE (2)").Name = "ETUDE"
     
        Sheets(nomoffre).Move
       ActiveWorkbook.SaveAs Filename:=nomoffre, FileFormat _
            :=xlOpenXMLWorkbook, CreateBackup:=False
     
     
    Windows("CALTREX.xls").Activate
    Sheets("feuille de selection article").Select
    Range("C14:C55").Select
        Selection.ClearContents
    Sheets("feuille de selection article").Visible = False
     
     
    Case vbCancel
     Windows("CALTREX.xls").Activate
     Sheets("ETUDE").Select
    I = 0
    NbFeuillesEtude = 0
     
    For Each s In Sheets
        If s.Name = nomoffre Then NbFeuillesEtude = 1
     
     
     
        If Mid(s.Name, 1, Len(nomoffre)) = nomoffre Then
        I = I + 1
        ElseIf Mid(s.Name, 1, Len(nomoffre)) <> nomoffre Then
        Sheets("ETUDE").Name = nomoffre
           Exit For
        End If
    Next
     
    If NbFeuillesEtude = 1 Then Sheets("ETUDE").Name = nomoffre & I
     
     
     
        Sheets("ETUDE (2)").Select
        Sheets("ETUDE (2)").Name = "ETUDE"
     
    Windows("CALTREX.xls").Activate
    Sheets("feuille de selection article").Select
    Range("C14:C55").Select
        Selection.ClearContents
     
    Sheets("feuille de selection article").Visible = False
     
    Sheets("tarifs").Visible = False
     
        ActiveWorkbook.Save
        Case vbNo
        chemin = Application.GetOpenFilename() 
     Workbooks.Open Filename:= _
            chemin
     Windows("CALTREX.xls").Activate
     
     Sheets("ETUDE").Select
        Sheets("ETUDE").Name = nomoffre
     
     
                Sheets("ETUDE (2)").Select
        Sheets("ETUDE (2)").Name = "ETUDE"
        Sheets(nomoffre).Select
        Sheets(nomoffre).Move Before:=Workbooks("listes etudes.xls").Sheets(1)
     Windows("CALTREX.xls").Activate
     
     Sheets("feuille de selection article").Select
    Range("C14:C55").Select
        Selection.ClearContents
     
    Sheets("feuille de selection article").Visible = False
     
     
     
        Windows("listes etudes.xls").Activate
        ActiveWorkbook.Save
        ActiveWindow.Close
     
        End Select
    Marc-L pour le dico si vous en connaissez un bien je suis preneur

    Merci à tous de votre aide pas toujour facile quand on apprend par soi même

  8. #8
    Invité
    Invité(e)
    Par défaut
    Je viens de tester ta fonction, mais un beep surgis.

    P.S.: OK, c'est le IsNumeric qui fait quitter la procédure si le nom contient un chiffre à droite du nom.

  9. #9
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    Désolé je n'ai pas pensé qu'il s'agissait de mon code car pour le coup ce n'est pas une fonction mais une procédure !

    Effectivement la racine du nom de la nouvelle feuille ne doit pas se terminer par un chiffre afin d'éviter toute confusion.
    Mais en lui ajoutant un espace …


    @phileurof : sois précis sur l'erreur, la ligne la déclenchant, etc …

    Et de toute manière avec une logique corrigée comme dans les propositions en réponses, il n'y a plus de souci !

  10. #10
    Membre à l'essai
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mai 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 21
    Points : 16
    Points
    16
    Par défaut
    alors l'erreur surviens quand je n'est aucune feuille portant le nom du projet "nomprojet"
    ce qui donne
    feuille etude n'est pas renommer.
    Et la copie faite au debut ("etude"(2)) ne peut pas être renommer
    en feuille ETUDE
    ligne 19 (erreur 1004 impossible de renommer une feuille comme une autre feuille)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    For Each s In Sheets
        If s.Name = nomoffre Then NbFeuillesEtude = 1
     
     
     
        If Mid(s.Name, 1, Len(nomoffre)) = nomoffre Then
        I = I + 1
        ElseIf Mid(s.Name, 1, Len(nomoffre)) <> nomoffre Then
        Sheets("ETUDE").Name = nomoffre
           Exit For
        End If
    Next
     
    If NbFeuillesEtude = 1 Then Sheets("ETUDE").Name = nomoffre & I
     
     
     
        Sheets("ETUDE (2)").Select
    Sheets("ETUDE (2)").Name = "ETUDE"
    j'ai bien essaye de placer ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Sub RenommeIndiceFeuille(NOM$, Optional Ws As Worksheet)
        If NOM = "" Or IsNumeric(Right(NOM, 1)) Then Beep: Exit Sub
        If Ws Is Nothing Then Set Ws = ActiveWorkbook.ActiveSheet
     
        With Ws.Parent.Worksheets
            ReDim TN(1 To .Count)
            For N& = 1 To .Count:  SN$ = SN$ & "¤" & .Item(N).Name & "¤":  Next
        End With
     
        Do
            NF$ = NOM & S:  N = InStr(SN, "¤" & NF & "¤"):  If N Then S = S + 1
        Loop While N
     
        Ws.Name = NF
    End Sub
    mais j'ai du mal comprendre où le placer
    Merci de votre patience

  11. #11
    Membre à l'essai
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mai 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 21
    Points : 16
    Points
    16
    Par défaut
    bon je ne sais pas si c'est une bidouille que j'ai faite ou que c'est comme ça qu'il fallais faire mais resultat sa marche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    For Each s In Sheets
        If s.Name = nomoffre Then NbFeuillesEtude = 1
        If Mid(s.Name, 1, Len(nomoffre)) = nomoffre Then
            I = I + 1
        End If
    Next
     
    If NbFeuillesEtude = 1 Then Sheets("ETUDE").Name = nomoffre & I
     
     
     
    If FeuilleExiste(ThisWorkbook, "etude") Then
        Sheets("ETUDE").Select
        Sheets("ETUDE").Name = nomoffre
        Sheets("ETUDE (2)").Select
        Sheets("ETUDE (2)").Name = "ETUDE"
       Else
       Sheets("ETUDE (2)").Select
        Sheets("ETUDE (2)").Name = "ETUDE"
     
     
     
      End If
    Merci de votre aide et de vos pistes de recherche

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. XML plusieurs balise qui portent le même nom.
    Par jeyGey dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 18/01/2013, 20h43
  2. [MySQL] Stocker plusieurs variables qui portent le même nom
    Par Cyclone200 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 10/12/2012, 00h16
  3. [WD-2003] Enregistrer des documents qui porte le même nom
    Par FCL31 dans le forum VBA Word
    Réponses: 3
    Dernier message: 18/07/2009, 00h46
  4. Réponses: 3
    Dernier message: 04/03/2007, 19h00
  5. supprimer les fichiers qui ont des mêmes noms
    Par manaboko dans le forum Langage
    Réponses: 5
    Dernier message: 08/03/2006, 09h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo