VBA EXCEL problème de boucle [Résolu/Fermé]

Signaler
Messages postés
29
Date d'inscription
mercredi 1 juin 2011
Statut
Membre
Dernière intervention
5 juillet 2011
-
Messages postés
10198
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
28 juillet 2021
-
Bonjour,

Je suis à nouveau face un petit problème et j'aurais besoin de vos lumières pour cela. Tout d'abord je souhaitais faire une rechercheV sur une feuille en utilisant les données d'une autre feuille.
La première feuille est une synthèse de deux autres. La seconde feuille contient les stock. Mon but était de créer une macro me permettant de créer une nouvelle colonne dans la feuille "synthèse" dans laquelle se trouverait les stock affiché dans la feuille "stock".
Finalement ma macro ressemble à ceci:

Sub Recupstock()

With Sheets("synthese")
.Range("G2:G").Value = WorksheetFunction.VLookup(.Range("B2:B").Value, Sheets("stock").Range("A:C"), 3, True)
End With
End Sub

G2:G représente la nouvelle colonne
B2:B représente ma donnée source
Sheets("stock").Range("A:C"), 3, True) représente la plage dans laquelle je trouverais ma donnée cible.

Malheureusement, cette macro ne fonctionne pas comme je le souhaite puisque j'aimerai créer une boucle dans laquelle la macro s'arrêterai dés qu'elle rencontre une ligne vide dans la feuille "stock".

4 réponses

Messages postés
16491
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
21 juillet 2021
3 200
bonjour

sans tester

lig_fin=sheets("stock").cells(cell.rows,count,1).row

te donne la dernière ligne non vide dans la colonne A

et ensuite
With Sheets("synthese")
.Range("G2:G" & lig_fin).Value = Workshee..... m^me punition pour les autres range 
Messages postés
29
Date d'inscription
mercredi 1 juin 2011
Statut
Membre
Dernière intervention
5 juillet 2011

Je te remercie pour ta réponse.

Si j'ai bien compris mon code doit ressembler à ça:

Sub RecupPhysicalAvailable()
lig_fin = Sheets("stock").Cells(cell.Rows, Count, 1).Row
With Sheets("synthese")
.Range("G2:G" & lig_fin).Value = WorksheetFunction.VLookup(.Range("B2:B65236").Value, Sheets("stock").Range("A:C"), 3, True)
End With
End Sub

si c'est le cas quand je le check une boite de dialogue s'ouvre disant "erreur d'execution 424 objet requis".
Messages postés
16491
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
21 juillet 2021
3 200
excuse moi
faute de frappe
lig_fin = Sheets("stock").Cells(cells.Rows, Count, 1).Row

mais pourquoi utiliser toutes les lignes
Range("B2:B65236")

et pourquoi utiliser un vlookup ?

j'aurais tendance a écrire (non testé sur maquette)

lig_fin = Sheets("stock").Cells(cells.Rows, Count, 1).end(xlup).row
sheets("synthese").range(G2:G" & lig_fin)=Sheets("stock").range("C2:c" & lig_fin).value 

ps: Excusez moi je n'avais pas dit bonjour
Messages postés
16491
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
21 juillet 2021
3 200
décidement !!! :-(

essai sur maquette qui marche
lig_fin = Sheets(2).Cells(Cells.Rows.Count, 1).End(xlUp).Row
Sheets(1).Range("G2:G" & lig_fin) = Sheets(2).Range("C2:c" & lig_fin).Value

adapter les noms des feuilles
Messages postés
29
Date d'inscription
mercredi 1 juin 2011
Statut
Membre
Dernière intervention
5 juillet 2011

Comme je n'ai pas totalement compris le principe, je l'ai tenté aussi de la manière suivante.

Sub RecupPhysicalAvailable()
lig_fin = Sheets("stock").Cells(cell.Rows, Count, 1).Row
With Sheets("synthese")
.Range("G2:G" & lig_fin).Value = WorksheetFunction.VLookup(.Range("B2:B" & lig_fin).Value, Sheets("stock").Range("A:C" & lig_fin), 3, True)
End With
End Sub

Malheureusement le message d'erreur est le même.
Messages postés
10198
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
28 juillet 2021
1 168
Bonjour,
Juste au passage, remplacer la virgule par le point entre Rows et Count dans la formule de michel_m
lig_fin = Sheets("stock").Cells(cell.Rows.Count, 1).Row
Salutations
Messages postés
29
Date d'inscription
mercredi 1 juin 2011
Statut
Membre
Dernière intervention
5 juillet 2011

Je suis désolé mais ça ne marche pas. Il m'écris erreur de compilation et surligne le « : » entre G2 et G.

Cependant je ne sais pas si j'ai été tout à fait clair sur mon problème.

Mettons que le tableau stock soit designé de la manière suivante

Numéro d'article/ groupe d'article/ Stock dispo
1000045/ surgelé/ 149
1000789/ frais/ 54
... ... / ...
1145852 / conserve/ 810

Le nombre de ligne varie chaque fois que j'actualise cette feuille.

Le tableau synthèse regroupe des éléments venant en partie de la feuille « stock » et se profile ainsi :

Groupe d'article/Numéro d'article/Quantité requise/nom d'article/statut/référence
Surgelé/1000045/121/glace vanille/en attente/destock
Frais/1000789/58/tomate/en attente/destock
.../.../.../.../.../...
Conserve/1145852/723/en attente/destock

« En attente » et « destock » sont des constantes. C'est dans une colonne à coté de référence que je souhaite placer « stock dispo ».
L'ordre et le nombre de numéro d'article ne sont pas les mêmes entre les deux feuilles. C'est la raison pour laquelle j'utilise un VLookup. En gros je veux que G1 « synthese » = C ? « stock » quand B1 « synthese »= B ? « stock ».

Or, je souhaite que ma fonction de recherche soit entièrement automatique et qu'elle dépende de la dimension de ma feuille « synthèse » qui varie selon la feuille stock.
Jusqu'à maintenant je définie de grande plage même quand mes cellule source sont vide ce qui crée des erreur dans ma colonne G de type #N/A.

Je ne sais pas si j'ai été clair. C'est déjà pas simple pour moi...
Messages postés
16491
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
21 juillet 2021
3 200
hé! ho! :-)
pourtant j'avais rectifié lien #5
ig_fin = Sheets("stock").Cells(cells.Rows. Count, 1).end(xlup).row

qui + est, j'avais testé sur une maquette et c'était Ok

Maintenant, fais ce que tu veux....