Recherche + Collage

Bonjour à tous,

Je dois créer une macro me permettant de chercher un ensemble de termes prédéfinis dans un tableau Excel constructeur (tableau du type : colonne1 : Matériau, colonne 2 : référence, colonne 3 : tests réalisés) et capable de copier une partie des lignes où appartiennent ces mots dans un autre tableau appartenant à un autre classeur. (ex : je cherche a copier seulement "Aluminium", "C35" et "Emboutissage")

Vous trouverez mon code ci-dessous, ce sera plus facile pour comprendre.

Mon soucis est que je n'arrive pas a sélectionner seulement une partie de la ligne où appartient le mot trouvé.

Je dois copier la ligne entière pour que mon programme fonctionne. Ce qui pose des problèmes de mise en page, etc ...

Merci pour votre aide !

Voici mon code :

Option Base 1

Sub Programme()

Dim n As Byte

Dim j As Byte

Dim chaine(10) As String

Dim ChaineActuelle As String

j = 1

n = 2

'Déclaration du tableau Chaine

chaine(1) = "Céramique" 'Ensemble des termes que l'on va chercher (dans cet ordre) dans le tableau du

chaine(2) = "Bois de chêne" 'constructeur pour coller les lignes auxquelles ils appartiennent dans

chaine(3) = "Titane" 'le tableau d'arrivée

chaine(4) = "Aluminium"

chaine(5) = "Inox"

For j = 1 To 5

ChaineActuelle = chaine(j) 'On affecte à la variable ChaineActuelle la "chaine(1)" qui va s'incrémenter à chaque tour de la boucle (chaine(2) puis chaine(3),etc...)

Set mot = Cells.Find(what:=ChaineActuelle) 'Fonction Excel permettant de rechercher le mot dans le tableau du constructeur

If mot Is Nothing Then

Range("A12000:F12000").Copy 'Dans le cas ou aucun resultat n'est trouvé, je colle une ligne blanche dans mon tableau d'arrivée

Workbooks("Excel_de_destination").Worksheets("Feuille_de_destination").Rows(n).Paste 'On colle la ligne dans le tableau d'arrivée

n = n + 1 'On incrémente la valeur de n pour pouvoir copier une ligne plus bas dans notre tableau d'arrivée la ligne correspondant au mot recherché suivant

Else

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

Workbooks("Excel_de_destination").Worksheets("Feuille_de_destination").Rows(n).Paste 'On colle la ligne dans le tableau d'arrivée

n = n + 1 'On incrémente la valeur de n pour pouvoir copier une ligne plus bas dans notre tableau d'arrivée la ligne correspondant au mot recherché suivant

End If

Next

End Sub

Bonjour,

sans chercher à optimiser le code, remplacez la ligne :

mot.EntireRow.Copy

Par le code suivant

range("A"& mot.row & ":C" & mot.row).copy

Dans le cas où les données que vous voulez copier sont dans les colonnes A, B et C.

Maintenant, sans fichier...

Cordialement

bonjour

salut besoin_d_aide

pourquoi ne pas essayer RECHERCHEV() ?

très puissant lorsqu'il suffit de rapatrier des données d'un tableau dans un autre

pas de VBA

Merci beaucoup pour ta réponse !

Ta ligne de code m'aide énormément !

Je n'ai plus qu'un soucis qui doit venir de mon "Rows(n).Paste" :

Pour une ligne sélectionnée contenant un mot clé recherché, le programme copie/colles les cellules de la colonne "A" à la colonne "E" (soit 5 cellules, j'ai modifié un peu mon tableau d'exemple) en boucle dans mon tableau d'arrivée (de façon horizontale) jusqu'à la colonne "XFD"

J'envoie une capture d'écran en pièce jointe pour te montrer à quoi ressemble ce problème. Ce sera plus facile a comprendre

Malheureusement je ne peux pas donner mon fichier original, celui-ci étant confidentiel, mais je fournis en pièce jointe un exemple simplifié et similaire.

capture

Bonjour jmd,

j'ai aussi essayé de passer par la fonction RECHERCHEV()

Le soucis dans mes souvenirs était que les éléments devaient être triés par ordre alphabétique.

