VLOOKUP avec nombre de colonnes qui change

Bonjour tout le monde,

Je voudrais savoir comment "generaliser" ce VLOOKUP dans le code ci-dessous:

Sub copydata()

    Dim lngCounter As Long
    Dim lngMax As Long
    Dim lngCol As Long
    Dim wksTwo As Worksheet
     'copier de la sheet1 a la sheet2, on copie en valeurs
    Set wksTwo = Worksheets("Sheet2")

    wksTwo.Cells.ClearContents
    Worksheets("Sheet3").Cells.ClearContents
    Worksheets("Sheet1").Range("zoneselect").Copy
    wksTwo.Range("B1").PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:=xlNone, skipBlanks:=False, Transpose:=False

     ' On enleve les blancs entre la sheet 2 à la sheet3
    wksTwo.Range("A1:BB1").Copy Sheets("Sheet3").Range("B1")
    Sheets("Sheet3").Range("B1").CurrentRegion.SpecialCells(xlCellTypeBlanks).Delete shift:=xlToLeft

    Worksheets("Sheet3").Select
    Range("A1:BB1").Select
    Selection.Cut
    Sheets("Sheet3").Select
    Range("B1").Select
    ActiveSheet.Paste
    Selection.SpecialCells(xlCellTypeBlanks).Select
    Application.CutCopyMode = False
    Selection.Delete shift:=xlToLeft

     'On selectionne l'action qui a le plus de dates pour la copier dans la sheet3
    With wksTwo
        For lngCounter = 1 To .Cells(1, .Columns.Count).End(xlToLeft).Column
            If InStr(1, .Cells(1, lngCounter).Value, "FP") > 0 Then
                If .Cells(.Rows.Count, lngCounter).End(xlUp).Row > lngMax Then
                    lngMax = .Cells(.Rows.Count, lngCounter).End(xlUp).Row
                    lngCol = lngCounter
                End If
            End If
        Next lngCounter
         'MsgBox "Greatest length is " & lngMax & " beneath Range " & Cells(1, lngCol).Address(0, 0)
        .Range(.Cells(2, lngCol), .Cells(lngMax, lngCol)).Copy Destination:=Worksheets("Sheet3").Range("A2")
    End With

'Début du VLOOKUP il faudrait le généraliser en fonction du nombre de stocks
Sheets("Sheet3").Select
Range("B2").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-1],Sheet2!RC:R[5563]C[1],2,TRUE)"
Range("B2").Select
Selection.AutoFill Destination:=Range("B2:B5565")
Range("B2:B5565").Select

    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-1],Sheet2!R2C2:R5565C3,2,TRUE)"
    Range("C2").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-2],Sheet2!R2C4:R5565C5,2,TRUE)"
    Range("D2").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-3],Sheet2!R2C6:R5565C7,2,TRUE)"
    Range("C2").Select
    Selection.AutoFill Destination:=Range("C2:C5565")
    Range("C2:C5565").Select
    Range("D2").Select
    Selection.AutoFill Destination:=Range("D2:D5565")
    Range("D2:D5565").Select

End Sub

The VLOOKUP est sur la sheet3 et doit etre fait en fonction du nombre de colonnes.

Dans cet exemple "statique" il y a 3 colonnes mais celui-ci varie en fonction du nombre de stocks que vous verrez en sheet2 ainsi que de la periode.

Voici le fichier

Je vous remercie

R

Bonjour

A voir

Banzai64...comment dire...you rock!!!!!:-)

Merci beaucoup pour ton aide!!

