Copier coller de taille variable

Bonjour à tous,

Etant vraiment débutant sur Excel et encore plus VBA je me permets de créer un nouveau sujet parce que je n'ai pas encore réussi à trouver de réponse à mon problème .

J'ai créer un simple code qui permet de trier deux requêtes puis qui doit ensuite les coller sur une même feuille.

Les requêtes n'ayant pas la même taille chaque mois j'ai pris ça en compte dans mon code, mais la dernière ligne ne marche jamais ...

Ci dessous mon petit code :

Sub Test()

' Test Macro

Dim R As Long

Dim J As Long

R = 1

J = 1

Sheets("Requêtes BI").Select

Columns("G:G").Delete Shift:=xlToLeft

Columns("F:F").Delete Shift:=xlToLeft

Columns("A:A").Delete Shift:=xlToLeft

Range("A1").Select

Do While Cells(J, 1).Value <> "" 'Compte le nombre de ligne du fichier

Debug.Print J

J = J + 1

Loop

Sheets("Ventes siege").Select

Columns("K:K").Delete Shift:=xlToLeft

Columns("F:H").Delete Shift:=xlToLeft

Columns("A:B").Delete Shift:=xlToLeft

Columns("E:E").Select

Selection.Cut

Columns("D:D").Select

Selection.Insert Shift:=xlToRight

Range("A:G").Copy Worksheets("Recap").Range("A1")

Sheets("Recap").Select

Range("A1").Select

Do While Cells(R, 1).Value <> "" 'Compte le nombre de ligne du fichier

Debug.Print R

R = R + 1

Loop

Sheets("Requêtes BI").Select

Range("A:G").Copy Worksheets("Recap").Range(Cells(R, 1), Cells(J, 7)).Select

End Sub

Si quelqu'un arrive à trouver d'ou ça peut venir ça me sauverai la vie !

Bonjour,

L'on essaie de ne pas utiliser les .Select ... tant que c'est possible.

Concernant le souci de la dernière ligne ... tu essaie de coller des colonnes entières au bas d'une plage existante ... ce qui n'est pas logique ...

Un essai ...

Sub Test()
    ' Test Macro
Dim R As Long
Dim J As Long
    R = 1
    J = 1

    With Sheets("Requêtes BI")
        .Columns("F:G").Delete Shift:=xlToLeft
        .Columns("A:A").Delete Shift:=xlToLeft
        Do While .Cells(J, 1).Value <> ""    'Compte le nombre de ligne du fichier
            Debug.Print J
            J = J + 1
        Loop
    End With

    With Sheets("Ventes siege")
        .Columns("K:K").Delete Shift:=xlToLeft
        .Columns("F:H").Delete Shift:=xlToLeft
        .Columns("A:B").Delete Shift:=xlToLeft
        .Columns("E:E").Cut
        .Columns("D:D").Insert Shift:=xlToRight
        .Range("A:G").Copy Worksheets("Recap").Range("A1")
    End With

    With Sheets("Recap")
        Do While .Cells(R, 1).Value <> ""    'Compte le nombre de ligne du fichier
            Debug.Print R
            R = R + 1
        Loop
    End With

    Sheets("Requêtes BI").Range("A1:G" & J).Copy Worksheets("Recap").Range("A" & R)
End Sub

ric

Bonjour,

C'est noté pour les Select, merci du conseil, je commence tout juste avec Excel/VBA j'ai encore tout à apprendre !

Alors avec ce changement je n'ai plus le message d'erreur que j'avais avant, par contre les données de ma feuille source n'apparaissent pas dans la feuille de destination ... (Pour info les données de ma feuille source viennent d'une requête qui cumule toutes les données d'un dossier, environ 45 000 lignes par mois je ne sais pas si ça change quelque chose)

J'ai essayé de bidouiller un peu comme j'ai pu mais je ne vois pas d'ou ça peut venir

Est ce qu'il serait possible de m'expliquer rapidement la dernière ligne pour essayer de comprendre le fonctionnement ?

"Sheets("Requêtes BI").Range("A1:G" & J).Copy Worksheets("Recap").Range("A" & R)"

Merci beaucoup en tout cas !

Bonjour,

"Sheets("Requêtes BI").Range("A1:G" & J).Copy >> de A1 jusqu'à G et la dernière ligne non vide > J étant calculé dans ta boucle.

Worksheets("Recap").Range("A" & R)" >> colonne A et première ligne vide > R étant calculé dans l'autre boucle.

Sauf que si tu as 45 000 lignes, la boucle Do While sera trop lente.

Je regarde pour une autre méthode...

... par contre les données de ma feuille source n'apparaissent pas dans la feuille de destination ... >> Est-ce que tu peux me détailler cela s.t.p. ?

Lors d'enregistrement automatique, le code contient beaucoup de .Sélection > mais au moins l'on a le déroulement et les façons de faire.

Mais par la suite, il faut faire un beau ménage ...

ric

D'accord c'est déja plus clair pour moi merci !

Ah oui je n'avais pas pensé que la quantité de données pouvait aussi bloquer ...

Du coup quand je dis que les données n’apparaissent pas je n'ai vraiment aucun changement, le copier coller de l'autre feuille s'effectue toujours bien, mais je n'ai toujours rien à partir de la ligne 1214 (la première vide) pas une de plus pour le copier coller de la seconde feuille (Requête BI) ...

Bonjour,

Avec la méthode Do While > s'il y a une cellule vide ou non reconnue sur le chemin > la boucle s'arrête donnant la mauvaise ligne de fin.

Essai ce code ... et dis-moi si le souci est parti au paradis

Sub Test()
    ' Test Macro
Dim R As Long
Dim J As Long
Dim K As Long

    With Sheets("Requêtes BI")
        .Columns("F:G").Delete Shift:=xlToLeft
        .Columns("A:A").Delete Shift:=xlToLeft

'''        Do While .Cells(J, 1).Value <> ""    'Compte le nombre de ligne du fichier
'''            Debug.Print J
'''            J = J + 1
'''        Loop

        ' remplace le code en commentaire ...
        J = .Cells(Rows.Count, 1).End(xlUp).Row ' trouve la dernière ligne non vide de la colonne A
    End With

    With Sheets("Ventes siege")
        K = .Cells(Rows.Count, 1).End(xlUp).Row ' trouve la dernière ligne non vide de la colonne A
        .Columns("K:K").Delete Shift:=xlToLeft
        .Columns("F:H").Delete Shift:=xlToLeft
        .Columns("A:B").Delete Shift:=xlToLeft
        .Columns("E:E").Cut
        .Columns("D:D").Insert Shift:=xlToRight
        .Range("A1:G" & K).Copy Worksheets("Recap").Range("A1")
    End With

'''        Do While .Cells(R, 1).Value <> ""    'Compte le nombre de ligne du fichier
'''            Debug.Print R
'''            R = R + 1
'''        Loop

    ' remplace le code en commentaire ...
    R = Sheets("Recap").Cells(Rows.Count, 1).End(xlUp).Row + 1 ' l'on ajoute 1 pour avoir le première ligne vide

    Sheets("Requêtes BI").Range("A1:G" & J).Copy Worksheets("Recap").Range("A" & R)
End Sub

ric

Bonjour,

Oui c'est parfait ça marche très bien maintenant !

Merci beaucoup

Rechercher des sujets similaires à "copier coller taille variable"