Un autre problème vient du fait que le code que je vous ai montré ici fait partie d'une macro plus importante. Je dois donc obligatoirement passer par VBE.

J'ai également essayé d'utiliser la fonction RECHERCHEV en VBE avec l'équivalent "VLookUp()" mais malheureusement je bloque pour le collage (VLookUp ne renvoie pas un objet Range qui peut être copié/collé).

A l'heure actuelle je ne sais toujours pas s'il vaut mieux passer par un ".Find" ou un "VLookUp()" sous VBE.

En espérant que vos lumières m'éclairent

re

quel est le BUT de ton ensemble de fichiers ?

qui fait quoi dans ces fichiers ?

ne peut-on pas travailler avec Power Query pour récupérer des données venant d'une saisie en fichiers séparés ?

Re,

Essaye ce code à la place:

dim lig as long
lig = Workbooks("Excel_de_destination").Worksheets("Feuille_de_destination").range("a" & rows.count).end(xlup).Row
Workbooks("Excel_de_destination").Worksheets("Feuille_de_destination").range(lig & ":" &  lig).pastespecial

Cordialement

Jmd voici plus d'informations

Le but de ma macro générale est le suivant :

L'utilisateur clique sur le bouton de ma macro situé dans le classeur Excel "Excel_de_destination".

La macro ouvre l'explorateur de fichiers pour que l'utilisateur sélectionne le fichier Excel du constructeur.

une fois ce fichier ouvert, la macro cherche un terme (exemple chaine(1)="céramique") puis sélectionne la ligne où se trouve ce terme dans mon tableau et copie/colle les éléments de cette ligne qui m'intéresse (exemple Range("A36:E36") , j'ai donc dans mon tableau d'arrivée : "céramique", sa référence, le test réalisé, la réussite du test et le prochain test, et on s'arrête là parce que je ne veux pas copier la cellule "personne en charge du test" dans mon tableau d'arrivée, d'où le problème que me posait "mot.EntireRow.copy").

On réitère l'opération pour la chaine suivante, jusqu'à la dernière chaine de mon tableau VBE.

Une fois tous les éléments copiés/collés dans mon classeur "Excel de destination", ma macro ouvre deux documents Word et copie/colle les éléments de ce classeur dans les signets de mes documents Word.

Fin de la macro.

En ce qui concerne Power Query, je ne sais pas du tout de quoiil s'agit malheureusement

re

je voulais connaître ton but à toi et non le but d'une macro

on supposera que tu veux visualiser une synthèse des nouveautés de révisions, lesquelles te sont fournies sous forme Excel en colonnes simples.

PQuery ; Excel menu Données "récupérer" obtenir à partir d'un fichier/d'un dossier

ceci te récupère toutes les données de tous les fichiers contenus dans un dossier !

même des milliers de fichiers, des milliers de lignes et de colonnes !

ensuite, tu fais un tri/filtre pour ne visualiser que les dernières nouveautés.

J'ai essayé les nouvelles lignes de codes que tu m'as proposé besoin_d_aide mais malheureusement mon programme colle tous les éléments précédents copiés sur la première ligne de mon tableau jusqu'à la colonne XFD.

Re,

Essaye ce code à la place:

dim lig as long
lig = Workbooks("Excel_de_destination").Worksheets("Feuille_de_destination").range("a" & rows.count).end(xlup).Row
Workbooks("Excel_de_destination").Worksheets("Feuille_de_destination").range(lig & ":" &  lig).pastespecial

Cordialement

Salut Besoin_d'aide,

je ne sais pas si tu avais lu mon autre message, mais malheureusement j'avais un problème avec ces nouvelles lignes de codes que tu m'as proposé.

Par contre en m'inspirant de ta ligne de code magique

range("A"& mot.row & ":C" & mot.row).copy 

j'ai réussi a résoudre mon problème de collage en écrivant

Workbooks("Excel_de_destination").Worksheets("Feuille_de_destination").Range("A" & n & ":C" & n).PasteSpecial
n=n+1

Donc merci Enormément pour ton aide !!

Re,

De rien, de toute façon tu as fait une grande partie du travail...

Bonne continuation !

Rechercher des sujets similaires à "recherche collage"