Synthese de plusieurs tableaux en 1 seul

Bonjour à tous,

Mon projet s'articule autour de nomenclature.

1 nomenclature par sous ensemble.

Dans ma feuille de descriptif j'ai mes références quantité ect....

de la je crée une feuille nom_blabla (elle commence toute par nom_).

Dans ces feuilles nom_

j'ai un tableau identique sur chaque A2:M

avec un nombre de ligne variables

Je souhaite faire une synthèse de toutes mes feuilles qui commencent par nom_ en une seul sur mon onglet global 1ere feuille de mon classeur.

Grâce à un bout de code je réussi a recopier mais ça semble copier coller les feuilles les unes sur les autres

et donc je ne vois que la dernière....

Moi je voudrais coller chaque tableau les uns en dessous des autres

Attention le nombre de ligne de chaque tableau est variable et modifiable.

Voici le bout de code.

Sub Recopie()

Dim Ws As Worksheet

Application.ScreenUpdating = False

Range("A2:M" & Rows.Count).Clear

For Each Ws In Sheets

If UCase(Left(Ws.Name, 3)) = "NOM" Then

With Ws

.Range("A2:M" & .Range("B" & Rows.Count).End(xlUp).Row).Copy Range("A" & Rows.Count).End(xlUp).Offset(1, 0)

End With

End If

Next Ws

End Sub

//////////////////

Fin du code////////////////

Mais il semble recopier chaque feuille l'une sur l'autre et donc je ne vois que la derniere

Merci de votre aide.

Cordialement

Luc

bonjour,

dépendant de la feuille sélectionnée au moment où tu exécutes ta macro, celle peut ou ne peut pas fonctionner.

voici une proposition de correction. changer éventuellement le nom de la feuille synthèse

Sub Recopie()
    Dim Ws As Worksheet
    With Sheets("synthèse")
        Application.ScreenUpdating = False
        .Range("A2:M" & Rows.Count).Clear
        For Each Ws In Sheets
            If UCase(Left(Ws.Name, 3)) = "NOM" Then
                Ws.Range("A2:M" & Ws.Range("B" & Rows.Count).End(xlUp).Row).Copy .Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
            End If
        Next Ws
    End With
End Sub

Bonjour et merci h2s04,

J'ai modifié le nom de ma feuille global en synthèse.

Copier coller ton code dans mon bouton mais rien...

ça me fait pareil...

J'ai légèrement modifié mon fichier de base ( en mettant des index pour suivre chaque tableaux) pour être sur. Il ressort qu'avec le code, excel colle les tableaux de chaque feuilles les unes au dessus des autres.

Donc si un tableau à plus de ligne que le dernier, je vais voir les dernieres lignes en plus du dernier...

Bonjour,

c'est probablement lié à tes données.

avec ce bout d'instruction

.Range("A" & Rows.Count).End(xlUp).Offset(1, 0)

tu détermines le nombre de lignes présentes dans ta synthèse sur base de ta colonne A. ta colonne A contient-elle quelque chose après une copie ? je ne le pense pas, à voir le reste de ton code je pense que tu devrais mettre B à la place de A. mais cela dépend de tes données et comme tu ne nous as pas mis de fichier exemple ...

Ce n'est pas toujours évident les fichiers,

j'ai fait un modèle équivalent.

Et même en changeant A et B ça ne veut pas.

je ne suis pas bloquer sur la forme la dimension de la feuille synthèse.

Merci de ton aide en tout cas!


Suite,

a noter dans l'exemple si tu places dans cette ordre

Nom_convband3 Nom_convband2 Nom_convband1

tu vois dans M s'afficher 25;32;33 qui sont le nombre de lignes des différentes feuilles dans l'ordre dernier, avant dernier et avant avant dernière.....

10projet-pournet.xlsm (69.46 Ko)

re-bonjour,

solution basée sur ton fichier exemple

Option Explicit
Sub Recopie()
    Dim Ws As Worksheet, dl, dlws
    With Sheets("synthèse")
        Application.ScreenUpdating = False
        .Range("A2:M" & Rows.Count).Clear
        For Each Ws In Sheets
            If UCase(Left(Ws.Name, 3)) = "NOM" Then
            dlws = Ws.Cells(Rows.Count, 2).End(xlUp).Row
            dl = .Cells(Rows.Count, 2).End(xlUp).Row + 1
                .Range("A" & dl).Resize(dlws - 1, 13).Value = Ws.Range("A2:M" & dlws).Value
            End If
        Next Ws
    End With
End Sub

à la vache vous êtes fort quand même!!!

Peux tu me dire par rapport au code du départ ce qui n'allait pas

et par hasard commenté pas a pas le code?

En tout cas un grand merci cela semble fonctionner je vois sur mon fichier à 68 feuilles.

Bonjour

il y avait plusieurs problèmes.

le premier est celui que j'ai suspecté. tu utilises une colonne vide pour déterminer le nombre de lignes utilisées dans la feuille.

le second tu copies des formules, qui donnent un résultat différent quand elles sont copiées.

Option Explicit
Sub Recopie()
    Dim Ws As Worksheet, dl, dlws
    With Sheets("synthèse") ' feuille de synthèse
        Application.ScreenUpdating = False
        .Range("A2:M" & Rows.Count).Clear nettoyage feuille de synthèse
        For Each Ws In Sheets 'on prend chaque feuille
            If UCase(Left(Ws.Name, 3)) = "NOM" Then ' si feuille commence par NOM
            dlws = Ws.Cells(Rows.Count, 2).End(xlUp).Row 'dernière ligne sur la feuille à copier
            dl = .Cells(Rows.Count, 2).End(xlUp).Row + 1 ' 1ere ligne qui doit recevoir la copie
                .Range("A" & dl).Resize(dlws - 1, 13).Value = Ws.Range("A2:M" & dlws).Value ' copie des valeurs
            End If
        Next Ws
    End With
End Sub

Le top merci beaucoup

JE reviens pour d'autres questions mais je cherche avant.

Bon je suis vraiment pas doué...

Une fois ma feuille synthèse OK

Je souhaite la trier de A à Z par désignation. par l'appui du second bouton.

Si désignation =0 ou ----- ou si désignation différents de quelque-chose l'alpha?

peut-on masquer les lignes? sinon pas grave.

D'avance merci.

17trie-synthese.xlsx (74.42 Ko)
Rechercher des sujets similaires à "synthese tableaux seul"