Recherche + Collage Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
A
Arthur1508
Jeune membre
Jeune membre
Messages : 29
Appréciation reçue : 1
Inscrit le : 24 mai 2018
Version d'Excel : 2016FR

Message par Arthur1508 » 11 juin 2018, 11:54

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
Modifié en dernier par Arthur1508 le 11 juin 2018, 15:59, modifié 1 fois.
Avatar du membre
besoin_d_aide
Membre fidèle
Membre fidèle
Messages : 325
Appréciations reçues : 28
Inscrit le : 16 mai 2018
Version d'Excel : 2010 fr, 2013 fr, 2016 fr

Message par besoin_d_aide » 11 juin 2018, 14:06

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... :bof:

Cordialement
" Notre sagesse n'est que le total de nos désillusions. " Henri-Frédéric Amiel
Je peux répondre aux messages privés mais c'est mieux si la solution est disponible pour tous ;;)
Mais surtout, le plus important : :btres:
j
jmd
Fanatique d'Excel
Fanatique d'Excel
Messages : 10'603
Appréciations reçues : 251
Inscrit le : 8 décembre 2007
Version d'Excel : 365 + PowerBI

Message par jmd » 11 juin 2018, 14:37

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
Apprenez les fonctions d'Excel.
Exemple "Mettre sous forme de tableau", TCD, "Récupérer des données".
Apprendre les fonctionnalités "récentes".
A
Arthur1508
Jeune membre
Jeune membre
Messages : 29
Appréciation reçue : 1
Inscrit le : 24 mai 2018
Version d'Excel : 2016FR

Message par Arthur1508 » 11 juin 2018, 15:41

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.PNG
Excel_Constructeur.xlsx
(9.28 Kio) Téléchargé 5 fois
Excel de destination.xlsx
(9.23 Kio) Téléchargé 4 fois
A
Arthur1508
Jeune membre
Jeune membre
Messages : 29
Appréciation reçue : 1
Inscrit le : 24 mai 2018
Version d'Excel : 2016FR

Message par Arthur1508 » 11 juin 2018, 15:53

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 :mrgreen:
j
jmd
Fanatique d'Excel
Fanatique d'Excel
Messages : 10'603
Appréciations reçues : 251
Inscrit le : 8 décembre 2007
Version d'Excel : 365 + PowerBI

Message par jmd » 11 juin 2018, 15:56

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 ?
Apprenez les fonctions d'Excel.
Exemple "Mettre sous forme de tableau", TCD, "Récupérer des données".
Apprendre les fonctionnalités "récentes".
Avatar du membre
besoin_d_aide
Membre fidèle
Membre fidèle
Messages : 325
Appréciations reçues : 28
Inscrit le : 16 mai 2018
Version d'Excel : 2010 fr, 2013 fr, 2016 fr

Message par besoin_d_aide » 11 juin 2018, 16:00

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
" Notre sagesse n'est que le total de nos désillusions. " Henri-Frédéric Amiel
Je peux répondre aux messages privés mais c'est mieux si la solution est disponible pour tous ;;)
Mais surtout, le plus important : :btres:
A
Arthur1508
Jeune membre
Jeune membre
Messages : 29
Appréciation reçue : 1
Inscrit le : 24 mai 2018
Version d'Excel : 2016FR

Message par Arthur1508 » 11 juin 2018, 16:15

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 :bof:
j
jmd
Fanatique d'Excel
Fanatique d'Excel
Messages : 10'603
Appréciations reçues : 251
Inscrit le : 8 décembre 2007
Version d'Excel : 365 + PowerBI

Message par jmd » 11 juin 2018, 16:21

re

je voulais connaître ton but à toi et non le but d'une macro :wink:
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.
Apprenez les fonctions d'Excel.
Exemple "Mettre sous forme de tableau", TCD, "Récupérer des données".
Apprendre les fonctionnalités "récentes".
A
Arthur1508
Jeune membre
Jeune membre
Messages : 29
Appréciation reçue : 1
Inscrit le : 24 mai 2018
Version d'Excel : 2016FR

Message par Arthur1508 » 11 juin 2018, 16:51

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.
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message