VBA - Copier/Coller de ligne

Bonjour,

Etant novice et débutante en VBA, j'aurai besoin de votre aide.

Je souhaiterai procéder à un copier coller des cellule contenant uniquement "O_CAR_HDR".

Actuellement j'ai écris ceci mais cela ne fonctionne pas : Workbooks("tournée2249.csv").Sheets("tournée2249").Range("A5:BX800").Copy Workbooks("VFB_CONTROLE_M51_segments_OUTBOUND.xlsm").Worksheets("O_BD_HDR").Range("A5").

Est ce qu'il serait possible de m'aider ?

Merci par avance

Cordialement

Bonjour,

Dans ton code, tu ne testes nulle part la présence de "O_CAR_HDR" et je suppose que toutes les cellules de ta plage "AX5:BX800" ne contiennent pas cette chaîne de caractères. Aussi, je pense que tu vas devoir parcourir chaque cellule pour vérifier sa valeur, et les copier/coller au cas par cas.

Voilà ce que je te propose:

Sub CollageO_CAR_HDR()

Dim Source As Workbook, Destination As Workbook, Lig As Integer, Col As Integer

Set Source = Workbooks("tournée2249.csv")
Set Destination = Workbooks("VFB_CONTROLE_M51_segments_OUTBOUND.xlsm")

For Lig = 5 To 800
   For Col = 1 To 76
      If Source.Sheets("tournée2249").Cells(Lig, Col).Value = "O_CAR_HDR" Then Destination.Sheets("O_BD_HDR").Cells(Lig, Col) = "O_CAR_HDR"
   Next Col
Next Lig

End Sub

Merci de ta réponse.

En faite voici le début de mon code, qui fonctionne parfaitement bien :

Sub PreparationDonnees()

'Copier/coller la ligne O_CAR_LOAD du fichier *.csv vers le classeur VFB_CONTROLE_M51_segments_OUTBOUND.xlsm.

Workbooks("tournée2249.csv").Sheets("tournée2249").Range("A1:DA1").Copy Workbooks("VFB_CONTROLE_M51_segments_OUTBOUND.xlsm").Worksheets("O_BD_LOAD").Range("A5")

'Supprimer le contenu de la feuilleO_CAR_HDR du classeur VFB_CONTROLE_M51_segments_OUTBOUND.xlsm

[A5:BX800].ClearContents

'Copier/coller les lignes du fichier *.csv vers le classeur VFB_CONTROLE_M51_segments_OUTBOUND.xlsm.

End Sub

Comment puis-je faire pour intégrer la partie que tu m'as donnée ?

Tu peux coller tout sauf mon "Sub CollageO_CAR_HDR()" et "End Sub" en dernière partie de ta macro.

De préférence, place quand même les déclarations de variables en début de macro ("Dim Truc As Machin"). D'autant plus que tu peux réutiliser les variables "Workbook" pour simplifier l'écriture de ton début de macro.

Merci

Pedro22,

J'ai une dernière question. Lorsque je veux tester mon code final, j'ai le message d'erreur suivant : "Erreur de compilation : Membre de méthode ou de données introuvables (cf document joint).

Est ce que tu peux m'en dire un peu plus STP ?

Cordialement

capture

Pedro22,

J'ai une dernière question. Lorsque je veux tester mon code final, j'ai le message d'erreur suivant : "Erreur de compilation : Membre de méthode ou de données introuvables (cf document joint).

Est ce que tu peux m'en dire un peu plus STP ?

Cordialement

C'est "Dim Destination As Workbook" et non "As Workbooks"

MERCI

En passant, j'écrirais plutôt ta macro comme ça:

Sub PreparationDonnees()

Dim Source As Workbook, Destination As Workbook, Lig As Integer, Col As Integer

Set Source = Workbooks("tournée2249.csv")
Set Destination = Workbooks("VFB_CONTROLE_M51_segments_OUTBOUND.xlsm")

'Copier/coller la ligne O_CAR_LOAD du fichier *.csv vers le classeur VFB_CONTROLE_M51_segments_OUTBOUND.xlsm.
Source.Sheets("tournée2249").Range("A1:DA1").Copy Destination.Worksheets("O_BD_LOAD").Range("A5")

'Supprimer le contenu de la feuilleO_CAR_HDR du classeur VFB_CONTROLE_M51_segments_OUTBOUND.xlsm
Source.Range("A5:BX800").ClearContents

