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.

10ecart-type.xlsx (12.90 Ko)

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 Sub

Code 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 Function

Ton 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.

Rechercher des sujets similaires à "copier donnees plage premiere case vide colonne"