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

Macro vba

8 réponses
Avatar
Romi
Bonjour,
J'essaie depuis quelques temps de créer une macro pour pouvoir extraire
des valeurs d'une cellule et les recopier dans une autre feuille mais le
résultat est un v(b)ide total.
Dans une feuille1 en A3 le critère de sélection : V510
Dans une feuille2 un tableau :

ColonneA ColonneB ColonneC
v152 def c147
v236 lm c589
v698 hg c487
v152 tr c456
v874 zs c879
v236 aq c325
v152 vb c452

Je voudrais qu'en A14 puis sur les lignes suivantes dans la colonne A,
avoir les valeurs de la colonne C
Voici ce que j'ai écrit mais je n'obtiens rien

Sheets("CREATON").Select
Range("A3").Select
LeNom = ActiveCell.Value
Range("A1").Select
Sheets("Coll").Select
Do While ActiveCell = LeNom
Code = ActiveCell.Offset(0, 2).Value
Sheets("CREATION").Select
Range("A14").Select
ActiveCell.Value = Code
ActiveCell.Offset(1, 0).Select
Sheets("Coll").Select
ActiveCell.Offset(1, 0).Select
Loop
Range("b1").Select

End Sub

Merci d'avance
Romi

8 réponses

Avatar
h2so4
bonsoir,

Quel est le role du critère de sélection ?
peux-tu m'indiquer quel résultat tu attends dans feuille 2 ("coll") avec le
critère de sélection V510 ?

voici une proposition, mais comme je suis pas sur d'avoir compris, feuille1
= creation et feuille 2 = coll

sub macro()
i=2
while worksheets("coll").cells(i,1)<>""
if worksheets("coll").cells(i,1)=worksheets("creation").cells(3,1) then
worksheets("creation").cells(14+j,1)=worksheets("coll").cells(i,3)
j=j+1
end if
i=i+1
wend

--

h2so4
play triogical at http://www.triogical.com
"Romi" wrote in message
news:
Bonjour,
J'essaie depuis quelques temps de créer une macro pour pouvoir extraire
des valeurs d'une cellule et les recopier dans une autre feuille mais le
résultat est un v(b)ide total.
Dans une feuille1 en A3 le critère de sélection : V510
Dans une feuille2 un tableau :

ColonneA ColonneB ColonneC
v152 def c147
v236 lm c589
v698 hg c487
v152 tr c456
v874 zs c879
v236 aq c325
v152 vb c452

Je voudrais qu'en A14 puis sur les lignes suivantes dans la colonne A,
avoir les valeurs de la colonne C
Voici ce que j'ai écrit mais je n'obtiens rien

Sheets("CREATON").Select
Range("A3").Select
LeNom = ActiveCell.Value
Range("A1").Select
Sheets("Coll").Select
Do While ActiveCell = LeNom
Code = ActiveCell.Offset(0, 2).Value
Sheets("CREATION").Select
Range("A14").Select
ActiveCell.Value = Code
ActiveCell.Offset(1, 0).Select
Sheets("Coll").Select
ActiveCell.Offset(1, 0).Select
Loop
Range("b1").Select

End Sub

Merci d'avance
Romi


Avatar
FFO
Salut Romi

En reprenant ton code avec les corrections nécessaire celà donne :

LeNom = Sheets("CREATION").Range("A3")
Sheets("CREATION").Select
Range("A14").Select
Sheets("Coll").Select
Range("A65535").End(xlUp).Select
Do While ActiveCell.Address <> Range("A1").Address
If ActiveCell = LeNom Then
Code = ActiveCell.Offset(0, 2).Value
Sheets("CREATION").Select
ActiveCell.Value = Code
ActiveCell.Offset(1, 0).Select
Sheets("Coll").Select
End If
ActiveCell.Offset(-1, 0).Select
Loop
If ActiveCell = LeNom Then
Code = ActiveCell.Offset(0, 2).Value
Sheets("CREATION").Select
ActiveCell = Code
End If
Range("b1").Select

