boucle

L

loulou

Guest
bonsoir
dans ma macro ObtenirNom2, je cherche une valeur(pc) dans une table
et celle -ci m'est bien renvoyée.
mon probléme se pose lorsque je veux faire des recherches dans la colonne PC(Range("C2").End(xlDown).Row, ma boucle ne fonctionne pas


Sub ObtenirNom2()
Dim PC, Table, MonBureau As String, i As Integer
PC = Range("C2").End(xlDown).Row
Table = Range("I2:J350")
Worksheets("Calendrier").Activate
For i = 2 To PC
MonBureau = Application.WorksheetFunction. _
VLookup(i, Table, 2, False)
Next i
If MonBureau <> "" Then
Cells(2, 4) = MonBureau
End If
End Sub


merci

a++
 
C

coyote

Guest
Je n'ai pas une vision clair de ta boucle (connais pas toutes les fonctions par coeur) mais en tout cas si après C2, il n'y a plus de variable, tu feras un test jusqu'à la ligne 65536 (fin de feuille)

pou remédier à ce type de désagrément je te propose de modifer ta variable PC=Range("C65536").End(xlUp).Row
 
C

chris

Guest
Bonjour
i contient un numéro de ligne.
Donc tu cherche chaque numero de ligne mais tu ne fais rien du résultat obtenu car le traitement de la valeur bureau est en dehors de la boucle et utilise donc le dernière valeur trouvée uniquement.
Chris
 
L

loulou

Guest
salut à tous les deux

merci pour vos conseils

aprés avoir modifié pc= range("C65536"), et placé les instructions que me signalaient cris je n'ai plus de message d'erreur, mais ma variable i reste vide

à ++
 
@

@+Thierry

Guest
Re: boucle sur WorksheetFunction.VlookUp

Salut Loulou, Chris, Coyote, le Forum

J'ai un peu regardé ce fil et si je comprends bien ton problème Loulou, c'est que tu utilises VlookUp dans une boucle, ce qui est assez inhabituel, mais en testant rapidement on peut s'en sortir en maîtrisant un petit peu les erreurs générées par cette fonction quand elle ne retourne rien (ce qui arrive dans une boucle)

Ceci dit, je ne suis absolument pas certain d'avoir compris ce que tu veux, mais c'est juste pour faire avancer le schmilblic !

Ce que j'ai compris :

3 feuilles

1 = "Calendrier", contenant la base de données sur deux colonnes ("I" & "J" sur 350 lignes)

2 = "Data" (je l'invente lol) qui contient en colonne ("C") les valeurs à rechercher dans la base "Calendrier" (on ne connait pas le nombre de lignes)

3 = "Resultat" (je l'invente aussi lol) qui devrait retourner une liste en colonne "D" (en partant de D2), des valeur retrouvées par le VloopUp entre "Data" et "Calendrier"


Donc voici ce que le code donnerait :

Sub ObtenirNomLoulou()
Dim x As Byte
Dim PC As Integer, i As Integer
Dim Table As Range
Dim MonBureau As String

PC = Sheets("Data").Range("C65536").End(xlUp).Row
Set Table = Sheets("Calendrier").Range("I2:J350")

x = 2

For i = 2 To PC
On Error Resume Next
MonBureau = Application.WorksheetFunction. _
VLookup(Sheets("Data").Cells(i, 3), Table, 2, False)
If Err = 1004 Then GoTo Suite
Sheets("Resultats").Cells(x, 4) = MonBureau
x = x + 1
Suite:
Next
End Sub


Vous me direz que ce n'est pas très orthodoxe, mais je suis parti de la macro de Loulou et, finalement çà à l'air de tourner assez raisonnablement vite (testé avec 5000 données en feuille "Data").

Voilà, en espérant ne pas être totalement en dehors de la plaque ;-)

Bonne soirée à tout le monde
@+Thierry

PS : on notera aussi les déclarations de Variables car le fait d'écrire :
Dim Toto, Zaza, Lulu as Byte
équivaut à déclarer uniquement Lulu as Byte tandis que Zaza et Toto sont Variants !
 
S

schmail

Guest
Bonjour le forum et Merci Thierry pour le PS sur les déclarations de variables.

j'étais persuadé que l'on pouvait regrouper plusieurs variables du même type, afin de s'éviter la répétition sur plusieurs lignes...Pan sur le clic

@+ et bonne journée
 
L

loulou

Guest
boucle pour Thierry

merci Thierry

Cela fonctionne pour 2/3 des cellules de la colonne D
Je mt'ai envoyé le fichier pour que tu puisses juger toi même




Sub ObtenirNomLoulou()
Dim x As Byte
Dim PC As Integer, i As Integer
Dim Table As Range
Dim MonBureau As String

PC = Sheets("Data").Range("C65536").End(xlUp).Row
Set Table = Sheets("Calendrier").Range("I2:J350")

x = 2

For i = 2 To PC
On Error Resume Next
MonBureau = Application.WorksheetFunction. _
VLookup(Sheets("Data").Cells(i, 3), Table, 2, False)
If Err = 1004 Then GoTo Suite
Sheets("Resultats").Cells(x, 4) = MonBureau
x = x + 1
Suite:
Next
End Sub


merci encore
 

Statistiques des forums

Discussions
313 138
Messages
2 095 628
Membres
106 308
dernier inscrit
F.DIAS