J'aimerais bien tout de même par curiosité comprendre entierement ton code! quand si jamais t'as le temps d'expliquer rapidement c'est pas pressé!

     LgDep = 2   ' Ligne de départ du tableau dans la page Sheet2
  ClDep = 2   ' Colonne de départ du tableau dans la page Sheet2

  With Sheets("Sheet2")
    ClFin = .Cells(LgDep, Columns.Count).End(xlToLeft).Column
    LgFin = .Range(.Cells(1, ClDep), .Cells(1, ClFin)).EntireColumn.Find(what:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
  End With
  Nblg = Range("A" & Rows.Count).End(xlUp).Row
  For I = ClDep To ClFin Step 2
    With Range(Cells(2, 2 + (I - ClDep) / 2), Cells(Nblg, 2 + (I - ClDep) / 2))
      .Formula = "=VLOOKUP(RC1,Sheet2!R" & LgDep & "C" & I & ":R" & Nblg & "C" & I + 1 & ",2,FALSE)"
    End With
  Next I

Merci encore!!!

A bientôt!

R

Bonjour

En rapide (code non compliqué)

Recherche de la dernière colonne et de la dernière ligne dans Sheet2

  With Sheets("Sheet2")
    ClFin = .Cells(LgDep, Columns.Count).End(xlToLeft).Column
    LgFin = .Range(.Cells(1, ClDep), .Cells(1, ClFin)).EntireColumn.Find(what:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
  End With

Pour chaque groupe de 2 colonnes

ClDep To ClFin Step 2

La formule VLOOKUP :

I me sert de numéro de colonne

LgDep est la 1ère ligne de la recherche

LgFin est la dernière ligne de la recherche

C'est tout

Merci beaucoup banzai!!

A bientot!!


Ah au fait petite question c'est compliqué de modifier le vlookup en macro "pur vba" pour que les cellules qui sortent soient des valeurs?

a+

Bonjour

Si je veux l'ameliorer encore et faire de sorte a ce que ca laisse des blancs comme dans le code ci-dessus de Banzai, mais qu'a partir de la date de cotation c'est a dire autrement dit a partir de la date de la cellule C5 de la worksheet 1 par exemple, il fasse un vlookup en mettant la valeur approximative en cas d'absence de valeur

Merci!!

Bonjour

Je n'ai pas trop suivi ton programme (ce que tu fais avant les formules)

Quelles différences entre le tableau de la page "Sheet1" et le tableau de la page "Sheet2" ?

Moi je n'ai pas trouvé de différence

remy444 a écrit :

il fasse un vlookup en mettant la valeur approximative en cas d'absence de valeur

La formule le fait déjà

Le 4ème paramètre est positionné sur VRAI

Extrait de l'aide

RECHERCHEV(valeur_cherchée;table_matrice;no_index_col;valeur_proche)

valeur_proche représente une valeur logique indiquant si vous souhaitez que la fonction RECHERCHEV recherche une valeur exacte ou voisine de celle que vous avez spécifiée. Si cet argument est VRAI ou omis, une donnée proche est renvoyée. En d'autres termes, si aucune valeur exacte n'est trouvée, la valeur immédiatement inférieure à valeur_cherchée est renvoyée. Si valeur_proche est FAUX, la fonction RECHERCHEV renvoie exactement la valeur recherchée. Si aucune valeur ne correspond, la valeur d'erreur #N/A est renvoyée.

Si l'argument valeur_proche est VRAI, les valeurs de la première colonne de l'argument table_matrice doivent être placées en ordre croissant : ..., -2, -1, 0, 1, 2, ..., A-Z, FAUX, VRAI. Sinon, la fonction RECHERCHEV peut donner une valeur incorrecte. Si l'argument valeur_proche est FAUX, les éléments de la table ne doivent pas nécessairement être classés.

Yes parfait Banzai!!

Merci beaucoup encore une fois!!

Ok je voudrais ameliorer en fait

Je voudrais que lorsqu'il y a un #N/A, qu'un stock prenne la "valeur relative par rapport a un autre stock"

En gros je voudrais que s'il y a un #N/A, il prenne le rapport expliqué dans le screenshot suivant

explication excel vlookup et conditions

Voici mon fichier

Merci!!

Rechercher des sujets similaires à "vlookup nombre colonnes qui change"