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 la macro a toutes les feuilles du classeur [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Femme Profil pro
    Intervenante informatique
    Inscrit en
    Mai 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Intervenante informatique

    Informations forums :
    Inscription : Mai 2014
    Messages : 13
    Points : 10
    Points
    10
    Par défaut Appliquer la macro a toutes les feuilles du classeur
    Bonjour,

    J'ai un classeur composé de plusieurs feuilles. Je veux que certaines données de chaque feuille ayant 2014 dans le nom soit copié dans la feuille synthèse. Voici les problèmes que je rencontre :

    - je n'arrive pas à trouver une macro sélectionnant que les onglets ayant 2014 dans le nom. J'ai biaisé en lui demandant d'appliquer la macro pour toutes les feuilles n'ayant pas le nom synthèse. Y-a-t-il moyen de faire autrement ???
    - je suis obligée de me mettre sur chaque onglet et d'exécuter la macro. Comment faire pour que la macro s'éxécute pour tous les onglets du classeur ?
    - une fois qu'il a copié les données dans la feuille Synthèse, il réapplique la macro en copiant les données de la feuille synthèse.
    -comment fait-on pour sélectionner une partie d'un tableau variable d'une feuille à l'autre et pouvant contenir des cellules vides ?

    Voici la macro que j'ai cré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
    21
    22
    23
    24
    25
    26
    27
    sub test()
     
    'déclaration de la variable feuille en tant que feuille
    Dim Feuille As Worksheet
     
     'pour chaque élément (chaque onglet) Feuille de la collection feuilles du classeur
     For Each Feuille In Worksheets
     
     'si le nom de la feuille différent de synthèse alors
        If Feuille.Name <> "Synthèse" Then
     
        'sélectionne le tableau à partir de la cellule b3
      Range(Range("b3").End(xlDown), Range("b3").End(xlToRight)).Copy
     
      'sélectionne la feuille synthèse et se postionne dans la dernière ligne du tableau
     Worksheets("Synthèse").Activate
        Range("A1048576").End(xlUp).Select
     
     'Décalage de la ligne
        ActiveCell.Offset(1, 0).Select
     
        'colle les données
        ActiveSheet.Paste
     
    End If
    Next Feuille
    End Sub
    Merci par avance de votre aide

  2. #2
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    Bonjour lilou4980,

    Tout d'abord pour parcourir tous tes onglets et vérifier leur nom, voici quelque chose rapide que je te propose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    For Each Wksht In Worksheets
        If Wksht.Name Like "*2014*" Then
            With Wksht
                'ce que tu veux faire...
                MsgBox Wksht.Name
            End With
        End If
    Next Wksht
    Ensuite, je ne comprends pas bien ce que tu souhaites copier/coller dans ton onglet Synthèse. Peux-tu m'en dire d'avantage ?

    Cordialement,
    Kimy

  3. #3
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour,

    sans savoir ce que tu veux copier réellement, essayes ce code adapté de ce que tu as écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub test()
    Dim Feuille As Worksheet
     
    For Each Feuille In Worksheets
      With Feuille
        If .Name <> "Synthèse" Then
          .Range(.Range("b3").End(xlDown), .Range("b3").End(xlToRight)).Copy Sheets("Synthèse").Range("A" & Sheets("Synthèse").Rows.Count).End(xlUp)(2, 1)
        End If
      End With
    Next Feuille
    End Sub
    Vérifies bien cette partie car, perso, je ne sais pas ce que tu copies exactement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ...
     .Range(.Range("b3").End(xlDown), .Range("b3").End(xlToRight)).Copy...

  4. #4
    Membre à l'essai
    Femme Profil pro
    Intervenante informatique
    Inscrit en
    Mai 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Intervenante informatique

    Informations forums :
    Inscription : Mai 2014
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    Merci d'avoir répondu aussi rapidement.

    Pour la copie je veux qu'il me copie les données du tableau :
    - pour les colonnes de B à G
    - pour les lignes de la ligne 2 jusqu'en bas de mon tableau. Pour le nombre de les lignes, elles sont variables d'une feuille à l'autre.

    J'ai essayé la macro proposée par Kimy voici le message d'erreur que j'ai :
    "excel ne peut pas terminer cette tâche avec les ressources disponibles..." puis dans la macro "la méthode paste a échoué..."

    merci

  5. #5
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    lilou4980,

    N'ayant pas trop compris la destination, je te propose ceci dans un premier temps.
    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
    Sub parcourir()
    Dim Rng_ori As Range
    Dim Rng_des As Range
     
    For Each Wksht In Worksheets
        If Wksht.Name Like "*2014*" Then
            With Wksht
                Set Rng_ori = .Range("B1")
                Set Rng_des = Worksheets("Synthèse").Rows(1).Find("*", , , , , xlPrevious).Offset(0, 1)
                For j = 0 To 5
                    For i = 1 To .Columns(2).Find("*", , , , , xlPrevious).Row
                        Rng_des.Offset(i - 1, j) = Rng_ori.Offset(i, j)
                    Next i
                Next j
            End With
        End If
    Next Wksht
     
    End Sub
    Cordialement,
    Kimy

  6. #6
    Membre à l'essai
    Femme Profil pro
    Intervenante informatique
    Inscrit en
    Mai 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Intervenante informatique

    Informations forums :
    Inscription : Mai 2014
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    Peux-tu me commenter la macro car étant débutante en vba je ne la comprends pas ?
    Je te joins mon document afin que ça soit plus clair (je n'ai pas pu envoyer le fichier excel message d'erreur du coup j'ai fait des captures).
    Je veux que dans mon onglet synthèse qu'il ait les données du tableau à partir de la colonne B jusqu'à la H de chaque onglet "xxx 2014". Bien entendu, il faudra que le tableau se complète au fur et à mesure de la création de nouveaux onglets.

    Merci
    Images attachées Images attachées    

  7. #7
    Membre à l'essai
    Femme Profil pro
    Intervenante informatique
    Inscrit en
    Mai 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Intervenante informatique

    Informations forums :
    Inscription : Mai 2014
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    Bonjour

    Ma macro fonctionne . La voici ça pourra aider d'autres personnes

    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
    Private Sub CommandButton1_Click()
     
    Call Ajout_données_dans_synthèse
    End Sub
    Sub Ajout_données_dans_synthèse()
        Dim Feuille As Worksheet
        Dim i As Integer
        'Pour remplace la boucle for each on compte le nombre d'onglet et on vérifie la difference a chaque boucle
        For i = 1 To Worksheets.Count
        'On vérifie que le nom de l'onglet possede au moins une occurence de "2014"
        If InStr(Worksheets(i).Name, "2014") > 0 Then
            'Si Oui on active la page
                 Worksheets(i).Activate
        'On vérifie que la colonne date visite n'éxiste pas si il existe on passe a la page suivante
        If Range("b1") <> "DATE VISITE" Then
        'Insére une colonne B en B1 mettre date visite
                 Columns(2).Insert
                 Range("b1").FormulaR1C1 = "DATE VISITE"
                 'Sélectionne cellule b3 et colle la formule pour que le nom de l'onglet apparaisse
                 'puis copie dans toute la colonne b du tableau
                     Range("b3").Select
                     ActiveCell.FormulaR1C1 = _
            "=MID(CELL(""nomfichier"",R1C1),FIND(""]"",CELL(""nomfichier"",R1C1))+1,32)"
                'On supprime le contenu de la cellule pour l'esthétisme du tableau ^^
                    Range("b2").ClearContents
                'sélectionne le tableau à partir de la cellule b3
                Range(Range("b3").End(xlDown), Range("b3").End(xlToRight)).Copy
                'sélectionne la feuille synthèse et se postionne dans la dernière ligne du tableau
                Worksheets("Synthèse").Activate
                Range("A1048576").End(xlUp).Select
                'Décalage de la ligne
                ActiveCell.Offset(1, 0).Select
                'colle les données en faisant collage des valeurs et du format
     
                With Selection
                    .PasteSpecial Paste:=xlPasteValues
                    .PasteSpecial Paste:=xlPasteFormats
                End With
        End If
        End If
     
    Next i
    End Sub
    Bon we

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

Discussions similaires

  1. Macro excel pour toutes les feuilles du classeur
    Par duffie34 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 28/03/2013, 12h55
  2. afficher la premiere colonne de toutes les feuilles du classeur
    Par abj8077 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 14/01/2011, 14h08
  3. Réponses: 1
    Dernier message: 14/06/2009, 13h45
  4. application a toute les feuilles du classeur
    Par dodo28 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/04/2009, 14h04
  5. Mise en page avant impression sur toutes les feuilles du classeur
    Par fribelle dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 12/11/2008, 09h48

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