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

Résolu
jpub Messages postés 43 Date d'inscription   Statut Membre Dernière intervention   -  
jpub Messages postés 43 Date d'inscription   Statut Membre Dernière intervention   -
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


4 réponses

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
  3. jpub Messages postés 43 Date d'inscription   Statut Membre Dernière intervention   1
     
    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
  4. jpub Messages postés 43 Date d'inscription   Statut Membre Dernière intervention   1
     
    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