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 :

Créer une boucle pour copie des tableaux de plusieurs feuilles sur une seule [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre chevronné Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Points : 2 003
    Points
    2 003
    Par défaut Créer une boucle pour copie des tableaux de plusieurs feuilles sur une seule
    Bonjour à tous, voilà mon souci.
    il y a des choses que je n'ai pas encore saisie concernant les boucles et ce que j'aimerais faire c'est copié le tableaux de chaque feuille dans une seule feuille j'ai fait un code qui fonctionne tres bien, mais je me demandais si en faiisant une boucle avec for each par exemple ce serai mieux. je demande qu'a apprendre; merci d'avance de votre aide
    voici mon 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
     
    Sub Compilerdonnées()
    '
    ' Compiler les tableaux
    ' de chaque mois sur une feuille
    '
    Dim Bd As Worksheet
    Set Bd = Worksheets("Bd")
     
    'enlève le clignotement de l'écran
    Application.ScreenUpdating = False
     
    Sheets("SEPT").[SEPT].Copy Bd.[B4]
    Sheets("OCT").[OCT].Copy Bd.[B4].End(xlDown).Offset(1, 0)
    Sheets("NOV").[NOV].Copy Bd.[B4].End(xlDown).Offset(1, 0)
    Sheets("DEC").[DEC].Copy Bd.[B4].End(xlDown).Offset(1, 0)
    Sheets("JANV").[JANV].Copy Bd.[B4].End(xlDown).Offset(1, 0)
    Sheets("FEV").[FEV].Copy Bd.[B4].End(xlDown).Offset(1, 0)
    Sheets("MARS").[MARS].Copy Bd.[B4].End(xlDown).Offset(1, 0)
    Sheets("AVRIL").[AVRIL].Copy Bd.[B4].End(xlDown).Offset(1, 0)
    Sheets("MAI").[MAI].Copy Bd.[B4].End(xlDown).Offset(1, 0)
    Sheets("JUIN").[JUIN].Copy Bd.[B4].End(xlDown).Offset(1, 0)
    Sheets("JUILLET").[JUILLET].Copy Bd.[B4].End(xlDown).Offset(1, 0)
    Sheets("AOUT").[AOUT].Copy Bd.[B4].End(xlDown).Offset(1, 0)
     
    [B4].Select
    Application.ScreenUpdating = True
     
     
    End Sub

  2. #2
    Membre chevronné Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Points : 2 003
    Points
    2 003
    Par défaut essai de nouveaux code
    voila donc j'ai travaillé sur mon code mais je crois que je me suis compliqué la vie de plus j'ai une erreur lorsque j'appelle ma variable M. Qu'en pensez-vous, merci.

    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
     
    Sub Compilerdonnées1()
    Dim Bd As Worksheet, M1 As Object, M2 As Object, M3 As Object, M4 As Object, M5 As Object, M6 As Object, M7 As Object, M8 As Object, M9 As Object, M10 As Object, M11 As Object, M12 As Object
    Dim SourceOnglet As Variant
    Dim x As Integer, y As Integer
    Set Bd = Worksheets("Bd")
    Set M1 = Worksheets("SEPT").[SEPT]
    Set M2 = Sheets("OCT").[OCT]
    Set M3 = Sheets("NOV").[NOV]
    Set M4 = Sheets("DEC").[DEC]
    Set M5 = Sheets("JANV").[JANV]
    Set M6 = Sheets("FEV").[FEV]
    Set M7 = Sheets("MARS").[MARS]
    Set M8 = Sheets("AVRIL").[AVRIL]
    Set M9 = Sheets("MAI").[MAI]
    Set M10 = Sheets("JUIN").[JUIN]
    Set M11 = Sheets("JUILLET").[JUILLET]
    Set M12 = Sheets("AOUT").[AOUT]
    x = 1
     
     For Each SourceOnglet In Array("SEPT", "OCT", "NOV", "DEC", "JANV", "FEV", "MARS", "AVRIL", "MAI", "JUIN", "JUILLET", "AOUT")
        With ThisWorkbook.Worksheets(CStr(SourceOnglet))
            For y = 1 To 12
           'erreur ici lorsque j'aimerais appellé la première variable, puis les autres
            M & "x".Copy Bd.[B4].End(xlDown).Offset(1, 0)
            x = x + 1
            Next y
        End With
    Next
     
    End Sub

  3. #3
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Bonjour,

    Pourquoi ne pas faire une boucle sur les onglets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim DerLig As Long
    Dim ws As Worksheet
    Const Principal As String = "Bd"
     
    DerLig = Worksheets(Principal).Range("A65536").End(xlUp).Row 'si besoin
     
    For Each ws In Worksheets
    With ws
    If .Name <> Principal Then
    ' ici le code 
    End If
    End With

  4. #4
    Membre chevronné Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Points : 2 003
    Points
    2 003
    Par défaut
    Bonjour Aalex,
    en fait j'ai plusieurs autres feuilles dans mon classeur et les tableaux que j'aimerais copier ce trouve sur 12 feuilles représentant chacune un mois de l'année. Chaque feuille contient un tableau qui est nommé, par exemple: La feuille "SEPT" contient le tableau nommé "SEPT" et ainsi qe suite jusqu'à Aout.

    en tout cas merci pour ton code et de t'intéresser à ma demande.

    Mon deuxième code est trop compliqué je vais en travaillé un autre.

  5. #5
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    un tableau qui est nommé
    Tu parles d'une plage de cellulle, nommées ?

    Pour parcourir des plages nommées, un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Dim MesNoms As Name
    For Each MesNoms In ThisWorkbook.Names
    With MesNoms
        MsgBox "Name " & .Name & vbCr & "Value " & .Value & vbCr & " RefersTo " & .RefersTo & " Adresse " & .RefersToRange.Address
    End With
    Next

  6. #6
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Bonjour,

    Si j'ai bien compris tu mets toutes les données a la suite dans la feuille bd

    Ce code est testé, il te reste a l'adapter a ton fichier
    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
    Dim sh As Worksheet
    Dim i As Long
     
    i = 1
     
    For Each sh In ThisWorkbook.Worksheets
     
        If sh.Name <> "bd" Then
     
            sh.Select
            sh.Range(sh.Name).Copy Sheets("bd").Range("B" & i)
            i = Sheets("bd").Range("B:B").End(xlDown).Row
     
     
        End If
     
    Next

  7. #7
    Membre chevronné Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Points : 2 003
    Points
    2 003
    Par défaut
    Jfontaine bjr,
    Dsl de ne répondre que maintenant mais j'étais en déplacement. Merci pour ta réponse, merci aussi à Aalex.
    Effectivement je copie les données à la suite dans la feuille "Bd" à partir de la cellule B4.

    J'ai donc modifié ton code en mettant i = 4.
    Seulement à l'éxécution j'ai un code d'erreur.
    "Erreur d'éxécution 1004: La méthode range de l'objet worksheet a échoué".

    Dans le code j'indique ou se situe l'erreur:
    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
     
    Dim sh As Worksheet
    Dim i As Long
     
    i = 4
     
    For Each sh In ThisWorkbook.Worksheets
     
        If sh.Name <> "Bd" Then
     
            sh.Select
            ' l'Erreur ce trouve sur la ligne en dessous
            sh.Range(sh.Name).Copy Sheets ("Bd").Range("B" & i)
            i = Sheets ("Bd").Range("B:B").End(xlDown).Row
     
     
        End If
     
    Next
    Je vais chercher pour quoi cette Erreur, Merci de votre aide, grace à vous je commence à comprendre l'utilisation des ces codes.

  8. #8
    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
    J'ai testé ceci, ça fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim sh As Worksheet
    Dim i As Long
    i = 4
    For Each sh In ThisWorkbook.Worksheets
        If sh.Name <> "Bd" Then
            sh.Range(sh.Name).Copy Sheets("Bd").Range("B" & i)
            i = Sheets("Bd").Range("B65536").End(xlUp).Row + 1
        End If
    Next sh
    A moins que:
    Il existe une feuille X ne comportant aucune plage de donnée nommée X.
    Re vérifie les noms de tes feuilles et la plage nommé de chaque feuille.
    Vous voyez le danger de travailler avec des plages nommées, un accent, espace ou parfois majuscule donne des erreurs

  9. #9
    Membre chevronné Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Points : 2 003
    Points
    2 003
    Par défaut
    Slt Mercatog,
    Ta macro fonctionne à merveille merci.
    Toutefois, si j'ai compris , la macro passe en revu toute les feuilles du classeur!

    Ceci génère toujours le la même erreur mais cette fois sur d'autres feuilles du classeur qui évidemment n'ont pas de tableau ou plages nommée, comme tu me l'as indiqué.

    Pour ne plus avoir cette erreur, , il faudrait en réalité que je copie uniquement les 12 premières feuilles du classeur ( de SEPT, OCT, NOV etc.. jusqu'à AOUT soit 12 Feuilles) dans la feuille "Bd" qui est la 13éme..

    Encore merci j'ai beaucoup apris grâce à vous, je vais voir comment adapter ton code pour faire cela ou alors utiliser une boucle FOR TO.

  10. #10
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Octobre 2008
    Messages : 273
    Points : 323
    Points
    323
    Par défaut
    Bonjour à tous,

    Si tes 12 onglets son réellement aux 12 premières places,
    tu peux faire une boucle sur les index de feuilles :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim j As Long
    Dim i As Long
    i = 4
     
    For j = 1 To 12
     
            Sheets(j).Range(Sheets(j).Name).Copy Sheets("Bd").Range("B" & i)
            i = Sheets("Bd").Range("B65536").End(xlUp).Row + 1
     
    Next j
    Edit : remplacement de j = 1 to 4 par j = 1 to 12 ...

    @+

  11. #11
    Membre chevronné Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Points : 2 003
    Points
    2 003
    Par défaut
    Bjr OoVAVEoO,

    Merci pour ce code il est extra c exactement ce qu'il fallait .

    Merci également à tous ceux qui ont bien voulu m'aider, grâce à vous j'ai encore appris plein de choses dont je vais pouvoir me servir.

    A bientôt!

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

Discussions similaires

  1. [XL-2007] Recap des Données de plusieur feuilles sur une seule
    Par Mckouar dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 20/10/2013, 21h35
  2. [Débutant] Création d'une boucle pour récupérer des informations
    Par youcef60 dans le forum MATLAB
    Réponses: 15
    Dernier message: 02/03/2010, 22h31
  3. réaliser une boucle pour afficher des sources
    Par cloridriks dans le forum Langage
    Réponses: 9
    Dernier message: 17/03/2008, 15h21
  4. Réponses: 21
    Dernier message: 23/05/2007, 16h16

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