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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
Bonjour
sans VBA, en colonne C =INDEX(plgT2;EQUIV(B1;plgT1;0))
Stéphane
"Flex" <flex@yahoo.co.jp> a écrit dans le message de news:
up3J2H6tFHA.3528@TK2MSFTNGP15.phx.gbl...
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
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
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
"SL" <nospam_sl69@laposte.net> a écrit dans le message de news:
eZSlsl6tFHA.3236@TK2MSFTNGP14.phx.gbl...
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
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
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
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" <flex@yahoo.co.jp> a écrit dans le message de news:
%2359k576tFHA.3596@TK2MSFTNGP15.phx.gbl...
"SL" <nospam_sl69@laposte.net> a écrit dans le message de news:
eZSlsl6tFHA.3236@TK2MSFTNGP14.phx.gbl...
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
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
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
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
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
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
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
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
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" <exefac@exefac.com> a écrit dans le message de news:
1126540989.017279.269590@g44g2000cwa.googlegroups.com...
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
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
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