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 :

Ajout d'un champ avec le nom du dossier et la suppression des feuilles [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Femme Profil pro
    Consultant MOA
    Inscrit en
    Août 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2014
    Messages : 10
    Points : 4
    Points
    4
    Par défaut Ajout d'un champ avec le nom du dossier et la suppression des feuilles
    Bonjour à tous,

    Je fais l'extraction de pièces jointes (ensemble de fichiers excel) à partir de fichiers ".msg" et je voudrais savoir s'il y'a un moyen de parcourir ces fichiers excel (212 fichiers) et d'ajouter un champ dans la première feuille à la fin de chaque ligne non vide et dans lequel on retrouve le nom du fichier.

    J'ai essayé sur un seul fichier ça a marché ! mais le soucis que j'arrive pas à le faire avec une liste de fichiers

    et au même temps je veux récupérer juste la première feuille de chaque classeur donc j'essaye de supprimer les autres feuilles mais ça me renvoie un message d'erreur "L'indice n'appartient pas à la sélection!"

    Pourriez vous m'orienter svp ?


    J'utilise le code suivant qu'on m'a passé dans ce forum avec de petites commandes que j'ai ajouté :


    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
     
    Sub SaveMSG()
        Dim objOL As Object
        Dim objItem As Object
        Dim Attach As Object, NomFichier As String
        Dim CheminMSG As String, CheminDest As String
        Dim Fichier As Variant
     
        CheminMSG = "Mon répertoire"
        If Right(CheminMSG, 1) <> "\" Then CheminMSG = CheminMSG & "\"
        CheminDest = "Ma destination"
        If Right(CheminDest, 1) <> "\" Then CheminDest = CheminDest & "\"
     
        Set objOL = CreateObject("Outlook.Application")
     
        Fichier = Dir(CheminMSG, vbArchive)
        Do While LCase(Right(Fichier, 3)) = "msg" 'vérifie que ce sont bien des .MSG
            Set objItem = objOL.CreateItemFromTemplate(CheminMSG & Fichier)
            For Each Attach In objItem.Attachments 'lecture de tous les fichiers joints
                NomFichier = Attach.Filename
                'Copie les fichiers Excel seulement
                If InStr(1, NomFichier, ".xls") > 0 Then Attach.SaveAsFile CheminDest & NomFichier
                Sheets(1).Range("N1").Value = ActiveWorkbook.Name
                Sheets(2).Delete
                Sheets(3).Delete
            Next
     
            Fichier = Dir
        Loop
     
        Set objItem = Nothing
        Set objOL = Nothing
    End Sub
    Merci d'avance !

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Points : 5 901
    Points
    5 901
    Par défaut
    If InStr(1, NomFichier, ".xls") > 0 Then Attach.SaveAsFile CheminDest & NomFichier
    Sheets(1).Range("N1").Value = ActiveWorkbook.Name
    Sheets(2).Delete
    Sheets(3).Delete
    Ici, tu sauvegardes le fichier, mais il n'est pas ouvert, donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
                If InStr(1, NomFichier, ".xls") > 0 Then Attach.SaveAsFile CheminDest & NomFichier
                Workbooks.Open CheminDest & NomFichier
                activeworkbook.Sheets(1).Range("N1").Value = ActiveWorkbook.Name
                activeworkbook.Sheets(2).Delete
                activeworkbook.Sheets(3).Delete
                activeworkbook.Close True  'Ferme et sauvegarde

  3. #3
    Candidat au Club
    Femme Profil pro
    Consultant MOA
    Inscrit en
    Août 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2014
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Le code s'arrête juste avant la boucle.
    Normal puisque mon fichier excel est en mode protégé, donc j'ai ajouter les lignes de code suivante :

    ActiveWorkbook.Unprotect
    ActiveWorkbook.Protect

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    If InStr(1, NomFichier, ".xls") > 0 Then Attach.SaveAsFile CheminDest & NomFichier
                Workbooks.Open CheminDest & NomFichier
                ActiveWorkbook.Unprotect
                activeworkbook.Sheets(1).Range("N1").Value = ActiveWorkbook.Name
                activeworkbook.Sheets(2).Delete
                activeworkbook.Sheets(3).Delete
                 ActiveWorkbook.Protect
                activeworkbook.Close True  'Ferme et sauvegarde


    Quand j’exécute mon programme pas à pas, la compilation s'arrête juste après "activeworkbook.Sheets(2).Delete" et m'affiche comme erreur "Erreur d'éxecution '9'".

  4. #4
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Points : 10 166
    Points
    10 166
    Billets dans le blog
    36
    Par défaut
    Citation Envoyé par h_faty Voir le message
    Le code s'arrête juste avant la boucle.

    Quand j’exécute mon programme pas à pas, la compilation s'arrête juste après "activeworkbook.Sheets(2).Delete" et m'affiche comme erreur "Erreur d'éxecution '9'".
    Donc, VBA a découvert que l'ActiveWorkbook du moment n'a pas de 2e feuille à effacer. En d'autres mot, soit qu'il n'y a aucun classeur actif; ce qui serait bizarre en soit, ou que le classeur actif n'a qu'une seule feuille.

  5. #5
    Candidat au Club
    Femme Profil pro
    Consultant MOA
    Inscrit en
    Août 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2014
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    C'est vraiment bizzard parce que dans chaque fichier excel j'ai bien 3 feuilles avec un nommage différent !

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Points : 5 901
    Points
    5 901
    Par défaut
    Comme tu utilises un Index pour supprimer, lorsque tu supprimes l'onglet (2), le (3) devient le (2), je pense...
    Il te faudrait alors supprimer le (3) avant le (2)

  7. #7
    Membre expérimenté
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Points : 1 499
    Points
    1 499
    Par défaut
    bonjour,

    je suis d'accord avec Parmi.

    pour court-circuiter on peut faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Application.DisplayAlerts = False
    Sheets(Array("Feuil2", "Feuil3")).Delete
    Application.DisplayAlerts = True
    re....,

    j'ajoute qu'en dehors de "displayalerts" bien nécessaire, il ne serait peut-être pas inutile de tester l’existence desdits feuilles. Mais je ne connais pas ou ne me souviens plus de l'instruction adéquate.

    cordialement,

  8. #8
    Candidat au Club
    Femme Profil pro
    Consultant MOA
    Inscrit en
    Août 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2014
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Bonjour à tous,

    Merci pour vos propositions ! j'ai essayé la proposition de parmi d'inverser les "Delete" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    activeworkbook.Sheets(1).Range("N1").Value = ActiveWorkbook.Name
    activeworkbook.Sheets(3).Delete
    activeworkbook.Sheets(2).Delete
    Et super ça a marché !

    La il me reste juste de voir ma colonne "N" parce que mon code me renvoi le nom du fichier dans toutes la colonne alors que je veux que le nom s'affiche juste à la fin de chaque ligne non vide


    Bonne journée !

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

Discussions similaires

  1. [IP-2003] Intialiser un champ avec le nom d'utilisateur Windows
    Par Romeoo dans le forum InfoPath
    Réponses: 2
    Dernier message: 10/11/2009, 10h23
  2. [AC-2003] Acess Req Ajout sur 3 champs avec conditions
    Par cbienmoi dans le forum IHM
    Réponses: 1
    Dernier message: 01/09/2009, 21h29
  3. remplir un champ avec le nom d'accès sqlserver
    Par stephano dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 04/09/2007, 10h38
  4. Réponses: 1
    Dernier message: 31/05/2006, 18h59
  5. ASP champs avec même nom
    Par pete007 dans le forum ASP
    Réponses: 8
    Dernier message: 03/05/2004, 23h58

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