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.

8imp.xlsm (171.69 Ko)

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

6classeur4.xlsx (661.62 Ko)

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 Sub

Bonjour 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

5imp.xlsm (206.87 Ko)

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 Sub

Salutation

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 Sub

Bonjour, Theze, c'est plus simple merci encore

Rechercher des sujets similaires à "importer tableaux marge vide feuilles vba"