[Résolu][Excel] Macro de recherche et remplacement

Salut les geeks codeurs,

Je n’ai jamais codé de ma vie avant ce matin, et je me rends compte que c’est pas facile. Je vais rattraper le retard, mais là pour le coup j’ai pas le temps, est-ce qu’une gentille âme saurait me faire une macro excel (VBA donc) qui fait :

1 - Recherche d’un mot dans un classeur
2 - Sélection de la ligne où se trouve le mot
3 - Copie de cette ligne
4 - Passe sur une autre feuille ou un autre classeur, peu m’importe
5 - Colle cette ligne
6 - Recommence jusqu’à la fin du classeur.

En gros j’ai 800 lignes, et j’aimerais pouvoir les trier selon ce qui se trouve dans la colonne B pour en faire des feuilles différentes, rangées par infos similaires en B (un bouton “tri des lignes par ordre alphabétique” en clic droit sur une colonne était mon rêve).

Merci d’avance !

Roh je l’ai juste déjà fait :). J’ai même des tas d’exemples sur commentcamarche and co, aucune ne fonctionne parce que ce sont des noobs comme moi qui les proposent et qui essaient des les débugger… d’où mon post ici.

Puis le premier site dit exactement ce que je veux pas pour une bête macro :

La commune : galèrer - Bouquins, prise de tête, consultation de l’aide d’Excel, les jours qui passent, le code qui n’avance pas. Lot quotidien de beaucoup de programmeurs amateurs.

Ca c’est un travail pour super stagiaire :stuck_out_tongue: (sorry)

100% vrai cela dit :).
Mais le stagiaire non geek aurait tout fini à la main depuis le temps que je passe à essayer de faire une macro fonctionnelle :ninja:

Pour l’instant j’ai un truc, mais ça ne passe jamais à l’occurrence suivante et quand je le fais à la main, ça me copie toujours sur la ligne 1 de la deuxième feuille, donc ça erase celle d’avant. Et c’est pas automatique sur toute la feuille en une fois.

[code]Sub Macro3()

’ Macro3 Macro
’ Macro enregistrée le 12/08/2010 par n122195


Cells.Find(What:=« TERME A CHERCHER », After:=ActiveCell, LookIn:= _
xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=False, SearchFormat:=False).Activate
ActiveCell.Rows(« 1:1 »).EntireRow.Select
Selection.Copy
Sheets(« FEUILLE CIBLE »).Select
ActiveSheet.Paste
Sheets(« RETOUR FEUILLE SOURCE »).Select
End Sub[/code]

Rah, des vieux souvenirs de stage de première année ;___;. A l’époque, je faisais une petite boucle sur la première page pour stocker la ligne en cours et dès que ça trouvais le caractère, ça faisait une autre petite boucle qui stockait en mémoire la ligne de la page 2. Mais me remettre au VBA, qui plus est dans un IDE qui fait pas d’auto complétion, je me sens plus le courage de le faire :frowning:

Je croyais avoir trouvé mon salut dans “Données/Trier”, mais il réorganise la colonne A par ordre alphabétique, sans prendre en compte que A et B sont liées. Je comprends pas pourquoi les administrations persistent à vouloir faire des opérations sur du texte sur un tableur… ça serait tellement plus simple s’il existait un outil pour faire des tableaux administratifs et non de comptabilité, avec toutes les options qui vont avec. Grr.

Edit : je suis con, il suffisait de sélectionner les lignes et non les colonnes. Problem (partly) solved.
Si “pour le fun” et ma culture quelqu’un avait une correction à ma macro, qu’il n’hésite pas.

et la fonction RECHERCHEV() ?

Pourquoi tu ne poses pas la question chez developpez.com ?

Ce sont des passionnés là-bas, t’en a bien un qui va te pondre ta macro. �?a parait pas bien dur. Parce qu’ici, les gens sont feignants :lol: Oh on se calme, si on peut plus taquiner !

J"ai pas exel et j’ai pas fait de VBA debuis un bail mais je peut de donner quelque pistes

  1. tu doit faire une boucle pour repeter l’operation de recherche
  2. tu doit utiliser un variable qui s’incrementera a chaque iteration de cette boucle pour coller ton resultat dans un autre ligne

en mode bourrin et pas exact ca doit donner

[code]Sub Macro3()

’ Macro3 Macro
’ Macro enregistrée le 12/08/2010 par n122195

'
Dim i AsInteger

For i = 1 To 100
Cells.Find(What:="TERME A CHERCHER", After:=ActiveCell, LookIn:= _
    xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:= _
    xlNext, MatchCase:=False, SearchFormat:=False).Activate
 ActiveCell.Rows("1:1").EntireRow.Select
 Selection.Copy
 Sheets("FEUILLE CIBLE").Select
 'ici faut chopper la ligne de numero i je fait de la syntaxe au pif
 ActiveSheet.Rows(i+":"+i).EntireRow.Select
 Selection.past
 Sheets("RETOUR FEUILLE SOURCE").Select
Next i

End Sub[/code]

Apres ca marche uniquement si la fonction de recherche se souvient de ou elle en etait et ne revient au debut de la recherche a chaque fois .Essaye de debuger en pas a pas ta macro pour voir ce qui cloche.

J’ai été ce stagiaire…

Bon je suis pas le seul avec un boulot ingrat c’est déjà ça :). Mais en fait ça me fait presque moins chier de passer du temps à m’initier au codage de macro que tout trier à la main…
Merci les 3 derniers, je vais tester tout ça demain.

Quelques pistes vite fait comme ça.

Pour ta 2e page tu peux trouver ta première ligne vide comme ça

dim lngRow as long

lngRow = Cells(65000, 1).End(xlUp).Row + 1
cells(lngRow,1).select
selection.paste

Cells(65000, 1).End(xlUp).Row part du bas de ta page et remonte jusque a trouver une cellule avec des données d’ou le +1 pour te positionner a la ligne suivante.

Pour le find pour l’occurrence suivante tu dois utiliser findnext. Une autre solution serait de construire une variable range contenant toute ta colonne ou tu dois chercher ton mot et de boucler dessus avec un for each. Si t’as pas trouvé de solution d’ici demain je peux essayer de te pondre une mavro de chez moi demain mais today je suis au taf donc pas trop le temps.

C’est gentil, j’ai solutionné le problème, je n’oserai abuser de ton temps :).
J’ai opté pour une solution hybride macro + fignolage à la main, c’est assez rapide.