'Reporter les valeurs des cellules du fichier *.csv vers le classeur VFB_CONTROLE_M51_segments_OUTBOUND.xlsm.
For Lig = 5 To 800
   For Col = 1 To 76
      If Source.Sheets("tournée2249").Cells(Lig, Col).Value = "O_CAR_HDR" Then Destination.Sheets("O_BD_HDR").Cells(Lig, Col) = "O_CAR_HDR"
   Next Col
Next Lig

End Sub

Inutile de répéter les instructions "Set" comme dans ton Impr. écran

Pedro22 merci de ton aide.

Par contre la copie ne se fait pas concernant les lignes O_CAR_HDR ?

J'ai essayé de rajouter "Copy" mais sans succès.

Cordialement

Je souhaiterai procéder à un copier coller des cellule contenant uniquement "O_CAR_HDR".

Ma macro examine chaque cellule pour savoir si elle contient "O_CAR_HDR" et reporte cette valeur dans ce cas.

Si ce n'est pas ce que tu souhaites, alors réexplique moi et idéalement joint un/des fichiers pour que l'on s'en serve comme base.

C'est exactement ce que je souhaite faire mais il n'y a aucun report des données.

Voici les documents joints

4tournee2249.zip (12.69 Ko)

Ok, je crois que tu avais omis quelques précisions...

  • -> Le terme recherché "O_CAR_HDR" se trouve uniquement en colonne A
  • -> Tu souhaites copier la ligne entière chaque fois que "O_CAR_HDR" est présent en colonne A
  • -> Les données de ton fichier CSV ne commencent pas à la ligne 5 et ne terminent pas à la ligne 800

Autre question, dans ta base de destination, est-ce utile de garder les lignes vides, où on peut coller les lignes d'intérêt les unes à la suite des autres sans espace vide ?

Pedro 22, voici mon retour :

Le terme recherché "O_CAR_HDR" se trouve uniquement en colonne A > oui je souhaite copier l''ensemble des lignes contenant le terme

"O_CAR_HDR"

Tu souhaites copier la ligne entière chaque fois que "O_CAR_HDR" est présent en colonne A > oui

Les données de ton fichier CSV ne commencent pas à la ligne 5 et ne terminent pas à la ligne 800 > non pour la ligne 5 par contre il peut se terminer à la ligne 800.

Aucun intérêt de garder les lignes vides, les lignes peuvent-être copier à la suite.

Désolée pour toutes ces questions mais je ne complètement novice en VBA et je cherche à automatisé se travaille car très long.

Cordialement

Chercher à automatiser c'est bien, mais donner toutes les infos indispensables c'est mieux !

Dans le fichier que tu as envoyé, les données s'arrêtent à la ligne 977. Donc si on s'arrête à la ligne 800, on passera à côté de certaines données...

Pedro 22 en faite voici réellement ce je souhaite faire, actuellement opération manuel :

1ère étape :

Je dois copier les lignes O_BD_LOAD contenu dans le fichier csv vers le fichier VFB_CONTROLE_M51_segments OUTBOUND.xlsx \ feuille O_BD_LOAD. Puis faire de même pour les lignes O_CAR_HDR contenu dans le fichier csv vers le fichier VFB_CONTROLE_M51_segments OUTBOUND.xlsx \ feuille O_CAR_HDR. Puis faire de même pour les lignes O_CAR_DTL contenu dans le fichier csv vers le fichier VFB_CONTROLE_M51_segments OUTBOUND.xlsx \ feuille O_CAR_DTL.

J'ai procéder à la création d'un bouton dans la feuil1 pour réalisation de l'action de Copie.

2ème étape :

Actualisation des données afin que les tableaux croisé dymaniques qui se trouvent dans le classeur Excel VFB_CONTROLE_M51_segments OUTBOUND.xlsx s'actualisent (feuilles : RECAP_LOAD, RECAP_CAR_HDR et RECAP_CAR_DTL). Ensuite je dois me rendre dans la feuille RECAP_CAR_DTL.

3ème étape :

Ouverture du classeur Excel VFB_CONTROLE_M51_Données Tournées.xlsx

Taper le n° de tournée, qui doit-être égale au nom mentionné dans le titre du fichier *.csv, dans les feuilles CONTROLE EDIS_TOURNEE_COLIS et CONTROLE EDIS_TOURNEE_DETAIL. Patienter quelques instants afin que les données s'actualisent.

4ème étape :

Procéder à une comparaison entre la feuille RECAP_CAR_DTL du classeur VFB_CONTROLE_M51_segments OUTBOUND.xlsx et la feuille CONTROLE EDIS_TOURNEE_DETAIL du classeur VFB_CONTROLE_M51_Données Tournées.xlsx. Les colonnes concernées par cette comparaison manuelle sont : CARTON_NBR et NUMSUP , PKT_CTRL_NBR et SEQLIV, Somme de UNITS_PAKD et QTE , Somme de VENDOR_ITEM_NBR et EDIPRO ainsi que le total final.

