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