VBA Commencer une macro à partir d'une ligne qui varie

Bonjour à tous,

Je bloque sur une partie de mon code.
J'ai réussi à faire un code pour récupérer un fichier Excel et copier /coller les colonnes C, D et M, et E, F et N à la suite à partir de la ligne 15.

Mais si ma ligne ne commence pas à la 15, comment pourrais-je faire ?

Par exemple les lignes que je veut copier commence à la 12 ou à la 19, cela dépend du fichier.
il y a d'autre ligne "non concerné au dessus" et je veut commencer à copier mes lignes dès que la valeur de la case est "C" comment pourrais-je faire ?
on ma proposer d'utiliser :

For RowSyn = 1 To 800

    If Sheets(1).Cells(RowSyn, C).Value Like "C" Then</pre></td></tr></tbody></table>

Mais je ne sais pas trop comment faire pour l'adapter à mon code.

je vous met mon code ci-dessous.

Sub Choix_du_Fichier()

Dim FichierSource As Variant

Dim Source As Workbook
Dim Cible As Worksheet

    Set Cible = Sheets("Fin de Travaux réalisés")
    FichierSource = Application.GetOpenFilename("Fichiers (*.xlsx),*.xlsx")

    Application.ScreenUpdating = False
    Set Source = Workbooks.Open(FichierSource)
    With Source
         .Sheets("Fin de Travaux réalisés").Range("C12:D800,M12:M800").Copy Destination:=Cible.Range("A1")
    End With

    Dim Ligne_A As Integer
    Ligne_A = Range("A" & Rows.Count).End(xlUp).Row + 1

    With Source
         .Sheets("Fin de Travaux réalisés").Range("E12:E800").Copy Destination:=Cible.Range("A" & Ligne_A)
    End With

    Dim Ligne_B As Integer
    Ligne_B = Range("B" & Rows.Count).End(xlUp).Row + 1

    With Source
         .Sheets("Fin de Travaux réalisés").Range("F12:F800").Copy Destination:=Cible.Range("B" & Ligne_B)
    End With

    Dim Ligne_C As Integer
    Ligne_C = Range("C" & Rows.Count).End(xlUp).Row + 1
    With Source
         .Sheets("Fin de Travaux réalisés").Range("n12:n800").Copy Destination:=Cible.Range("C" & Ligne_C)
         .Close False
    End With

    'Supprime les doublons
    'Prend en compte les 3 colonnes
    Range("A1:C800").RemoveDuplicates Columns:=Array(1, 2, 3), Header:=xlNo

    Application.ScreenUpdating = True

    MsgBox "Fin de l'import !"

End Sub

Merci à vous

Bonjour,

Un Import par VBA c'est un peu has been maintenant que power Query existe. Cependant si vous voulez qu'on vous aides, je suis presque sur qu'un exemple de votre base et un exemple du resultat après import pourrait nous aidez à comprendre votre code.

Cdt

Bonjour,

Oui je suis bien d'accord, mais je dois passer par VBA c'est dans le cadre des études.

Je vous met ci-joint mon fichier avec la macro et le résultat :

6test-macro.xlsm (23.92 Ko)

Et un exemple de fichier : le fichier que je récupère et qui ne commence pas tout le temps par la même ligne.

4test.xlsx (49.18 Ko)

Bonjour Lolo30, le fil

Je viens d'ouvrir ta PJ "test"... un peu vide !

Mais pour répondre presque bêtement, à ta question :

Mais si ma ligne ne commence pas à la 15, comment pourrais-je faire ?

Il faut trouver un moyen de savoir où doivent commencer la récupération des données, tel qu'un détail sur les fichiers concernés, un nom différent, etc. !

Ou bien faire en sorte que ton code demande une ligne de départ et de fin avant la réalisation de la copie, ou encore permettre une fois le fichier ouvert de sélectionner une ligne de départ (ou même une zone à copier)... A voir selon tes besoins... La programmation si tu en as besoin de conseil, viendra par la suite !

Bonjour,

Un essai, à partir de ce que j'ai compris :

Sub Choix_du_Fichier()

Dim FichierSource As Variant
Dim Lig As Long, DebLig As Long, DerLig As Long
Dim Cible As Worksheet

    Set Cible = Sheets("Fin de Travaux réalisés")
    FichierSource = Application.GetOpenFilename("Fichiers (*.xlsx),*.xlsx")

    Application.ScreenUpdating = False
    Workbooks.Open(FichierSource)
    With ActiveWorkbook.Worksheets("Fin de Travaux réalisés")
        For Lig = 2 To 800
            If .Range("C" & Lig) = "C" Then DebLig = Lig: Exit For 'Cherche 1ère ligne avec "C"
        Next Lig
        .Range("C" & DebLig & ":D800,M" & DebLig & ":M800").Copy Destination:=Cible.Range("A1")
        DerLig = Cible.Range("A" & Rows.Count).End(xlUp).Row + 1
        .Range("E" & DebLig & ":E800").Copy Destination:=Cible.Range("A" & DerLig)
        DerLig = Cible.Range("B" & Rows.Count).End(xlUp).Row + 1
        .Range("F" & DebLig & ":F800").Copy Destination:=Cible.Range("B" & DerLig)
        DerLig = Cible.Range("C" & Rows.Count).End(xlUp).Row + 1
        .Range("N" & DebLig & ":N800").Copy Destination:=Cible.Range("C" & DerLig)
    End With
    'Supprime les doublons en prenant en compte les 3 colonnes
    Cible.Range("A1:C800").RemoveDuplicates Columns:=Array(1, 2, 3), Header:=xlNo
    Application.ScreenUpdating = True
    MsgBox "Fin de l'import !"

End Sub

Bonjour Pedro,

Merci pour ton aide le code fonctionne nickel.
Juste une petite question, lorsque je lance la macro, le fichier Excel que je demande à traiter s'ouvre en même temps. Serais-tu pourquoi ?

Merci à toi

C'est bon j'ai réussi à résoudre mon problème.

Il fallait juste rajouter :

 ActiveWorkbook.Close savechanges:=True

Bonjour,

Juste une petite question, lorsque je lance la macro, le fichier Excel que je demande à traiter s'ouvre en même temps. Serais-tu pourquoi ?

Il s'ouvre par ce que tu lui demande de le faire ici :

Workbooks.Open(FichierSource)

Pour le fermer dans la macro, ajoute après la ligne d'instruction End With la ligne ci-dessous :

ActiveWorkbook.Close False 'Ferme sans enregistrer

Bonjour Pedro,

Merci à toi pour ton aide et bonne journée :)

Rechercher des sujets similaires à "vba commencer macro partir ligne qui varie"