Comme vous pouvez le voir c'est une opération très longue et fastidieuse.

2tournee2249.zip (12.69 Ko)

Voilà 2 propositions utilisant 2 méthodes différentes :

Sub PreparationDonnees()

Dim Source As Workbook, Destination As Workbook, Lig As Integer, Col As Integer, MaxLig As Integer, LigDest As Integer

Set Source = Workbooks("tournée2249.csv")
Set Destination = Workbooks("VFB_CONTROLE_M51_segments_OUTBOUND.xlsm")

'Copier/coller la ligne O_CAR_LOAD du fichier *.csv vers le classeur VFB_CONTROLE_M51_segments_OUTBOUND.xlsm.
Source.Sheets("tournée2249").Range("A1:DA1").Copy Destination.Sheets("O_BD_LOAD").Range("A5")

'Supprimer le contenu de la feuilleO_CAR_HDR du classeur VFB_CONTROLE_M51_segments_OUTBOUND.xlsm
Destination.Sheets("O_CAR_HDR").Range("A5:BX1000").ClearContents

'Reporter les valeurs des cellules du fichier *.csv vers le classeur VFB_CONTROLE_M51_segments_OUTBOUND.xlsm.
MaxLig = Source.Sheets("tournée2249").Cells(Rows.Count, 1).End(xlUp).Row
LigDest = Destination.Sheets("O_CAR_HDR").Cells(Rows.Count, 1).End(xlUp).Row
For Lig = 1 To MaxLig 'Boucle pour parcourir les lignes
    If Source.Sheets("tournée2249").Cells(Lig, 1).Value = "O_CAR_HDR" Then 'Vérification du contenu de la première colonne
        LigDest = LigDest + 1 'Compteur de lignes reportées dans le fichier de destination
        For Col = 1 To 76 'Boucle pour parcourir les colonne
            Destination.Sheets("O_CAR_HDR").Cells(LigDest, Col) = Source.Sheets("tournée2249").Cells(Lig, Col) 'Report de la valeur de chaque colonne
        Next Col
    End If
Next Lig

End Sub
Sub PreparationDonnees2()

Dim Source As Workbook, Destination As Workbook, Lig As Integer, MaxLig As Integer, LigDest As Integer

Set Source = Workbooks("tournée2249.csv")
Set Destination = Workbooks("VFB_CONTROLE_M51_segments_OUTBOUND.xlsm")

'Copier/coller la ligne O_CAR_LOAD du fichier *.csv vers le classeur VFB_CONTROLE_M51_segments_OUTBOUND.xlsm.
Source.Sheets("tournée2249").Range("A1:DA1").Copy Destination.Sheets("O_BD_LOAD").Range("A5")

'Supprimer le contenu de la feuille O_CAR_HDR du classeur VFB_CONTROLE_M51_segments_OUTBOUND.xlsm
Destination.Sheets("O_CAR_HDR").Range("A5:BX1000").ClearContents

'Reporter les valeurs des cellules du fichier *.csv vers le classeur VFB_CONTROLE_M51_segments_OUTBOUND.xlsm.
MaxLig = Source.Sheets("tournée2249").Cells(Rows.Count, 1).End(xlUp).Row
LigDest = Destination.Sheets("O_CAR_HDR").Cells(Rows.Count, 1).End(xlUp).Row
For Lig = 1 To MaxLig 'Boucle pour parcourir les lignes
    If Source.Sheets("tournée2249").Cells(Lig, 1).Value = "O_CAR_HDR" Then 'Vérification du contenu de la première colonne
        LigDest = LigDest + 1 'Compteur de lignes reportées dans le fichier de destination
        Source.Sheets("tournée2249").Rows(Lig).Copy Destination.Sheets("O_CAR_HDR").Rows(LigDest) 'Copier/coller la ligne entière
    End If
Next Lig

End Sub

Un GRAND MERCI cela fonctionne parfaitement bien

Avant de passer au reste de tes demandes, inspires-toi de ces macros pour dupliquer les opérations avec tes 2 autres valeurs recherchées. Une fois que ce sera fait, crée un nouveau sujet pour les autres opérations à automatiser.

Oui c'est ce que je comptai faire.

Mais aussi je souhaite chercher par moi-même. J'ai déjà appris beaucoup en faisant cette première partie alors autant continuer

Rechercher des sujets similaires à "vba copier coller ligne"