Recherche un mot et copie des valeurs 2nd colonne, méthode find

Résolu/Fermé
jpub Messages postés 43 Date d'inscription mardi 10 mai 2011 Statut Membre Dernière intervention 19 janvier 2016 - Modifié par jpub le 10/01/2016 à 16:54
jpub Messages postés 43 Date d'inscription mardi 10 mai 2011 Statut Membre Dernière intervention 19 janvier 2016 - 19 janv. 2016 à 17:05
Bonjour,

Je suis en train de faire de tableau de consolidation des plusieurs onglets.
Dans ce cadre j'arrive sans problème à récupérer les infos sur les pages et à les reporter sauf pour une valeur qui n'est pas placé au même endroit dans chaque onglet.

Pour cela j'essaye la formule suivant mais ça ne marche pas je ne comprend pas pourquoi, pouvez vous m'aider ?


Range("R" & LastR).Value = Sheets(i).Range("D5:D100").Find(MEP, , xlValues, xlWhole, xlByColumns + 2 ).Value

le tableau est fait de la façon suivante

|.|A..... |B..........|C..........|D|
|1|NOM|DATE 1...|DATE 2..|D|
|2|MEP.|15/12/15|22/12/15|D|

je recherche donc la valeur MPE, qui ne peut être compris qu'entre les ligne D5 D100, une fois trouvé je récupère ses coorodonnée et je copie donc la valeur en colonne C ( xlByColumns + 2 ) et bien sur ça ne marche pas.

L'un de vous a-t-il une solution pour m'aider ?

ci-dessous le code en entier avec mon erreur ligne 28

en vous remerciant par avance

Sub ListePage()
Application.ScreenUpdating = False
With Sheets("HOME").ListObjects("DeOnT") 'je vide le tableau DeOnT
    If Not .DataBodyRange Is Nothing Then .DataBodyRange.Delete 
End With

Sheets("HOME").Select 'je selectionne la feuille dashboard

Dim LastR As Long
Dim subAss As String
Dim valCell As String
Dim CyViA As String
Dim Trouve As Range


For i = 4 To Sheets.Count 'je commence à prendre en compte les feuilles à partir de la 4ème 

subAdd = Sheets(i).Name & "!k2" 'permet de renommer l'onglet avec le nom en K2 de la feuille
valCell = Sheets(i).Range("k2").Value
LastR = Derniere_Ligne(ActiveSheet) + 1
    ActiveSheet.Hyperlinks.Add Anchor:=Range("C" & LastR), Address:="", SubAddress:=subAdd, TextToDisplay:=valCell 'nom de page + lien dans la tableau en HOME

Range("C" & LastR).Value = Sheets(i).Range("K2").Value 'numéro
Range("D" & LastR).Value = Sheets(i).Range("C2").Value 'titre
Range("F" & LastR).Value = Sheets(i).Range("E1").Value 'pourcentage
Range("G" & LastR).Value = Sheets(i).Range("M6").Value 'type
Range("R" & LastR).Value = Sheets(i).RangeD5:D100").Find(MEP, , xlValues, xlWhole, xlByColumns + 2 ).Value


Next 'Feuille Suivante
Application.ScreenUpdating = True
End Sub

Function Derniere_Ligne(Sh As Worksheet) As Long
Derniere_Ligne = Sh.Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row
End Function


A voir également:

4 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
11 janv. 2016 à 09:32
Bonjour,

Pour la syntaxe de la méthode find, voir ICI.
Sinon, utilisez Offset comme ceci :
Range("R" & LastR).Value = Sheets(i).Range("D5:D100").Find(MEP, , xlValues, xlWhole, xlByColumns).Offset(0, 2).Value  

0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 11/01/2016 à 09:52
bonjour
xlbycolumns est l'ordre de recherche (colonne par colonne ) et ne sert à rien dans une recherche sur 1 colonne

mais il y a d'autre choses bizarres dans cette ligne
faute de syntaxe
Range("R" & LastR).Value = Sheets(i).Range("D5:D100").Find("MEP",range("D4") , xlValues, xlWhole).address

address car tu as marqué :"je récupère ses coorodonnée "

actuellement la valeur dans la cellule R est si on trouve MEP en ligne 32 par exemple, la valeur inscrite en R32 est : $D$32

mais tu dis vouloir donner la valeur en colonne C



 Michel
0
jpub Messages postés 43 Date d'inscription mardi 10 mai 2011 Statut Membre Dernière intervention 19 janvier 2016 1
11 janv. 2016 à 13:39
Bonjour,

Merci de votre aide, je n'aurais pas accès à mon fichier avant Mercredi , je reviens donc vers vous à cette date.

Encore Merci

Jonathan
0
jpub Messages postés 43 Date d'inscription mardi 10 mai 2011 Statut Membre Dernière intervention 19 janvier 2016 1
19 janv. 2016 à 17:05
Bonjour,

Encore merci pour votre aide, j'ai pu m'en sortir en modifiant sans vraiment comprendre pourquoi ça marche le code que vous m'avez donné (ligne 29 et 31).

Cela donne

Sub ListePage()
Application.ScreenUpdating = False
With Sheets("HOME").ListObjects("Devoirs") 'je vide le tableau devoirs
    If Not .DataBodyRange Is Nothing Then .DataBodyRange.Delete
End With

Sheets("HOME").Select 'je selectionne la feuille dashboard

Dim LastR As Long
Dim subAss As String
Dim valCell As String
Dim CyViA As String
Dim Trouve As Range

For I = 4 To Sheets.Count

subAdd = Sheets(I).Name & "!k2"
valCell = Sheets(I).Range("k2").Value
LastR = Derniere_Ligne(ActiveSheet) + 1
    ActiveSheet.Hyperlinks.Add Anchor:=Range("C" & LastR), Address:="", SubAddress:=subAdd, TextToDisplay:=valCell 'nom de page + lien

Range("C" & LastR).Value = Sheets(I).Range("K2").Value 'numéro d opé
Range("D" & LastR).Value = Sheets(I).Range("C2").Value 'titre d opé
Range("F" & LastR).Value = Sheets(I).Range("E1").Value 'pourcentage
Range("G" & LastR).Value = Sheets(I).Range("M6").Value 'type d'opé
Range("H" & LastR).Value = Sheets(I).Range("M11").Value 'resp. commercial
Range("I" & LastR).Value = Sheets(I).Range("E5").Value 'Date de début
Range("P" & LastR).Value = Sheets(I).Range("D5:D100").Find(MEP, , xlValues, xlWhole).Offset(-2, 2).Value
Range("R" & LastR).Value = Sheets(I).Range("D5:D100").Find(MEL, , xlValues, xlWhole).Offset(-1, 2).Value

DLig = 1 + Application.WorksheetFunction.CountIf(Sheets(I).Range("G4:G100"), "x") 'cycle de vie
 Range("J" & LastR).Value = Sheets(I).Cells(DLig + 4, 4).Value 'cycle de vie actuel nom
 Range("K" & LastR).Value = Sheets(I).Cells(DLig + 4, 6).Value 'cycle de vie actuel date
 Range("M" & LastR).Value = Sheets(I).Cells(DLig + 5, 4).Value 'prochain cycle de vie actuel nom
 Range("N" & LastR).Value = Sheets(I).Cells(DLig + 5, 6).Value 'prochain cycle de vie actuel date
  
  Next 'Feuille Suivante
Application.ScreenUpdating = True
End Sub

Function Derniere_Ligne(Sh As Worksheet) As Long
Derniere_Ligne = Sh.Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row
End Function


encore merci à vous

Jonathan
0