Equivalent Crtl+F avec copie vers un autre classeur

Bonjour à tous,

Je suis débutant en VBA, et n'ayant trouvé la solution à mon problème nulle part, je vous demande votre aide !

Je cherche à effectuer le programme suivant :

1 - Ma macro doit me permettre d'effectuer l'équivalent d'un Ctrl+F Windows en appuyant sur un bouton (j'ai réussi cette étape ).

Je demande donc à l'utilisateur quel mot il veut rechercher dans la feuille Excel où se situe le bouton, et mon programme sélectionne la cellule où se trouve ce mot (si plusieurs résultats, les cellules sont sélectionnées les unes après les autres jusqu'au retour au premier résultat trouvé).

2- Je cherche à copier la ligne du tableau où se situe le mot recherché (Classeur Excel_de_départ) dans un autre classeur (Classeur Excel_de_destination).

Mes problèmes sont les suivants :

  • Mon programme actuel me permet de copier/coller le mot recherché et non la ligne entière où il se situe. (J'ai beau essayer je n'y arrive pas )
  • Lorsque le mot recherché fait partie d'une cellule fusionnée, mon programme sélectionne bien la cellule en entier mais ne copie qu'une partie de la cellule, sans réussir à la coller dans l'autre classeur.
  • Il faudrait que le bouton qui lance ma macro se situe dans le Classeur "Excel_de_destination" et non dans le Classeur "Excel_de_départ".
  • Je dois créer plusieurs boutons associés a des modules différents pour remplir chaque ligne de mon tableau en changeant à chaque fois la cellule d'arrivée (je voudrais demander à l'utilisateur une liste des mots qu'ils souhaite rechercher et que ma macro colle (dans l'ordre de saisie de l'utilisateur) les lignes où se trouvent ces mots directement dans mon tableau d'arrivée.

Je vous envoie en pièce jointe mon code et mes fichiers Excel ! (N'étant pas sûr que vous puissiez accéder à mon code avec ces fichiers je vous envoie aussi un Word avec mon code à l'intérieur)

Merci beaucoup pour vos réponses !

3programme.docx (12.48 Ko)

Bonjour

Intéresse-toi à EntireRow

Quand on fait un pasteSpecial il est bien de préciser les spécificités de ce qu'on paste sinon paste suffit

La copie du contenu d'une cellule fusionnée se passe normalement et prend tout mais c'est le collage qui pose problème

Les cellules fusionnées posent des tas de problème mais en général on peut s'en passer...

Bonjour

Intéresse-toi à EntireRow

Quand on fait un pasteSpecial il est bien de préciser les spécificités de ce qu'on paste sinon paste suffit

La copie du contenu d'une cellule fusionner se passe normalement et prend tout mais c'est le collage qui pose problème

Les cellules fusionnées posent des tas de problème mais en général on peut s'en passer...

Merci pour le conseil je vais me pencher là dessus !

Je viens d'appliquer la propriété EntireRow à mon programme en faisant "Mot.EntireRow.Copy" et tout fonctionne correctement !

Merci encore @78chris.

Grâce à ton aide j'ai pu résoudre mes deux premiers problèmes !

Pour ceux qui seraient amenés à lire ce sujet dans le but d'écrire un programme similaire, j'ai réussi à résoudre mon 3ème problème avec la ligne de code : Windows("Excel_de_départ.xlsm").Activate

Sans doute évidente pour certains mais quand on débute comme moi, ça ne l'est pas

Mon programme devient donc :

Sub Programme()

Dim chaine As String 'ou Dim chaine as Variant si lettres ET chiffres

Windows("Excel_de_départ.xlsm").Activate

On Error Resume Next 'Pour ne rien supprimer en cas d'Echap ou d'annuler

chaine = InputBox("Mot à trouver :") 'On demande à l'utilisateur quel mot il veut rechercher

If chaine = "" Then Exit Sub 'Dans le cas où l'utilisateur ne rentre rien dans la barre de recherche, on quitte la macro

Set Mot = Cells.Find(What:=chaine) 'Fonction Excel permettant de rechercher le mot dans le tableur

If Not Mot Is Nothing Then

Mot.EntireRow.Select 'On sélectionne la ligne entière où se situe le mot (ligne de code pouvant être supprimée mais permettant une meilleure visibilité de la ligne du mot trouvé)

Mot.EntireRow.Copy 'On copie la ligne entière où se situe le mot recherché

Workbooks("Excel_de_destination").Worksheets("Feuil1").Rows("4").PasteSpecial 'On colle la ligne précédemment copiée à la ligne 4 de la feuille1 du classeur "Excel de destination"

End If

firstAddress = Mot.Address 'On enregistre sous la variable "firstAdress" les coordonées du premier résultat obtenu (utile pour ne pas faire les résultats en boucle une fois qu'ils sont tous trouvés)

Do

k = k + 1 'k est un compteur qui prend la valeur +1 à chaque fois que l'on trouve le mot recherché dans le tableur

Set Mot = Cells.FindNext(Mot) 'Fonction Excel permettant de chercher les autres résultats du même mot dans le tableau

If Mot Is Nothing Or Mot.Address = firstAddress Then MsgBox "Tous les résultats ont étés trouvés" & vbCrLf & "Fin des recherches": Exit Sub

'la ligne ci-dessus indique : si le mot trouvé n'existe pas ou que l'on revient au premier élément touvé dans notre recherche,

'on affiche à l'utilisateur "Tous les résultats ont étés trouvés" suivi de "fin des recherches" et on quitte la macro

MsgBox "Cliquez sur OK pour afficher le résultat suivant"

Mot.EntireRow.Select

Mot.EntireRow.Copy

Workbooks("Excel_de_destination").Worksheets("Feuil1").Rows("4").PasteSpecial

Loop While (Not Mot Is Nothing) And (Mot.Address <> firstAddress)

End Sub

Bonjour

Comme déjà dit Pastespecial ne sert à rien, Paste suffit puisque tu ne précises aucune spécificité...

On n'est pas obligé non plus d'activer chaque classeur : il suffit de préciser à quel classeur appartiennent les feuilles et autres objets manipulés comme tu l'as fait sur certaine lignes.

Voir With End With pour faciliter cela

Rechercher des sujets similaires à "equivalent crtl copie classeur"