Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

mise à jour d'une liste en fonction d'une autre

5 réponses
Avatar
Flex
Bonjour,

sur ma feuille Temp, j'ai deux plages (de même longueur)
plgT1 dans la colonne A
plgT2 dans la colonne B

sur ma feuille Feuil1, j'ai une plage:
plgF1 dans la colonne B

plgT1 est en fait plgF1 dans laquelle j'ai viré tous les doublons.

Ce que je veux faire dans feuil1:
pour chaque valeur de plgF1, mettre dans la cellule de la colonne C
correspondante, la valeur
de plgT2 correspondante.
Tout ceci en vba.

En espérant que j'ai été assez clair,
Quelqu'un peut il m'aider s'il vous plait car je patauge.
Merci
Flex


excel2003

5 réponses

Avatar
SL
Bonjour

sans VBA, en colonne C =INDEX(plgT2;EQUIV(B1;plgT1;0))

Stéphane

"Flex" a écrit dans le message de news:

Bonjour,

sur ma feuille Temp, j'ai deux plages (de même longueur)
plgT1 dans la colonne A
plgT2 dans la colonne B

sur ma feuille Feuil1, j'ai une plage:
plgF1 dans la colonne B

plgT1 est en fait plgF1 dans laquelle j'ai viré tous les doublons.

Ce que je veux faire dans feuil1:
pour chaque valeur de plgF1, mettre dans la cellule de la colonne C
correspondante, la valeur
de plgT2 correspondante.
Tout ceci en vba.

En espérant que j'ai été assez clair,
Quelqu'un peut il m'aider s'il vous plait car je patauge.
Merci
Flex


excel2003




Avatar
Flex
"SL" a écrit dans le message de news:

Bonjour

sans VBA, en colonne C =INDEX(plgT2;EQUIV(B1;plgT1;0))

Stéphane



merci de répondre si vite
Pa contre peux tu me donner plus de détails car si je sélectione la colonne
c et que j'y colle la formule ca ne fonctionne pas
merci

Avatar
SL
regarde l'aide sur INDEX et EQUIV.
EQUIV renvoie le rang de la valeur de B1 dans la plage plgT1.
INDEX renvoie la valeur de la plage plgT2 correspondant à ce rang.
la formule est à coller en C1

autre possibilité (AV ferme les yeux), utilise RECHERCHEV

Stéphane


"Flex" a écrit dans le message de news:
%

"SL" a écrit dans le message de news:

Bonjour

sans VBA, en colonne C =INDEX(plgT2;EQUIV(B1;plgT1;0))

Stéphane



merci de répondre si vite
Pa contre peux tu me donner plus de détails car si je sélectione la
colonne c et que j'y colle la formule ca ne fonctionne pas
merci




Avatar
Philippe Noss
Si tu tiens à vba la procédure suivante devrait faire l'affaire
Sub maj()
Set F1 = ThisWorkbook.Sheets(1)
Set F2 = ThisWorkbook.Sheets(2)
For Each c In F2.Range("plgF2")
i = Application.Match(c, F1.Range("plgT1"), 0)
c.Offset(0, 1) = F1.Cells(i, 2)
Next

End Sub

Philippe NOSS
www.exefac.com
Avatar
Flex
Merci à tous pour vos réponses.

La solution de M. Philippe Noos fonctionne tres bien.
Avant de la voir et de l'essayer, voici ce que j'avais fait hier soir et qui
marche aussi mais c'est plus long (en ligne de code et probablement en temps
d'exécution aussi)

'***********************************************

Sub test()
Dim Cell As Range, NbLig As Long
Dim PlgNumEtab As String, PlgNomEtab As String
Dim AllCells As Range
Dim ValeursUnik As New Collection
Dim i As Integer
Dim formule As String



With Worksheets("Temp")
NbLig = .Range("A65536").End(xlUp).Row

'nomme la plage numEtab de la feuille temp
With .Range("A1:A" & NbLig)
AdrPlg = .Parent.Name & "!" & .Address
ActiveWorkbook.Names.Add Name:="PlgNumEtab", RefersTo:= _
"=" & AdrPlg
End With
'on crée une collection avec les numEtabs
Set AllCells = Range("PlgNumEtab")
On Error Resume Next
For Each Cell In AllCells
ValeursUnik.Add Cell.Value, CStr(Cell.Value)
Next Cell

'nomme la plage nomEtab de la feuille temp
With .Range("B1:B" & NbLig)
AdrPlg = .Parent.Name & "!" & .Address
ActiveWorkbook.Names.Add Name:="PlgNomEtab", RefersTo:= _
"=" & AdrPlg
End With
End With


Worksheets("Feuil1").Select
Range("B2").Select
Range(Selection, Selection.End(xlDown)).Select

For Each Cell In Selection
For i = 1 To ValeursUnik.Count

If Cell.Value = ValeursUnik(i) Then

formule = "=INDEX(PlgNomEtab,MAX((PlgNumEtab=" & ValeursUnik(i) &
")*ROW(PlgNumEtab)))"

Cell.Offset(0, 1).FormulaArray = formule

End If
Next i
Next Cell
End Sub

'***********************************************



"Philippe Noss" a écrit dans le message de news:

Si tu tiens à vba la procédure suivante devrait faire l'affaire
Sub maj()
Set F1 = ThisWorkbook.Sheets(1)
Set F2 = ThisWorkbook.Sheets(2)
For Each c In F2.Range("plgF2")
i = Application.Match(c, F1.Range("plgT1"), 0)
c.Offset(0, 1) = F1.Cells(i, 2)
Next

End Sub

Philippe NOSS
www.exefac.com