Cette solution en l'état fonctionne mais on pourrait faire plus simple
J'ai préféré gardé ta trame

Espérant que celà te convienne
Dis moi !!!!


Bonjour,
J'essaie depuis quelques temps de créer une macro pour pouvoir extraire
des valeurs d'une cellule et les recopier dans une autre feuille mais le
résultat est un v(b)ide total.
Dans une feuille1 en A3 le critère de sélection : V510
Dans une feuille2 un tableau :

ColonneA ColonneB ColonneC
v152 def c147
v236 lm c589
v698 hg c487
v152 tr c456
v874 zs c879
v236 aq c325
v152 vb c452

Je voudrais qu'en A14 puis sur les lignes suivantes dans la colonne A,
avoir les valeurs de la colonne C
Voici ce que j'ai écrit mais je n'obtiens rien

Sheets("CREATON").Select
Range("A3").Select
LeNom = ActiveCell.Value
Range("A1").Select
Sheets("Coll").Select
Do While ActiveCell = LeNom
Code = ActiveCell.Offset(0, 2).Value
Sheets("CREATION").Select
Range("A14").Select
ActiveCell.Value = Code
ActiveCell.Offset(1, 0).Select
Sheets("Coll").Select
ActiveCell.Offset(1, 0).Select
Loop
Range("b1").Select

End Sub

Merci d'avance
Romi



Avatar
LSteph
Bonsoir,

Sub azA3()
Dim myR As Range, c As Range, i As Long
i = 14
With Sheets("Coll")
Set myR = .Range("a1", .[a65536].End(xlUp).Address)
End With
For Each c In myR.Cells
With Sheets("CREATION")
If c = .[a3] Then
.Cells(i, 1) = c.Offset(0, 2)
i = i + 1
End If
End With
Next
End Sub

'lSteph

Bonjour,
J'essaie depuis quelques temps de créer une macro pour pouvoir extraire
des valeurs d'une cellule et les recopier dans une autre feuille mais le
résultat est un v(b)ide total.
Dans une feuille1 en A3 le critère de sélection : V510
Dans une feuille2 un tableau :

ColonneA ColonneB ColonneC
v152 def c147
v236 lm c589
v698 hg c487
v152 tr c456
v874 zs c879
v236 aq c325
v152 vb c452

Je voudrais qu'en A14 puis sur les lignes suivantes dans la colonne A,
avoir les valeurs de la colonne C
Voici ce que j'ai écrit mais je n'obtiens rien

Sheets("CREATON").Select
Range("A3").Select
LeNom = ActiveCell.Value
Range("A1").Select
Sheets("Coll").Select
Do While ActiveCell = LeNom
Code = ActiveCell.Offset(0, 2).Value
Sheets("CREATION").Select
Range("A14").Select
ActiveCell.Value = Code
ActiveCell.Offset(1, 0).Select
Sheets("Coll").Select
ActiveCell.Offset(1, 0).Select
Loop
Range("b1").Select

End Sub

Merci d'avance
Romi


Avatar
Romi
Salut Romi

En reprenant ton code avec les corrections nécessaire celà donne :

LeNom = Sheets("CREATION").Range("A3")
Sheets("CREATION").Select
Range("A14").Select
Sheets("Coll").Select
Range("A65535").End(xlUp).Select
Do While ActiveCell.Address <> Range("A1").Address
If ActiveCell = LeNom Then
Code = ActiveCell.Offset(0, 2).Value
Sheets("CREATION").Select
ActiveCell.Value = Code
ActiveCell.Offset(1, 0).Select
Sheets("Coll").Select
End If
ActiveCell.Offset(-1, 0).Select
Loop
If ActiveCell = LeNom Then
Code = ActiveCell.Offset(0, 2).Value
Sheets("CREATION").Select
ActiveCell = Code
End If
Range("b1").Select

Cette solution en l'état fonctionne mais on pourrait faire plus simple
J'ai préféré gardé ta trame

Espérant que celà te convienne
Dis moi !!!!

Bonjour,

Tout d'abord merci pour votre aide
J'ai essayé la proposition de FFO mais j'ai un message à la fin de
l'exécution de la macro :
"Erreur Exécution '1004'
Erreur definie par l'application ou par l'objet"

En cliquant sur débogage : la ligne "ActiveCell.Offset(-1,0).Select" est
surlignée, cepedant toutes les valeurs sont affichées dans la feuille
"CREATION" et serait-il possible de les avoir dans l'ordre croissant.
Mais je suis preneur pour plus simple
Bonne journée
Romi

Avatar
Hervé
Bonjour Romi,
Je ne suis pas bien sûr d'avoir tous compris mais voyons, tu veux récupérer
sur la feuille "Coll" à partir de la cellule A14 une valeur située dans la
feuille "CREATION" en colonne C en fonction d'un critère entré en A3 de la
feuille "Coll" et la recherche doir s'effectuer dans la feuille "CREATION"
en colonne A ? Regarde et teste le code ci-dessous :
Les valeurs retournées sont collées à partir de la cellule A14 (A15, A16,
Ax...) pour que ceci fonctionne, la colonne A doit être vide sous la cellule
A14.
Au fait, évite les Select qui dans ton cas sont inutiles et ralentissent le
code.

Sub Recup()
Dim Fe As Worksheet
Dim Plage As Range
Dim Cel As Range
Dim LeNom As String

'Récupère le critère
LeNom = Worksheets("Coll").[A3]

'défini la plage de recherche
Set Fe = Worksheets("CREATION")
With Fe
Set Plage = .Range(.[a1], .[A65536].End(3))
End With

'cherche la correspondance dans la plage
Set Cel = Plage.Find(LeNom, , xlValues)

'si trouvé, retourne la valeur de la
'colonne C et la colle dans la colonne
'A à partir de la cellule A14 de la feuille
'"Coll" (les colle les unes au dessous des autres)
If Not Cel Is Nothing Then
Set Fe = Worksheets("Coll")
With Fe
If .[A14] = "" Then
.[A14] = Cel.Offset(0, 2)
Else
.[A65536].End(3).Offset(1) = Cel.Offset(0, 2)
End If
End With
End If

Set Cel = Nothing
Set Plage = Nothing
Set Fe = Nothing
End Sub

Hervé.

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

Bonjour,
J'essaie depuis quelques temps de créer une macro pour pouvoir extraire
des valeurs d'une cellule et les recopier dans une autre feuille mais le
résultat est un v(b)ide total.
Dans une feuille1 en A3 le critère de sélection : V510
Dans une feuille2 un tableau :

ColonneA ColonneB ColonneC
v152 def c147
v236 lm c589
v698 hg c487
v152 tr c456
v874 zs c879
v236 aq c325
v152 vb c452

Je voudrais qu'en A14 puis sur les lignes suivantes dans la colonne A,
avoir les valeurs de la colonne C
Voici ce que j'ai écrit mais je n'obtiens rien

Sheets("CREATON").Select
Range("A3").Select
LeNom = ActiveCell.Value
Range("A1").Select
Sheets("Coll").Select
Do While ActiveCell = LeNom
Code = ActiveCell.Offset(0, 2).Value
Sheets("CREATION").Select
Range("A14").Select
ActiveCell.Value = Code
ActiveCell.Offset(1, 0).Select
Sheets("Coll").Select
ActiveCell.Offset(1, 0).Select
Loop
Range("b1").Select

End Sub

Merci d'avance
Romi


Avatar
Romi
Bonjour,
J'essaie depuis quelques temps de créer une macro pour pouvoir extraire
des valeurs d'une cellule et les recopier dans une autre feuille mais le
résultat est un v(b)ide total.
Dans une feuille1 en A3 le critère de sélection : V510
Dans une feuille2 un tableau :

