Copier les données d'une plage vers la première case vide d'une colonne
Bonjour, je suis actuellement en train de réaliser des copies d'un fichier Excel vers un autre grâce à une macro en VBA.
Je copie les cellules "C11:G11" du fichier "Contrôles sachets" vers le fichier "auto" dans les cellules "G3:K3".
J'utilise ces lignes de code pour cela : ThisWorkbook.Worksheets("Contrôles sachets").Range("C11:G11").Copy
fichier_a_completer.Worksheets("auto").Range("G3").PasteSpecial _
Operation:=xlPasteSpecialOperationAdd
Jusqu'ici aucun soucis. C'est maintenant que le problème arrive.
La copie de cellules ("Contrôles sachets") se fait toutes les 4 lignes (soit "C11:G11", "C15:G15", "C19:G19", ... , "C87:G87").
Le collage ("auto") doit s'effectuer sur toutes les lignes cependant (soit "G3:K3", "G4:K4",..., "G22:K22").
Je sais qu'il est possible de réaliser ces copies en effectuant 22 copier/coller mais ce n'est pas la meilleure manœuvre à effectuer.
J'ai essayé de faire une macro permettant de copier les plages de données qui m'intéressaient en indiquant la dernière cellule vide afin que les données de "C11:G11", "C15:G15", "C19:G19", ... , "C87:G87" soient collées automatiquement les unes à la suite des autres en ligne.
En réalisant plusieurs recherches, j'ai compris qu'il fallait se servir de "xlEnd" mais je n'arrive pas à réaliser ce bout de code.
Pourriez-vous m'apporter de l'aide s'il vous plaît?
Bonjour plach_mcqueen, le forum,
Un petit fichier peut-être pour voir comment sont structurées tes données ?
Cordialement,
Bonjour Xorsankukai,
Les valeurs à copier sont dans le premier fichier et celles à coller forcément dans le second.
Bien cordialement.
Re,
Un essai.....les données sont copiées sur la feuille auto2 (le classeur ecart-type doit être ouvert pour que cela fonctionne, sinon, un message te stipule qu'il n'est pas ).
Code du bouton (module feuille "Contrôles sachets"):
Private Sub ET_Click()
Dim dl As Integer, derlig As Integer
Dim madate As Date
Dim poids_sachet As Integer, tare_sachet As Integer
Dim TU1 As Integer, TU2 As Integer
Dim produit_emballé As String, code_article, numéro_lot As String, OF
Dim tablo, tabloR(), k%, i%
With Sheets("Contrôles sachets")
dl = .Range("C" & Rows.Count).End(xlUp).Row
madate = .Range("C5")
poids_sachet = .Range("F8")
tare_sachet = .Range("B8")
TU1 = .Range("H8")
TU2 = .Range("J8")
produit_emballé = .Range("C6")
code_article = .Range("C7")
numéro_lot = .Range("H6")
OF = .Range("J6")
tablo = .Range("A11:G" & dl)
k = 0
For i = 1 To UBound(tablo, 1) Step 4
If tablo(i, 3) <> "" Then
ReDim Preserve tabloR(1 To 15, 1 To k + 1)
tabloR(1, 1 + k) = DateValue(madate) * 1
tabloR(2, 1 + k) = numéro_lot
tabloR(3, 1 + k) = OF
tabloR(4, 1 + k) = poids_sachet
tabloR(5, 1 + k) = tare_sachet
tabloR(6, 1 + k) = tablo(i, 1)
tabloR(7, 1 + k) = tablo(i, 3)
tabloR(8, 1 + k) = tablo(i, 4)
tabloR(9, 1 + k) = tablo(i, 5)
tabloR(10, 1 + k) = tablo(i, 6)
tabloR(11, 1 + k) = tablo(i, 7)
tabloR(12, 1 + k) = TU1
tabloR(13, 1 + k) = TU2
tabloR(14, 1 + k) = produit_emballé
tabloR(15, 1 + k) = code_article
k = 1 + k
End If
Next i
If FichOuvert("ecart-type.xlsx") Then
'Workbooks("ecart-type.xlsx").Sheets("auto2").Range("A2").CurrentRegion.Offset(1, 0).ClearContents
derlig = Workbooks("ecart-type.xlsx").Sheets("auto2").Range("A" & Rows.Count).End(xlUp).Row + 1
On Error Resume Next
Workbooks("ecart-type.xlsx").Sheets("auto2").Range("A" & derlig).Resize(UBound(tabloR, 2), 15) = Application.Transpose(tabloR)
Erase tablo: Erase tabloR
Else
MsgBox "Le classeur ecart-type.xlsx n'est pas ouvert, " & Chr(10) & Chr(10) & "Transfert des données impossible.": Exit Sub
End If
End With
End SubCode module standard (fonction qui teste si le classeur de destination est ouvert)
Function FichOuvert(F As String) As Boolean
'myDearFriend! - www.mdf-xlpages.com
On Error Resume Next
FichOuvert = Not Workbooks(F) Is Nothing
End FunctionTon fichier source:
Cordialement,
Merci beaucoup Xorsankukai, je vais essayer avec ce code et m'en inspirer pour les prochaines fois.
Bien cordialement.
Votre code paraît très bien.
Cependant je n'arrive pas à le lancer car un message d'erreur de type '9' vient s'afficher disant que l'indice n'appartient pas à la sélection.
Que me conseilleriez-vous?
Bien cordialement.
Bonjour plash_mcqueen, le forum,
un message d'erreur de type '9' vient s'afficher disant que l'indice n'appartient pas à la sélection
Sur quelle ligne de code se produit l'erreur ? Elle doit être surlignée en jaune.....
As-tu vérifié le nom de tes feuilles ?
J'ai fait plusieurs tests sur mon pc, je n'ai rencontré aucun problème....
Cordialement,
Re,
Justement il n'y a ni ligne surlignée, ni passage en rouge.
J'ai vérifié le nom de mes feuilles en effet car j'ai vu que cette erreur de type 9 pouvait provenir de cela mais ce n'est pas ça.
Je vais le transmettre sur un autre ordi pour essayer.
Je vous remercie encore.
Bien cordialement.