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 :

Aide correction Macro pour fusionner contenu 3 onglets mm format dans un onglet Synthèse


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Femme Profil pro
    Contrôleur de gestion
    Inscrit en
    Février 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Service public

    Informations forums :
    Inscription : Février 2016
    Messages : 8
    Par défaut Aide correction Macro pour fusionner contenu 3 onglets mm format dans un onglet Synthèse
    Bonjour à tous,

    J'ai créé un fichier, avec 4 onglets: "Synthèse", "2015", "2014", "2013".
    Le "Synthèse" est vide, et a pour objectif de compiler 3 les onglets suivants.
    Les onglets "2015", "2014", "2013" sont extrait d'un même applicatif et ont strictement le même format (seul le nombre de lignes change). Le titre est en ligne 3, et la dernière colonne est la K.

    J'ai créé la macro ci dessous pour les compiler dans Synthèse:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub LISTING()
     
    Dim Classeur As Workbook
    Set Classeur = ThisWorkbook
     
    For i = 2 To 4
     
     Sheets(i).Activate
     Sheets(i).Range("A3:k2000").Copy Classeur.Sheets("Synthèse").Range("A5").End(xlUp)(2)
     Sheets("Synthèse").Activate
     
    Next i
     
    End Sub
    Et là 2 problèmes quand j'exécute la macro:
    Seul l'onglet "2013" est repris, et le titre des colonnes remonte deux fois.
    Une idée?

    Merci, et bonne journée,
    Images attachées Images attachées  

  2. #2
    Membre émérite
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Par défaut
    Bonjour Curlita,
    A mon avis tu écrases les données déjà copiees.
    Apres avoir colle les données de ton onglet Sheet2, tu devrais compter le nombre de lignes qui ont été copiées puis coller les données de Sheet3 a la suite.
    Essayes ceci cela devrait résoudre ton problème, j'ai mis un peu d'explication avec 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
    Sub LISTING()
     
    Dim Synth As Worksheet
    Set Synth = ThisWorkbook.Sheets("Synthèse")
    Dim Sth As Range
    Set Sth = Synth.Range("A5")
    Dim NbLigne As Integer
     
    'Ici je vais utiliser l'Offset qui permet de decaler les cellules
    'Sth.Offset(0,0) est en fait ta cellule A5
    'Si tu ecris Sth.Offset(3,0) ta cellule sera la cellule A8 (A5 +3)
    'Si tu ecris Sth.Offset(0,3) ta cellule sera la cellule D5 (A5 decallee de 3 cellules a droite)
    'Si tu ecris Sth.Offset(2,3) ta cellule sera la cellule D8 (A5 decallee de 2 cellules vers le bas et 3 cellules a droite)
     
    For i = 2 To 4
     
     
    Sheets(i).Range("A3:k2000").Copy ' on copie
     
    If Sth.Offset(0, 0) = "" Then 'si la premiere ligne est vide
    Sth.Offset(NbLigne, 0).PasteSpecial 'ici nbligne=0 car on n'a encore rien colle
    Else 'si la premiere ligne n'est pas vide on decale du nombre de ligne et on eleve 4 car tu commences en A5
    Sth.Offset(NbLigne - 4, 0).PasteSpecial '
    End If
     
    With Synth
     NbLigne = .Cells(.Rows.Count, 1).End(xlUp).Row 'on compte le nombre de lignes collees
    End With
     
     
    Next i
     
     
    End Sub
    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  3. #3
    Membre régulier
    Femme Profil pro
    Contrôleur de gestion
    Inscrit en
    Février 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Service public

    Informations forums :
    Inscription : Février 2016
    Messages : 8
    Par défaut
    Bonjour Eric4459,

    Merci de ton retour, ça me reprend bien tous mes onglets à présent.
    Cependant, cela me reprend systématiquement le titre des colonnes (en ligne 3 des onglets 2015, 2014, 2013.
    Y a-t-il un moyen de faire en sorte que cela ne me le prenne qu'une fois?

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    une autre proposition, valable uniquement si le fichier ne contient bien qu'un onglet de synthèse et que TOUS les autres onglets doivent être rapatriés dans la synthèse

    je suis parti du principe que les lignes 1 et 2 contiennent quand même une cellule remplie au minimum

    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
    Sub LISTING()
    Dim FEUILLE_SOURCE As Worksheet
    Dim FEUILLE_SYNTHESE As Worksheet
    Dim TitreRepris As Boolean
     
        Set FEUILLE_SYNTHESE = ThisWorkbook.Worksheets("Synthèse")
        FEUILLE_SYNTHESE.Cells.Clear
     
        For Each FEUILLE_SOURCE In ThisWorkbook.Worksheets
            If FEUILLE_SOURCE.Name <> FEUILLE_SYNTHESE.Name Then
                With FEUILLE_SOURCE
                    If Not TitreRepris Then
                        .Cells(3, 1).Resize(.UsedRange.Rows.Count - 2, .UsedRange.Columns.Count).Copy FEUILLE_SYNTHESE.Cells(1, 1)
                        TitreRepris = True
                    Else
                        .Cells(4, 1).Resize(.UsedRange.Rows.Count - 3, .UsedRange.Columns.Count).Copy FEUILLE_SYNTHESE.Cells(Rows.Count, 1).End(xlUp)(2)
                    End If
                End With
            End If
        Next FEUILLE_SOURCE
     
     End Sub

  5. #5
    Membre émérite
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Par défaut
    Curlita,
    Pour eviter de copier les titres 3 fois tu devrais écrire

    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
    Sub LISTING()
     
    Dim Synth As Worksheet
    Set Synth = ThisWorkbook.Sheets("Synthèse")
    Dim Sth As Range
    Set Sth = Synth.Range("A5")
    Dim NbLigne As Integer
     
    'Ici je vais utiliser l'Offset qui permet de decaler les cellules
    'Sth.Offset(0,0) est en fait ta cellule A5
    'Si tu ecris Sth.Offset(3,0) ta cellule sera la cellule A8 (A5 +3)
    'Si tu ecris Sth.Offset(0,3) ta cellule sera la cellule D5 (A5 decallee de 3 cellules a droite)
    'Si tu ecris Sth.Offset(2,3) ta cellule sera la cellule D8 (A5 decallee de 3 2 cellules vers le bas et 3 cellules a droite)
     
    For i = 2 To 4
     
     
    If Sth.Offset(0, 0) = "" Then 'si la premiere ligne est vide
    Sheets(i).Range("A3:k2000").Copy ' on copie
    Sth.Offset(NbLigne, 0).PasteSpecial 'ici nbligne=0 car on n'a encore rien colle
    Else 'si la premiere ligne n'est pas vide on decale du nombre de ligne et on eleve 4 car tu commences en A5
    Sheets(i).Range("A4:k2000").Copy ' on copie
    Sth.Offset(NbLigne - 4, 0).PasteSpecial '
    End If
     
    With Synth
     NbLigne = .Cells(.Rows.Count, 1).End(xlUp).Row 'on compte le nombre de lignes collees
    End With
     
     
    Next i
     
     
    End Sub
    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  6. #6
    Membre émérite
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Par défaut
    Bonjour Joe,
    Petite modif pour ton code, qui est assez sympa d'ailleurs, car Curvita veut coller en A5 et il n'y pas de décalage a intégrer dans ton compteur pour les 2eme et 3eme onglet car toute les cellules n’étaient pas collees.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If Not TitreRepris Then
                        .Cells(3, 1).Resize(.UsedRange.Rows.Count - 2, .UsedRange.Columns.Count).Copy FEUILLE_SYNTHESE.Cells(5, 1)
                        TitreRepris = True
                    Else
                        .Cells(4, 1).Resize(.UsedRange.Rows.Count, .UsedRange.Columns.Count).Copy FEUILLE_SYNTHESE.Cells(Rows.Count, 1).End(xlUp)(1)
                    End If
    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  7. #7
    Membre régulier
    Femme Profil pro
    Contrôleur de gestion
    Inscrit en
    Février 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Service public

    Informations forums :
    Inscription : Février 2016
    Messages : 8
    Par défaut
    @ Eric4459, impecc'!
    @joe.levrai effectivement je souhaitais coller en A5, c'est justement ce que j'allais dire Eric m'a devancée. Par contre, le correctif pour collage en A5 se place à quel niveau dans le code? (je suis novice, j'apprends grâce à vous )
    J'ai essayé de le mettre après For Each FEUILLE_SOURCE In ThisWorkbook.Worksheets à la place du If, mais sans succès.
    Merci!

Discussions similaires

  1. [XL-2010] Macro pour Fusionner cellule suivant differente conditions
    Par lovlov33 dans le forum Excel
    Réponses: 13
    Dernier message: 16/11/2015, 14h26
  2. [XL-2007] Réalisation d'un macro pour fusionner des cellules sous conditions
    Par yannickcochard dans le forum Excel
    Réponses: 9
    Dernier message: 19/05/2015, 01h31
  3. [OpenOffice][Tableur] Correction macro pour open office
    Par Daniela dans le forum OpenOffice & LibreOffice
    Réponses: 6
    Dernier message: 08/10/2013, 15h18
  4. [XL-2007] Macro pour fusionner des ligne en gardant la valeur supérieure
    Par michaeldms dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 01/09/2011, 13h15
  5. Macro pour fusionner cellules excel
    Par derech dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 29/10/2007, 10h04

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