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 :

Problème nommer les onglets [XL-2019]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Agent administratif
    Inscrit en
    Juin 2022
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Agent administratif
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2022
    Messages : 38
    Points : 26
    Points
    26
    Par défaut Problème nommer les onglets
    Bonjour,
    En cherchant sur le net, j'ai trouvé une macro qui me permet de copier des fichiers dans un classeur et les renomme d'une certaine manière (ex : nom du fichier Tata - 2022, nom de l'onglet Toto. une fois la copie faite il doit s'appeler Tata - 2022.xlsx(Toto)). Globalement elle fonctionne bien mais il y a parfois des loupés, elle ne garde que le nom de l'onglet. Pourriez-vous m'aider à la fiabiliser.
    Ah oui, je suis débutant dans le codage

    Voici le 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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    Sub Récup_Fichier()
    'Updated by Extendoffice 2019/2/20
    Dim xStrPath As String
    Dim xStrFName As String
    Dim xWS As Worksheet
    Dim xMWS As Worksheet
    Dim xTWB As Workbook
    Dim xStrAWBName As String
     
    On Error Resume Next
    xStrPath = "P:\FINANCE\COMPTA\xxx\"
    xStrFName = Dir(xStrPath & "*.xlsx")
     
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
     
    Set xTWB = ThisWorkbook
     
    Do While Len(xStrFName) > 0
     
        Workbooks.Open Filename:=xStrPath & xStrFName, ReadOnly:=True
        xStrAWBName = ActiveWorkbook.Name
     
        For Each xWS In ActiveWorkbook.Sheets
            xWS.Copy After:=xTWB.Sheets(xTWB.Sheets.Count)
            Set xMWS = xTWB.Sheets(xTWB.Sheets.Count)
            xMWS.Name = xStrAWBName & "(" & xMWS.Name & ")"
        Next xWS
     
        Workbooks(xStrAWBName).Close
        xStrFName = Dir()
     
    Loop
     
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
     
    Worksheets("Acompte_Solde").Select
     
    MsgBox "Traitement Terminé"
     
    End Sub
    Je vous remercie par avance pour votre aide.

  2. #2
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 420
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 420
    Points : 16 264
    Points
    16 264
    Par défaut
    Bonjour

    Les noms d'onglets sont limités à 31 caractères
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Agent administratif
    Inscrit en
    Juin 2022
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Agent administratif
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2022
    Messages : 38
    Points : 26
    Points
    26
    Par défaut
    Je n'atteins pas ce nombre, 25 caractères max.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2022
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2022
    Messages : 685
    Points : 1 156
    Points
    1 156
    Par défaut
    Bonjour

    peut-être des caractères interdits ?
    Enlève le
    ou mets avant l'instruction name un
    pour avoir le détail de ce qui plante

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Agent administratif
    Inscrit en
    Juin 2022
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Agent administratif
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2022
    Messages : 38
    Points : 26
    Points
    26
    Par défaut
    Je pense avoir identifié le souci.
    Je m'explique la macro ne fonctionne pas lorsque c'est un fichier unique (Avec un onglet Tata) que je diffuse.
    Il me le renvoie et je l'enregistre d'une certaine manière (Entite-annee.xlsx).
    La macro récupère bien le 1er fichier mais elle beugue ensuite.
    Pourriez-vous m'aider à contourner ce souci.
    Il n'y a aucun souci quand les fichiers sont issues d'un logociel.

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 118
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 118
    Points : 1 641
    Points
    1 641
    Par défaut
    Salut,

    Commence par retirer Application.ScreenUpdating = False ainsi que Application.DisplayAlerts = False, histoire de voir ce qui se passe
    Ces instructions, si besoin, c'est à la fin du développement, lorsque l'on a obtenu le comportement désiré.

    Ensuite, vire cet horrible On Error Resume Next.
    Les erreurs existent pour une raison, et doivent être traitées, les ignorer ne les fait pas disparaitre.

    Enfin, écrit un gestionnaire d'erreur qui a minima, te renvoie le message d'erreur.
    Ca nous permettra d'avancer, au lieu de jouer à cache-cache.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Récup_Fichier()
    On Error Goto Error
     
        '// code de la fonction
     
    Exit Sub
    Error:
            '// Affiche l'erreur dans la fenêtre d'execution
        Debug.Print "Erreur N°" & Err.Number & vbTab & Err.Description
    End Sub

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Agent administratif
    Inscrit en
    Juin 2022
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Agent administratif
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2022
    Messages : 38
    Points : 26
    Points
    26
    Par défaut
    Le message d'erreur est le suivant :
    Erreur d'exécution '1004' :
    Vous avez tapé un nom de feuille de graphique non valide. Vérifiez les points suivants :
    - Le nom ne dépasse pas 31 caractères => le nom n'a pas 31 caractères
    - Le nom ne contient aucun des caractères suivants : \/?*[ou] => Il ne contient aucun de ces caractères
    - Le champs du nom n'est pas vide => Le champs n'est pas vide

  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Personnellement, tant que le projet ne fonctionne pas parfaitement, je supprimerais le "On Error" car outre le numéro et le texte de l'erreur, il est important de savoir à quelle ligne l'erreur a lieu.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 118
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 118
    Points : 1 641
    Points
    1 641
    Par défaut
    @Philippe Tulliez:
    Je ne te donne pas tort.
    Cependant, tu conviendras qu'une première technique de débogage est mieux que pas de technique du tout.

    @Murasakibara:
    On avance.
    Maintenant, tu vas ajouter l'instruction Stop dans le gestionnaire d'erreur (il ne faudra pas oublier de l'enlever quand tu n'en auras plus besoin).
    Cette dernière causera un arrêt du programme lors du plantage.
    Tu pourras alors vérifier le contenu des variables.
    Soit via la fenêtre espions.
    Soit via la fenêtre d'exécution, en entrant par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ?xStrAWBName & "(" & xMWS.Name & ")"
    (n'oublie pas le point d'intérrogation en debut de ligne, c'est important).

  10. #10
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour Deedolith,
    Cependant, tu conviendras qu'une première technique de débogage est mieux que pas de technique du tout.
    Nous sommes bien d'accord mais comme dans cette procédure, il y a plusieurs lignes d'instructions qui peuvent générer l'erreur 1004, je me dis qu'il serait plus sage de geler le "On error" pour y voir clair.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Agent administratif
    Inscrit en
    Juin 2022
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Agent administratif
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2022
    Messages : 38
    Points : 26
    Points
    26
    Par défaut
    Bonjour à tous,
    J'ai trouvé l'anomalie. Il s'agissait d'une feuille masquée qui posait problème.
    Je vous remercie pour votre aide et surtout grâce à vos questions j'appréhende de mieux en mieux le VBA.

  12. #12
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2022
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2022
    Messages : 685
    Points : 1 156
    Points
    1 156
    Par défaut
    Bonjour,

    => le nom n'a pas 31 caractères
    => Il ne contient aucun de ces caractères
    => Le champs n'est pas vide
    Ou alors le nom de l'onglet n'est pas ce que tu penses...

    Au passage ça serait bien de remplacer l'utilisation de activeworkbook par un objet. Je ne dis pas que ça présente un risque ici (encore qu'il faut bien que l'erreur vienne de qq part) mais c'est quand même une source de problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Set xAWS = Workbooks.Open (Filename:=xStrPath & xStrFName, ReadOnly:=True)
     
        For Each xWS In xAWS.Sheets
            xWS.Copy After:=xTWB.Sheets(xTWB.Sheets.Count)
            Set xMWS = xTWB.Sheets(xTWB.Sheets.Count)
            xMWS.Name = xAWS.Name & "(" & xMWS.Name & ")"
        Next xWS
     
        xAWS.Close
    xAWS ayant préalablement été déclaré comme Workbook

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Agent administratif
    Inscrit en
    Juin 2022
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Agent administratif
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2022
    Messages : 38
    Points : 26
    Points
    26
    Par défaut
    Merci pour ton conseil Tête de chat.

  14. #14
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Salut.

    Perso, je mets les "On Error" dès le début de ma programmation et je ne les gèle pas par des mises en commentaires.

    Il existe une option dans le VBE qui indique au code de s'arrêter sur chaque erreur, qu'elle soit gérée ou non.

    Donc, on met les On Error dès le début et en DEV, on utilise la bonne option au niveau du VBE

    Nom : 2024-03-15_001551.png
Affichages : 42
Taille : 9,3 Ko

    Pour une utilisation en PROD, on met simplement un mot de passe sur le projet VBA. Ainsi, même avec "Arrêt sur toutes les erreurs", on évite que l'utilisateur entre en débogage.

    Evidemment, ça nécessite de placer une gestion d'erreur "On Error" dans toute procédure évènementielle.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

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

Discussions similaires

  1. Comment nommer les versions d'une application
    Par Bweb dans le forum Langages de programmation
    Réponses: 10
    Dernier message: 15/02/2013, 15h07
  2. Réponses: 5
    Dernier message: 10/11/2010, 16h00
  3. Les onglets dans Visual Basic
    Par kilhom dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 22/10/2005, 19h33
  4. Cacher les onglets d'un TPageControl
    Par Patrick Seuret dans le forum C++Builder
    Réponses: 5
    Dernier message: 21/10/2005, 16h05
  5. norme pour nommer les objets d'une bd
    Par katou3 dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 13/07/2005, 12h30

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