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 :

Appliquer une macro pour plusieurs fichiers sélectionnés


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Etudiant ingénieur industriel
    Inscrit en
    Juillet 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Etudiant ingénieur industriel
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2015
    Messages : 2
    Par défaut Appliquer une macro pour plusieurs fichiers sélectionnés
    Bonjour

    J'ai un projet au boulot me demandant d'extraire certaines données de plusieurs fichiers et de les copier sur un fichier récap (afin de les utiliser pour la construction de cartes de contrôle).
    J'ai réussi à faire la macro me permettant d'extraire les données d'un fichier mais la manipulation pour chaque fichier reste très longue, car très répétitive..

    Je ne suis pas expert en macro (loin de là ) et je demande donc votre aide pour m'aider à compléter ma macro

    Voici le code que j'utilise pour l'extraction des données :

    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
     
    Sub mef()
     
    Application.DisplayAlerts = False
        ActiveSheet.Select
        ActiveSheet.Name = "Data"
        Range("C30").Select
        Sheets.Add
        Sheets("Feuil1").Select
        Sheets("Feuil1").Name = "Target"
        Range("C30").Select
        Sheets("Data").Select
        Columns("A:A").Select
        Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
            Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _
            :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _
            Array(7, 1), Array(8, 1), Array(9, 1)), TrailingMinusNumbers:=True
        Range("E1:G3").Select
            Selection.Copy
        Sheets("Target").Select
        Range("A1").Select
        ActiveSheet.Paste
        Sheets("Data").Select
        Range("C6:E6").Select
        Range(Selection, Selection.End(xlDown)).Select
        Application.CutCopyMode = False
        Selection.Copy
        Sheets("Target").Select
        Range("A4").Select
        ActiveSheet.Paste
        ActiveWindow.SmallScroll Down:=0
        Sheets("Target").Select
        ActiveSheet.Range("A65536").End(xlUp).Delete
        ActiveSheet.Range("A65536").End(xlUp).Delete
        ActiveSheet.Range("A65536").End(xlUp).Delete
     
            Range("A1:C1").Select
        Range(Selection, Selection.End(xlDown)).Select
        Selection.Copy
     
    ActiveWorkbook.Close SaveChanges:=False
    Application.DisplayAlerts = True
        End Sub

    Pour rentrer plus dans le détail, les données qui m'intéresse (après utilisation de mon code) se retrouvent sur 3 colonnes et un nombre variable de lignes. L'idéal pour moi serait que chaque groupe de 3 colonnes (extraits de chaque fichier du dossier) se place les uns à coté des autres (avec un offset de 3 donc j'imagine.. ).

    J'ai ajouté ci-joint le fichier "bot_..." qui est le type de fichier d'où seront tirées les données. Et le fichier "Mise en forme" qui est le fichier où les données seront copiées (dans la partie colorée).

    J'espère avoir été clair..

    Merci d'avance pour votre aide et pour le temps que vous prendrez pour cela


    Anis
    Fichiers attachés Fichiers attachés

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur Industrialisation
    Inscrit en
    Mai 2015
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Industrialisation
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2015
    Messages : 222
    Par défaut
    Salut à toi,

    Je n'ai pas vraiment le temps de regarder ton code et les fichiers, mais je peux te donner quelques petits conseils, même si je pense que bientôt des solutions toute faites arriveront ici

    Pour commencer, intéresse-toi aux variables objet (feuille, classeur, plage de cellules...)
    Pour les utiliser, c'est très simple, tu les déclares (recommandé) et tu les assignes :
    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
    'Tu déclares (choix libre des noms, moi j'ai choisi wb, ws et rng mais tu peux les appeler Pierre, Paul, Jacques ;)) :
    Dim wb As Workbook 'wb sera donc un classeur Excel 
    Dim ws As Worksheet 'ws sera donc une Feuille Excel
    Dim rng As Range ' rng sera donc une plage de cellules Excel (voire une cellule unique si tu le souhaites)
     
    'Tu assignes :
    Set wb = Workbooks.Open ([Lien vers ton classeur], [+ arguments si tu le souhaites]) 'cela va ouvrir le classeur désigné et pour la macro, son nom sera wb
    'ou encore
    Set wb = Workbooks.Add 'cela va donc ouvrir un nouveau classeur et, pour la macro uniquement, son nom sera wb
     
    Set ws = ThisWorkbook.Sheets("Data") 'ws sera la feuille "Data" de ton classeur actif.
    'ou encore
    Set ws = wb.Sheets.Add (After:wb.Sheets(wb.Sheets.Count)) 'ws sera donc une nouvelle feuille ajoutée après la dernière dans le classeur wb
     
    Set rng = ws.Range("A1:B4")
    'ou encore
    Set rng = wb.Sheets(1).Range("B8").End(xlDown).Offset(12,4)'...
     
    Ensuite, pour les utiliser, tu fais juste, par exemple :
     
    wb.Save
    ws.Name = "Test"
    rng.Interior.Color = vbRed
    rng.Offset(1).Value = 456
    rng.Copy Destination:wb.Sheets(2).Range("B5")
    If rng.value > 5 Then ws.range("B2").Interior.Pattern = xlLightUp
    Etc.

    De plus, oublie tout ce qui est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    blabla.Select
    Selection.Copy...
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Sheets(2).Activate
    ActiveSheet.Range...
    Cela est très compliqué à relire, ralentit énormément l'exécution du code et est extrêmement sujet aux erreurs. En plus, ça fait bouger la vue d'Excel de tous les côtés, d'une page à l'autre, et c'est très désagréable.

    Préfère plutôt faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Range("A1").Select
    Selection.Copy
    Range("B2").Select
    ActiveSheet.Paste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A1").Copy Destination:=Range("B2")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Sheets(1).Select
    ActiveSheet.Name = "Data"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets(1).Name = "Data"
    Je sais que je ne réponds pas à ton problème, mais si tu réécris ton code ainsi, tu verras la chose bien moins compliquée qu'elle ne l'est

    J'essaie de revenir vers toi au plus tôt.

  3. #3
    Candidat au Club
    Homme Profil pro
    Etudiant ingénieur industriel
    Inscrit en
    Juillet 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Etudiant ingénieur industriel
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2015
    Messages : 2
    Par défaut Merci
    Merci Quentin!

    Même si cela ne répond pas à mon besoin, je vais faire ces modifs pour simplifier un peu la lecture de ma macro

Discussions similaires

  1. Réponses: 6
    Dernier message: 02/08/2017, 17h55
  2. Réponses: 1
    Dernier message: 11/02/2011, 15h14
  3. [XL-2003] Créer une macro pour plusieurs fichiers excel
    Par bocki dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/06/2009, 23h53
  4. Réponses: 1
    Dernier message: 27/11/2008, 12h41
  5. [VBA-E] Comment appliquer une macro sur plusieurs cellules
    Par jeanpierreco dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 25/01/2007, 11h54

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