Importer des tableaux (marge non vide) de plusieurs feuilles avec VBA
Bonjour, merci à tous pour votre précieux soutien,
Les données :
- Tableaux décennal en couleur Jaune sur plusieurs feuilles.
- Tableaux Triennal en couleur vert sur plusieurs feuilles.
Objectif :
- La feuille « Impo D » regroupe tous les tableaux décennal (en jaune) l'un en dessous de l'autre sans entête si les données existent de toute les feuille après la feuille « Vierge » jusqu'à la dernier, il se peut que plusieurs feuilles aillent être créées après, le même procédé avec la feuille «Impo T» triennal (en vert)
Débutant sur VBA, je n'arrive pas à savoir comment faire. un grand merci pour votre précieux soutien.
Bonjour et bienvenu sur le forum
Peux-tu expliquer ce que tu veux de façon plus précise ?
Tu veux rapatrier les valeurs des différentes feuilles sur test feuilles Impo D et Impo T ?
A quoi rime les zone de texte Vide ?
merci et pardon pour le retard Theze,
Justement, s'il n'y a pas de données (tableau décennal), comme sur l'image en psj, l'importation de données de cette feuille coter décennal n'aura pas lieu, en revanche l'importation de données de la même feuille coter triennal doit être
A mettre dans un module standard d'une copie de ton classeur et tester :
Sub Test()
Dim Fe As Worksheet
Dim Plage As Range
Dim Lig As Long
For Each Fe In Worksheets(Array("252", "7", "126", "171", "125", "110"))
With Fe: Set Plage = .Range(.Cells(10, 9), .Cells(.Rows.Count, 15).End(xlUp)): End With
If Plage.Row > 9 Then
With Worksheets("Impo D")
Lig = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
.Cells(Lig, 1).Resize(Plage.Rows.Count, Plage.Columns.Count).Value = Plage.Value
End With
End If
With Fe: Set Plage = .Range(.Cells(10, 26), .Cells(.Rows.Count, 32).End(xlUp)): End With
If Plage.Row > 9 Then
With Worksheets("Impo T")
Lig = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
.Cells(Lig, 1).Resize(Plage.Rows.Count, Plage.Columns.Count).Value = Plage.Value
End With
End If
Next Fe
End SubBonjour désolée pour le retard Theze, je travaille dans une raffinerie, je n’ai pas de laptot dans ma chambre et merci,
Ça commence à prendre forme, mais il y a quelques anomalies pour atteindre l'objectif,
- Es qu’peut faire en sort que le code prend en charge toutes les feuilles après la feuille nommé « vierge », même les nouvelles feuilles créées ensuite (il se peut que plusieurs feuilles aillent être créées après), car le traitement n'as pas pris en compte la feuille nommé 10 que j’ai ajouté.
- Dans la feuille Impo T, le résultat donne aussi quelque ligne décennal et il n’a pas pris tous les donnée coté triennal,
Merci pour votre aide précieuse
Bonjour D’abord merci 100 fois pour ce forum très enrichissant
Voici le code fonctionnel de Mr EricDgn
Sub Test()
Dim Fe As Worksheet, shT As Worksheet, shD As Worksheet
Dim Plage As Range
Dim Lig As Long, LigD As Long, LigT As Long
Set shD = Worksheets("Impo D")
Set shT = Worksheets("Impo T")
'--- nettoyer
With shT
.Select
Lig = .Cells(.Rows.Count, 1).End(xlUp).Row
If Lig > 2 Then .Range("A3", Cells(Lig, 7)).Clear 'Delete Shift:=xlUp
End With
With shD
.Select
Lig = .Cells(.Rows.Count, 1).End(xlUp).Row
If Lig > 2 Then .Range("A3", Cells(Lig, 7)).Clear 'Shift:=xlUp
End With
'--- importer
LigD = 3 '--- ligne où copier dans shD
LigT = 3 '--- ligne où copier dans shT
For Each Fe In Worksheets
If InStr("Impo D,Impo T,Vierge", Fe.Name) > 0 Then
'--- feuilles à ne pas utiliser --- ne rien faire, continuer
Else
With Fe
Debug.Print Fe.Name, LigD, LigT
'--- Décénnal
Lig = .Cells(.Rows.Count, 15).End(xlUp).Row
If Lig > 9 Then
Set Plage = .Range(.Cells(10, 9), .Cells(Lig, 15))
Plage.Copy shD.Cells(LigD, 1)
LigD = LigD + Lig - 9 '--- prochaine copie sur cette ligne
End If
'--- Triénnal
Lig = .Cells(.Rows.Count, 26).End(xlUp).Row
If Lig > 9 Then
Set Plage = .Range(.Cells(10, 26), .Cells(Lig, 32))
Plage.Copy shT.Cells(LigT, 1)
LigT = LigT + Lig - 9 '--- prochaine copie sur cette ligne
End If
End With
End If
Next Fe
Debug.Print "fini", LigD, LigT
Set Plage = Nothing
Set shT = Nothing
Set shD = Nothing
End SubSalutation
Bonjour,
Mon code modifié :
Sub Test()
Dim Fe As Worksheet
Dim Plage As Range
Dim Lig As Long
For Each Fe In Worksheets
Select Case Fe.Name
Case "Impo D", "Impo T", "Vierge" 'feuilles évitées
Case Else
With Fe: Set Plage = .Range(.Cells(10, 9), .Cells(.Rows.Count, 15).End(xlUp)): End With
If Plage.Row > 9 Then
With Worksheets("Impo D")
Lig = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
.Cells(Lig, 1).Resize(Plage.Rows.Count, Plage.Columns.Count).Value = Plage.Value
End With
End If
With Fe: Set Plage = .Range(.Cells(10, 26), .Cells(.Rows.Count, 32).End(xlUp)): End With
If Plage.Row > 9 Then
With Worksheets("Impo T")
Lig = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
.Cells(Lig, 1).Resize(Plage.Rows.Count, Plage.Columns.Count).Value = Plage.Value
End With
End If
End Select
Next Fe
End SubBonjour, Theze, c'est plus simple merci encore