XL 2016 Consolider un fichier

linebich

XLDnaute Junior
Bonsoir forum j'espere que vous allez bien , je demande votre aide pour trouver une solution à mon probleme en fait mon objectif c'est de consolider des feuilles excel contenant le meme model de tableau dans une feuille globale j'ai ecris ce code , sauf que je sais pas comment est excel va connaitre les tableau dans les feuilles et ne me copie pas les entête
Sub transfert()

Dim i As Byte
Dim DLig As Long

DLig = Range("A7").End(xlDown).Row + 1

For i = 1 To Worksheets.Count

If UCase(Sheets(i).Name) <> "Base-Global" Then

Sheets(i).Cells("A1").CurrentRegion.Copy Sheets("Base-Global").DLig



End If

Next

End Sub
 

linebich

XLDnaute Junior
Bonsoir Staple Merci pour ton retour
ça marche trés bien avec le test sauf que moi le nombre de feuilles doit etre calcué a chaque fois
et j'ai pas compris
' en redimensionnant à chaque fois la plage de cellules de 10 lignes et 3 colonnes
moi j'ai de A2 a O le nombre de ligne change
comment est ce que je peux paramétrer ton code
cordialement



Sub Consolidation()
Dim ws As Worksheet
For Each ws In Worksheets
If Not ws.Name = "Base-Global" Then
'ici on "recopie" les valeurs seules
' en redimensionnant à chaque fois la plage de cellules de 10 lignes et 3 colonnes
'taille des tableaux des 3 feuilles à consolider
Sheets("Base-Global").Cells(Rows.Count, 1).End(xlUp)(2).Resize(10, 3).Value = ws.Range("A2:O1000").Value 'ICi j'ai pris le maximum
End If
Next
End Sub
 

Staple1600

XLDnaute Barbatruc
Re

de A à C, il y a bien 3 colonnes
Et dans mon exemple , les tableaux comptaient 10 lignes
Donc il faut adapter en conséquence
De A à O, je doute fort qu'il y ait 3 colonnes
Et O1000 ne correspond assurément pas à O10
Tu vois où je veux en venir et où il faut adapter dans le code ? ;)
 

Staple1600

XLDnaute Barbatruc
Re

Donc tu n'as compris l’adaptation à faire?
Avec ton exemple, il fallait ceci ;)
VB:
Sub ConsolidationII()
Dim ws As Worksheet
For Each ws In Worksheets
If Not ws.Name = "Base-Global" Then
Sheets("Base-Global").Cells(Rows.Count, 1).End(xlUp)(2).Resize(999, 15).Value = ws.Range("A2:O1000").Value
End If
Next
End Sub
 

Staple1600

XLDnaute Barbatruc
Re

Pour finir (il est tard, faut que j'aille me brosser les dents et enfiler mon pyjama en pilou ;)), une version pour si les tableaux sont de taille différente.
VB:
Sub ConsolidationIII()
Dim ws As Worksheet, P As Range, X&, Y&
For Each ws In Worksheets
If Not ws.Name = "Base-Global" Then
Set P = ws.Range(ws.Cells(2, "A"), ws.Cells(Rows.Count, "O").End(xlUp))
X = P.Rows.Count: Y = P.Columns.Count
Sheets("Base-Global").Cells(Rows.Count, 1).End(xlUp)(2).Resize(X, Y).Value = P.Value
End If
Set P = Nothing
Next
End Sub
 

Staple1600

XLDnaute Barbatruc
Re

Je veux m'endormir en étant sur que tu as compris mes deux derniers messages.
Donc la charte a dit
4 – Le langage SMS et le verlan ne sont pas autorisés sur les forums.
J'ai supputé que vrm= > vraiment
Donc tu as franchi un interdit ! ;)

Maintenant je peux aller dormir serein et apaisé et te laisser consolider à donf. ;)

Merde, j'ai franchi aussi
(mais je ne fais jamais de pompes en pyjama)

Allez, bonne nuit et bonne consolidation ;)
 

Jiheme

XLDnaute Accro
Bonjour le fil,

Dans la macro de Stapple du message n°8 :

VB:
Sub ConsolidationIII()
Dim ws As Worksheet, P As Range, X&, Y&
For Each ws In Worksheets
If Not ws.Name = "Base-Global" Then
Set P = ws.Range(ws.Cells(2, "A"), ws.Cells(Rows.Count, "O").End(xlUp))
X = P.Rows.Count: Y = P.Columns.Count
Sheets("Base-Global").Cells(Rows.Count, 1).End(xlUp)(2).Resize(X, Y).Value = P.Value
End If
Set P = Nothing
Next
End Sub

Je cherche à la modifier de manière à ce qu'elle ne recopie pas la ligne 1 de chaque feuille (titres) j'ai essayé 2 ou trois modifs, mais sans succès.
 

Staple1600

XLDnaute Barbatruc
Bonsoir Jiheme

Je viens de refaire le test
Les lignes de titre ne sont pas copiées.

EDITION: Essaies ce petit test
Sur un classeur vierge, lance la macro ci-dessous
(pour créer un classeur de test)
VB:
Sub Créer_Exemple()
Dim i As Byte, P As Range
For i = 1 To 4
Sheets.Add(after:=Sheets(Sheets.Count)).Name = "Test_" & i
Next
For i = 1 To 4
With Sheets("Test_" & i)
.Range("A1:O1") = "=""ITEM_""&COLUMN()"
Set P = .Range("A2:O" & Application.RandBetween(1, 37))
P.Formula = "=CHAR(64+" & i & ")&ADDRESS(ROW(),COLUMN(),4)"
P = P.Value
Set P = Nothing
End With
Next
Sheets.Add(after:=Sheets(Sheets.Count)).Name = "Base-Global"
Application.DisplayAlerts = False
Sheets(1).Delete
End Sub
Puis lance la macro ConsolidationIII
Tu verras que les lignes de titre ne sont pas recopiées ;)
 
Dernière édition:

Discussions similaires

Réponses
7
Affichages
319

Statistiques des forums

Discussions
312 084
Messages
2 085 194
Membres
102 811
dernier inscrit
caroline29260