Copier des lignes jusqu'à trouver une valeur donnée

Bonjour à tous,

Je suis débutant en VBA et j'essaie de trouver une formule ressemblant à celle qui permet de copier des cellules jusqu'à la prochaine ligne vide sauf que j'aimerais que la sélection à copier s'arrête à une valeur donnée...

Je vous mets un fichier d'exemple.

J'aimerais que la macro se place en cellule A11 et copie toutes les cellules jusqu'à la cellule dans laquelle elle trouvera le texte "-------- Etape 2 : Génération"

Une fois la copie effectuée, j'aimerais qu'elle ouvre un 2ème tableur et colle le tout à la prochaine ligne vide de la colonne A (mais ça je pense pouvoir le faire seul :D)

J'ai essayé de créer une ligne de code avec .find mais rien a faire je n'y arrive pas

Merci d'avance !

bonjour,

une proposition à adapter à ton cas

Sub aargh()
    With ActiveSheet  ' <- à adapter éventuellement
        dl = .Cells(Rows.Count, 1).End(xlUp).Row
       derlig = .Range("A11").Resize(dl, 1).Find("Etape 2", LookIn:=xlValues, lookat:=xlPart).Row - 1
        .Range(.Range("A11"), .Cells(derlig, 1)).Copy Sheets("cible").Range("A1") 'adapter la destination de la copie
    End With
End Sub
Hello h2so4,

Cela fonctionne parfaitement, mais je ne suis pas sûr d'avoir compris la partie suivante :

LookIn:=xlValues, lookat:=xlPart).Row - 1

Je suis preneur d'explications ^^, car en comprenant la ligne, je m'améliore plus qu'en copiant ^^

J'ai un deuxième souci :

Cette macro va me servir a récupérer des datas rapidement sans avoir à chercher et a répéter l'opération.

Cependant, je dois récupérer ces données de la même manière, mais dans plusieurs classeurs différents ! Mais il faut pour que la macro fonctionne que le nom du classeur soit toujours le même ce qui m'oblige a renommer mes classeurs à chaque fois ?

N'existerait-il pas un moyen d'ouvrir tous mes classeurs et de dire à la macro de passer sur tous les classeurs ouverts ?

Cordialement,

En gros, est-il possible de remplacer :

Windows("Fichier trace.csv").Activate

Par une ligne qui permets de lancer la macro sur tous les classeurs ouverts (quel que soit leur nom)

Le reste de mon code fonctionne et ressemble à ça :

With ActiveSheet

dl = .Cells(Rows.Count, 1).End(xlUp).Row

derlig = .Range("A11").Resize(dl, 1).Find("-------- Etape 2 : Génération", LookIn:=xlValues, lookat:=xlPart).Row - 1

.Range(.Range("A11"), .Cells(derlig, 1)).Copy

Windows("DATATRACES.xlsm").Activate

Do

ActiveCell.Offset(1, 0).Select

Loop Until IsEmpty(ActiveCell)

ActiveSheet.Paste

End With

MERCI POUR VOTRE AIDE

Bonjour,

Si vous voulez progresser en VBA, n'hésitez surtout pas à utiliser l'aide intégrée et en ligne ! Je le fais tout le temps. Je m'explique :

Vous sélectionnez la fonction encadrant ce qui vous intrigue, en l'occurence le mot "Find" dans le code de h2so4, puis appuyez sur "F1". Ca va vous emmener directement sur la page d'explication :

Range.Find method (Excel) | Microsoft Learn

Et là vous pourrez voir que LookIn est un paramètre qui indique où regarder, et LookAt comment regarder.

Parfois l'aide peut buguer, n'hesitez pas a entrer simplement sur google votre recherche par exemple "range find xlPart" vous allez trouver de nombreuses explications vraiment très bien faites. J'utilise beaucoup VBA Find Range: How to Search for a Value in Excel Using VBA - Automate Excel par exemple.

Pour ce code, la fonction Find cherche la string "Etape 2" dans les valeurs des cellules de la Range sur laquelle elle s'applique (.Range("A11").Resize(dl, 1)), en regardant les valeurs (xlValues) des cellules contenues dans cette range, et en ne cherchant pas une correspondance exacte, mais simplement une "partie" du contenu de la cellule (xlPart). Donc elle va trouver la 1e cellule qui contient "Etape 2" dans la colonne A11:A…

Pour votre seconde question c'est possible d'automatiser VBA pour ouvrir tous les fichiers dans un dossier par exemple.

Il y a plusieurs manières de faire, par exemple

Manipulez des fichiers avec VBA - Analysez vos données avec VBA - OpenClassrooms

Mais vous devriez considérez l'utilisation de PowerQuery, plus adapté au traitement des CSV que le "vieux" VBA.

Importer des données à partir d’un dossier contenant plusieurs fichiers (Power Query) - Support Microsoft

Rechercher des sujets similaires à "copier lignes trouver valeur donnee"