Récupérer des données à partir du mot trouvé grâce à la fonction .Find

Bonjour,

Je suis actuellement entrain de réaliser une macro, qui me permettrait de récupérer des données pertinentes en fonction d'un mot que lui ai demandé de chercher.

Voici une impression écran de ma feuille Excel et des données en questions :

test

Prenons l'exemple de la personne JEAN. Si la macro trouve le mot ">limite" sur la feuille Excel, j'aimerai qu'il copie sur cette ligne la valeur de la première cellule "A9" (en rouge), la valeur de la deuxième cellule "B9" (en bleu) et la valeur de la troisième cellule la plus haute (en vert : le nom de la personne) et qu'il me copie respectivement ces données sur une autre feuille Excel. Ceci à chaque fois qu'il trouve le mot ">limite".

J'aimerai avoir en terme de résultats : la valeur de R, la valeur de T et le nom de la personne sur une ligne.

Voici ce que j'ai fais jusqu'à présent :

Je récupère toute les lignes avec le mot ">limite"

Bonjour,

coupure de courant ?!

On dirait qu'il manque un bout à votre message...

@ bientôt

LouReeD

Bonjour,

Salut LouReeD

Une proposition à étudier

Cordialement

Bonjour,

Merci pour l'exemple, je vais étudier ça.

Vous portez bien votre nom besoin_d_aide !

Bravo !

@ bientôt et je vous fait signe si j'ai.....

LouReed

Bonjour SpaceX, LouReeD, bonjour le forum,

Rien de plus pénible que de travailler à partir d'une capture d'écran alors qu'il est tout aussi facile de proposer le fichier !... Ça nous oblige à tout réécrire pour tester la proposition et, en plus, il faut souvent que le demandeur fasse des ajustements du code. Donc, SpaceX pour la prochaine fois je te conseille vivement de mettre le fichier et pas sa photo !...

Sub Macro1()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim R As Range 'déclare la variable R (Recherche)
Dim PA As String 'déclare la variable PA (Première Adresse)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)

Set OS = Worksheets("Feuil1") 'définit l'onglet source OS (à adapter à ton cas)
Set OD = Worksheets("Feuil2") 'définit l'onglet destination OD (à adapter à ton cas)
Set R = OS.Columns(5).Find(">limite", , xlValues, xlWhole) 'définit la recherche R (recherche les occurrences de ">limite" dans la colonne 5 (=E) de l'onglet source OS
If Not R Is Nothing Then 'condition : s'il existe au moins une occurrence
    PA = R.Address 'définit l'adresse PA de la première occurrence trouvée
    Do 'exécute
        'définit la cellule de destination DEST (A1 si A1 est vide, sinon la première cellule vide de la colonne A de l'onglet destination OD)
        If OD.Range("A1").Value = "" Then Set DEST = OD.Range("A1") Else Set DEST = OD.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0)
        DEST.Value = Mid(OS.Cells(R.Row, 1).Value, 3) 'récupère les numéros de R
        DEST.Offset(0, 1).Value = Mid(OS.Cells(R.Row, 2), 3) 'récupère les numéros de T
        DEST.Offset(0, 2).Value = OS.Cells(R.Row - 2, 1) 'récupère le nom
        Set R = OS.Columns(5).FindNext(R) 'redéfinit la recherche R (occurrence suivante)
    Loop While Not R Is Nothing And R.Address <> PA 'boucle tant qu'il existe de nouvelles occurrences ailleurs qu'en PA
End If 'fin de la condition
End Sub

[Édition]

Ooops ! 'ach'ment en r'tard moi... Bonjour BDA.

Bonjour,

attention au diminutifs !

BDA, c'est un surnom que l'on a donné à une personne qui multipliait (à ses dires) les conquêtes !

@ bientôt

LouReeD

Re,

Je viens de tester vos deux programmes qui fonctionne bien. Cependant, j'ai encore un petit soucis lorsque je récupère le nom de la personne. En effet, le nom de la personne n'est pas forcément 2 ligne au dessus du mot qu'il à trouvé (il n'est pas statique), parfois j'ai plusieurs lignes avec les dimensions R et T qui sont présents.

Si je prend cette exemple :

Jean

date aujourd'hui 13 6 2018

R=55 T=70

R=45 T=13 >limite

R=12 T=3

Thomas

date aujourd'hui 13 6 2018

R=55 T=70 >limite

Je vais obtenir :

45 13 date aujourd'hui 13 6 2018

55 70 Thomas

Or je dois obtenir ceci :

45 13 Jean

55 70 Thomas

Je ne sais pas si j'ai été assez explicite...

Re,

Pas de fichier, pas de réponse... Même si j'avoue que là c'est très clair et ne le nécessite pas forcément...

Re,

Salut ThauThème

Dans ce cas, si il y a bien des lignes vides entre les différents nom comme dans l'exemple, alors essaye ça

Cordialement

Salut ThauThème,

Re, besoin_d_aide,

Désolé, voici mon fichier Excel avec en Feuil1 les données de base et la Feuil2, le résultats que je souhaite obtenir.

4classeur1.xlsx (8.89 Ko)

Re,

Le code adapté :

Sub Macro1()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim R As Range 'déclare la variable R (Recherche)
Dim PA As String 'déclare la variable PA (Première Adresse)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
Dim N As String 'déclare la variable N (Nom)

Set OS = Worksheets("Feuil1") 'définit l'onglet source OS (à adapter à ton cas)
Set OD = Worksheets("Feuil2") 'définit l'onglet destination OD (à adapter à ton cas)
Set R = OS.Columns(5).Find(">limite", , xlValues, xlWhole) 'définit la recherche R (recherche les occurrences de ">limite" dans la colonne 5 (=E) de l'onglet source OS
If Not R Is Nothing Then 'condition : s'il existe au moins une occurrence
    PA = R.Address 'définit l'adresse PA de la première occurrence trouvée
    Do 'exécute
        'définit la cellule de destination DEST (A1 si A1 est vide, sinon la première cellule vide de la colonne A de l'onglet destination OD)
        If OD.Range("A1").Value = "" Then Set DEST = OD.Range("A1") Else Set DEST = OD.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0)
        DEST.Value = Mid(OS.Cells(R.Row, 1).Value, 3) 'récupère les numéros de R
        DEST.Offset(0, 1).Value = Mid(OS.Cells(R.Row, 2), 3) 'récupère les numéros de T
        N = OS.Cells(R.Row, 1).End(xlUp).Value 'récupère le nom
        N = Left(N, Len(N) - 4) 'enlève l'extension
        DEST.Offset(0, 2).Value = N 'récupère le nom
        Set R = OS.Columns(5).FindNext(R) 'redéfinit la recherche R (occurrence suivante)
    Loop While Not R Is Nothing And R.Address <> PA 'boucle tant qu'il existe de nouvelles occurrences ailleurs qu'en PA
End If 'fin de la condition
End Sub

Pour éviter de perdre du temps, essaie, à l'avenir, d'expliquer clairement ton problème...

Merci beaucoup !

Rechercher des sujets similaires à "recuperer donnees partir mot trouve fonction find"