IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Macro Recherche V

  1. Guib83
    Guib83
    Bonjour à tous,

    Je souhaiterai réaliser une macro qui me permette d'éffectuer une recherche V sous Excel 2010.

    J'ai commencé à programmer quelque chose mais je ne suis pas au top...

    J'ai 2 feuilles excel, une "Datasource" et une "Research". Je veux que la recherche me retrouve les informations des colonnes B à D de la feuille "Datasource" et me les retranscrive dans la feuille "Research" à partir du moment ou je rentre une référence matériel dans la colonne A.

    Sub Recherchev()
    '
    ' Recherchev Macro
    '
    Dim FeSource As Worksheet
    Dim FeDest As Worksheet
    Dim PlgSource As Range
    Dim PlgDest As Range
    Dim Cel As Range
    Dim Ligne As Long


    Set FeSource = Worksheets("Datasource")
    Set FeDest = Worksheets("Research")


    With FeSource

    Set PlgSource = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp))

    End With

    With FeDest

    Set PlgDest = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp))

    End With



    Je ne sais pas comment finir le code ... Pourriez-vous m'aider?

    D'avance merci
  2. ldcg06277
    ldcg06277
    bonsoir,
    extrait de ma petite bibliothèque, 2 routines très pratiques à adapter selon l'usage Getv et Putv
    la recherche s'exécute sur des tableaux, bien plus rapides à parcourir que des cellules
    Sub GetV(Table_Array As Range, Etiquette_ColA As String, ValeurA As Variant, Etiquette_ColB As String, CelluleInfo As Variant, Optional CodeRetour As Boolean)
    ' inspiré de WorksheetFunction.VLookup
    ' Recherche une valeur (ValeurA) dans la première colonne (A) d'un tableau et
    ' renvoie une valeur (CelluleInfo) dans la même ligne dans une autre colonne (B) du tableau.
    ' ValeurA - valeur à rechercher dans la première colonne du tableau. ValeurA peut être une valeur ou une référence.
    ' Table_array - deux ou plusieurs colonnes de données. Utilisez une référence à une plage
    ' GetV LABASE, "COLONNE SOURCE", ValeurA, "COLONNE_CIBLE", CELLULE_CIBLE, CodeRetour


    Dim Montab As Variant
    Dim Lig As Long, Col As Long, ColA As Long, ColB As Long
    Dim LesLignes As Integer, LesColonnes As Integer

    CodeRetour = False
    Montab = Table_Array.value
    LesLignes = 1
    LesColonnes = 2

    If TypeOf ValeurA Is Range Then
    Lig = ValeurA.Row - Table_Array.Cells(1, 1).Row + 1
    CodeRetour = True
    Else
    ' Recherche de la première valeur dans la Colonne A -> on récupère la ligne
    For Col = LBound(Montab, LesColonnes) To UBound(Montab, LesColonnes)
    If Montab(LBound(Montab, 1), Col) = Etiquette_ColA Then
    'parcourir les cellules de la colonne A
    For Lig = LBound(Montab, LesLignes) To UBound(Montab, LesLignes)
    ' debug.print Montab(Lig, Col)
    If Montab(Lig, Col) = ValeurA Then
    'debug.print Montab(Lig, Col)
    CodeRetour = True
    Exit For
    End If
    Next Lig
    End If
    If CodeRetour = True Then Exit For
    Next Col
    End If

    If CodeRetour = False Then Exit Sub

    CodeRetour = False
    ' Recherche de la seconde colonne -> on récupère la colonne et on renvoie la valeur
    For Col = LBound(Montab, LesColonnes) To UBound(Montab, LesColonnes)
    If Montab(LBound(Montab, LesLignes), Col) = Etiquette_ColB Then
    If IsObject(CelluleInfo) Then 'test par isobject car l'objet passé en arg n'est pas encore initialisé
    Set CelluleInfo = Table_Array.Cells(Lig, Col)
    Else
    CelluleInfo = Table_Array.Cells(Lig, Col).value
    End If
    CodeRetour = True
    Exit For
    End If
    Next Col

    End Sub

    Sub PutV(Table_Array As Range, Etiquette_ColA As String, ValeurA As Variant, Etiquette_ColB As String, ValeurB As Variant, Optional CodeRetour As Boolean)
    ' Recherche une valeur (ValeurA) dans la première colonne (A) d'un tableau et
    ' Modifie la valeur (CelluleInfo) dans la même ligne dans une autre colonne (B) du tableau.
    ' ValeurA - valeur à rechercher dans la première colonne du tableau. ValeurA peut être une valeur ou une référence.
    ' Table_array - deux ou plusieurs colonnes de données. Utilisez une référence à une plage
    ' PutV LABASE, "COLONNE SOURCE", ValeurA ,"COLONNE_CIBLE", VALEUR_CIBLE, CodeRetour
    ' GetV LABASE, "COLONNE SOURCE", ValeurA, "COLONNE_CIBLE", CELLULE_CIBLE, CodeRetour

    Dim Montab As Variant
    Dim Lig As Long, Col As Long
    Dim ColA As Long, ColB As Long
    Dim LesLignes As Integer, LesColonnes As Integer

    CodeRetour = False
    Montab = Table_Array.value

    LesLignes = 1
    LesColonnes = 2

    If TypeOf ValeurA Is Range Then
    Lig = ValeurA.Row - Table_Array.Cells(1, 1).Row + 1
    CodeRetour = True
    Else
    ' Recherche de la valeur dans la Colonne A -> on récupère la ligne
    For Col = LBound(Montab, LesColonnes) To UBound(Montab, LesColonnes)
    If Montab(LBound(Montab, LesLignes), Col) = Etiquette_ColA Then
    'parcourir les cellules de la colonne A
    For Lig = LBound(Montab, LesLignes) To UBound(Montab, LesLignes)
    ' debug.print Montab(Lig, Col)
    If Montab(Lig, Col) = ValeurA Then
    'debug.print Montab(Lig, Col)
    CodeRetour = True
    Exit For
    End If
    Next Lig
    End If
    If CodeRetour = True Then Exit For
    Next Col
    End If

    If CodeRetour = False Then Exit Sub

    CodeRetour = False
    ' Recherche de la colonneB -> on récupère la colonne et on attribue la valeur à la cellule trouvée colonne B
    For Col = LBound(Montab, LesColonnes) To UBound(Montab, LesColonnes)
    If Montab(LBound(Montab, LesLignes), Col) = Etiquette_ColB Then
    If IsObject(ValeurB) Then 'test par isobject car l'objet passé en arg n'est pas encore initialisé
    Table_Array.Cells(Lig, Col).value = ValeurB.Valeur
    Else
    Table_Array.Cells(Lig, Col).value = ValeurB
    End If
    CodeRetour = True
    Exit For
    End If
    Next Col

    End Sub
Affichage des résultats 1 à 2 sur 2
Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo