Copier Coller à la suite

Fermé
maevaaugereau - 7 mai 2017 à 14:32
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 - 8 mai 2017 à 17:31
Bonjour,

Je cherche à copier coller des données dans des feuilles de calculs précises en fonction de la valeur de la colonne B.
(Si dans l'onglet "AJOUTER UN PRODUIT", B contient "Bordeaux" copier la ligne dans l'onglet "Bordeaux")

Je travaille avec le code suivant :

Sub RANGER()
J = 179
For i = 2 To 65536
If Application.Workbooks("CAVE.xlsm").Worksheets("AJOUTER UN PRODUIT").Range("B" & i).Value = "Bordeaux" Then
Application.Workbooks("CAVE.xlsm").Worksheets("Bordeaux").Range("B" & J & ":T" & J).Value = Application.Workbooks("CAVE.xlsm").Worksheets("AJOUTER UN PRODUIT").Range("B" & i & ":T" & i).Value
J = J + 1
End If
Next i

End Sub


Ce code fonctionne très bien et colle les données que je veux à partir de la ligne 179 comme le défini "J"

Seulement le document excek est voué à vivre et l'onglet "AJOUTER UN PRODUIT" à être alimenté de nouvelles données.
J'aimerais donc pouvoir copier les données de "AJOUTER UN PRODUIT" à la suite des données déjà présentes dans "BORDEAUX"

Pourriez-vous me dire ce que je dois changer dans le code ci-dessus pour que cela fonctionne...
Merci beaucoup d'avance,
Très bonne journée :)


3 réponses

ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
7 mai 2017 à 18:27
Bonjour Maeva, bonjour le forum,

Si l'ai bien compris, essaie comme ça :

Sub RANGER()
Dim CL As Workbook 'déclare la variable CL (CLasseur)
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim DL As Long 'déclare la variable DL (Dernière Ligne)
Dim I As Long 'déclare la variable I (Incrément)
Dim J As Long 'déclare la variable J (incrément)

Set CL = ThisWorkbook 'définit le classeur CL
Set OS = CL.Worksheets("AJOUTER UN PRODUIT") 'définit l'onglet source OS
Set OD = CL.Worksheets("Bordeaux") 'définit l'onglet destination OD
DL = OS.Cells(Application.Rows.Count, "B").End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne B de l'onglet OS
'définit la ligne J (179 si la cellule B179 est vide, sinon la première ligne vide (en partant du bas) de la colonne B de l'onglet OD
J = IIf(OD.Cells(179, "B").Value = "", 179, OD.Cells(Application.Rows.Count, "B").End(xlUp).Row + 1)
For I = 2 To DL 'boucle sur toutes les lignes I de 2 à DL
    'si la cellule ligne I colonne B de l'onglet OS est égal à "Bordeaux", revoie dans la cellule
    'ligne J colonne B redimensionnée de l'onglet OD la valeur de la plage ligne I colonnes B à T de l'onglet OS
    If OS.Cells(I, "B").Value = "Bordeaux" Then OD.Cells(J, "B").Resize(1, 19).Value = OS.Range(OS.Cells(I, "B"), OS.Cells(I, "T")).Value
    J = J + 1 'incrémente J
Next I 'prochaine ligne de la boucle
End Sub

0
maevaaugereau
7 mai 2017 à 18:49
Wow ! Brillant !!!
Merci beaucoup (pour le code et pour les explications !!)

A tout hasard une astuce pour qu'il n'y ait pas de lignes vides dans la feuille de destination ?
Parce qu'il n'y a pas que des bordeaux sur la feuille d'origine :)

Si non je peux mettre en place un autre code, c'est juste au cas où

Encore merci !!
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
8 mai 2017 à 17:31
Re,

Il suffit de mettre l'incrémentation de J dans la condition, comme d'ailleurs tu as fait dans ton code original mais je ne m'en étais pas aperçu.

If OS.Cells(I, "B").Value = "Bordeaux" Then 
   OD.Cells(J, "B").Resize(1, 19).Value = OS.Range(OS.Cells(I, "B"), OS.Cells(I, "T")).Value
    J = J + 1 'incrémente J
End If

0