ColonneA ColonneB ColonneC
v152 def c147
v236 lm c589
v698 hg c487
v152 tr c456
v874 zs c879
v236 aq c325
v152 vb c452

Je voudrais qu'en A14 puis sur les lignes suivantes dans la colonne A,
avoir les valeurs de la colonne C
Voici ce que j'ai écrit mais je n'obtiens rien

Sheets("CREATON").Select
Range("A3").Select
LeNom = ActiveCell.Value
Range("A1").Select
Sheets("Coll").Select
Do While ActiveCell = LeNom
Code = ActiveCell.Offset(0, 2).Value
Sheets("CREATION").Select
Range("A14").Select
ActiveCell.Value = Code
ActiveCell.Offset(1, 0).Select
Sheets("Coll").Select
ActiveCell.Offset(1, 0).Select
Loop
Range("b1").Select

End Sub

Merci d'avance
Romi


Bonjour,
En complement, ce que je cherche est l'equivalent de la foncion
recherchev soit :
feuille"creation" en a14
=recherchev(a3;coll!a1:c560;3)
Suivant la valeur de A3, il peur y avoir entre 3 et 30 réponses, c'est
donc pour éviter de recopier cette formule et d'avoir les N/A sur la feuille

Avatar
FFO
Salut Romi

Je te propose ce code intégrant le tri :

n = 14
Sheets("Coll").Select
For Each c In Worksheets("Coll").Range([A1], [A65535].End(xlUp))
If c = Sheets("CREATION").Range("A3") Then
Sheets("CREATION").Range("A" & n) = c.Offset(0, 2)
n = n + 1
End If
Next
Sheets("CREATION").Select
Range("A14", [A14].End(xlDown)).Select
Selection.Sort Key1:=Range("A14"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

Celà te convient-il ???
Dis moi !!!


Salut Romi

En reprenant ton code avec les corrections nécessaire celà donne :

LeNom = Sheets("CREATION").Range("A3")
Sheets("CREATION").Select
Range("A14").Select
Sheets("Coll").Select
Range("A65535").End(xlUp).Select
Do While ActiveCell.Address <> Range("A1").Address
If ActiveCell = LeNom Then
Code = ActiveCell.Offset(0, 2).Value
Sheets("CREATION").Select
ActiveCell.Value = Code
ActiveCell.Offset(1, 0).Select
Sheets("Coll").Select
End If
ActiveCell.Offset(-1, 0).Select
Loop
If ActiveCell = LeNom Then
Code = ActiveCell.Offset(0, 2).Value
Sheets("CREATION").Select
ActiveCell = Code
End If
Range("b1").Select

Cette solution en l'état fonctionne mais on pourrait faire plus simple
J'ai préféré gardé ta trame

Espérant que celà te convienne
Dis moi !!!!

Bonjour,

Tout d'abord merci pour votre aide
J'ai essayé la proposition de FFO mais j'ai un message à la fin de
l'exécution de la macro :
"Erreur Exécution '1004'
Erreur definie par l'application ou par l'objet"

En cliquant sur débogage : la ligne "ActiveCell.Offset(-1,0).Select" est
surlignée, cepedant toutes les valeurs sont affichées dans la feuille
"CREATION" et serait-il possible de les avoir dans l'ordre croissant.
Mais je suis preneur pour plus simple
Bonne journée
Romi




Avatar
Romi
Salut Romi

Je te propose ce code intégrant le tri :

n = 14
Sheets("Coll").Select
For Each c In Worksheets("Coll").Range([A1], [A65535].End(xlUp))
If c = Sheets("CREATION").Range("A3") Then
Sheets("CREATION").Range("A" & n) = c.Offset(0, 2)
n = n + 1
End If
Next
Sheets("CREATION").Select
Range("A14", [A14].End(xlDown)).Select
Selection.Sort Key1:=Range("A14"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

Celà te convient-il ???
Dis moi !!!


Merci à TOUS pour votre aide
J'ai retenu la 2eme solution de FFO qui me convient parfaitement
Bonne continuation