VBA Définir une plage variable ( For each X in " la plage qui varie " )

Bobbcolin

XLDnaute Nouveau
Bonjour,
J'ai essayé de faire clair dans le titre mais bon, je manque de vocabulaire VBA.
Alors voilà, j'utilise un code pour calculer les distance routière entre plusieurs villes et j'utilise la fonctionnalité for each x in. Mon problème est que la plage que je définis est variable situé entre la cellule L6 et la cellule contenant "Fin trajet", cela marchait jusqu'à présent mais maintenant quoiqu'il se passe ( que j'ai entré 1 ou 15 villes ) la plage se limite à 4 cellules.
Voici le code :





Sub ITIN()
Shell "RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 8"
Worksheets(3).Visible = True
Worksheets(1).Unprotect ("FB")
Worksheets(1).Activate
Range("O6:p21").ClearContents
Range("l21").End(xlUp).Offset(1, 0).Value = Range("L6").Value

Set Fin = Sheets("Simulation").Cells.Find("Fin Trajet")

For Each x In Sheets("Simulation").Range("L6:" & Fin.Offset(-1, 0).Address)

If Not IsEmpty(x) Then

Sheets("Itin").Cells.Clear
Depart = x.Value
Arrivee = x.Offset(1, 0).Value
With Sheets("Itin").QueryTables.Add(Connection:="URL;http://maps.google.fr/maps?f=d&saddr=" & Depart & "&daddr=" & Arrivee, Destination:=Sheets("Itin").Range("A1"))
.Name = "itinéraire"
.BackgroundQuery = True
.WebSelectionType = xlEntirePage
.WebFormatting = xlWebFormattingNone
.Refresh BackgroundQuery:=False
End With

Set result = Sheets("Itin").Cells.Find("1. 1.")
If result Is Nothing Then
Else

km = Split(result.Offset(3, 0), " km")
x.Offset(1, 3) = km(0)
x.Offset(1, 4) = result.Offset(1, 0)
End If
Else
End If
Next
Worksheets(1).Protect ("FB")
Worksheets(3).Visible = False
End Sub


J'ai mis en rouge les lignes concernant mon problème. VBA ne détecte aucune erreur ou bug dans le code mais il ne fonctionne pas comme je le voudrais. Pensez-vous que le problème vienne du code ou de ma feuille excel ?
 

Pierrot93

XLDnaute Barbatruc
Re : VBA Définir une plage variable ( For each X in " la plage qui varie " )

Bonjour,

A vérifier si ta variable "fin" est bien initialisée.... regarde aussi dans l'aide vba, du coté de la méthode "find" et notamment ses arguments, cf ci-dessous un extrait :

Notes
Les paramètres des arguments LookIn, LookAt, SearchOrder et MatchByte sont enregistrés chaque fois que vous utilisez cette méthode. Si vous ne spécifiez aucun paramètre pour ces arguments lors du prochain appel de la méthode, les paramètres enregistrés sont utilisés. Le fait de définir les paramètres de ces arguments modifie les paramètres de la boîte de dialogue Rechercher, ce qui a pour effet de changer les paramètres enregistrés qui sont utilisés lorsque vous ne spécifiez pas les arguments. Pour éviter toute ambiguïté, définissez ces arguments de façon explicite chaque fois que vous utilisez cette méthode.

bon après midi
@+

Edition : bonjour Victor
 

hellnar

XLDnaute Junior
Re : VBA Définir une plage variable ( For each X in " la plage qui varie " )

Bonjour,

Difficile à dire comme cela, mais personnellement je mettrai un espion sur l'adresse de fin de trajet juste pour connaitre bien la plage utilisée. Enfin comment peut-on dire quelque chose sur une feuille que l'on ne voit pas ???
Pas extralucide quand même !
Je cherche
Hellnar
 

Bobbcolin

XLDnaute Nouveau
Re : VBA Définir une plage variable ( For each X in " la plage qui varie " )

Merci de vos réponses !
Je suis désolé de ne pas pouvoir joindre le fichier mais je l'utilise dans un cadre professionnel il y a beaucoup de chiffre que je ne peux pas vous communiquer je vais cependant essayer d'en faire une copie sans ces données j'en ai pour quelques minutes.
hellnar je suis interessé par ta méthode d'espion mais je ne sais pas du tout comment on fait :/. Tu pourrais m'expliquer ou me donner un lien pour apprendre ?
merci !
 

Bobbcolin

XLDnaute Nouveau
Re : VBA Définir une plage variable ( For each X in " la plage qui varie " )

Le fichier est trop gros ! :mad: il fait 672 Ko ( alors que j'ai supprimé la plupart des trucs )
Compressé avec 7zip il fait 313 ... que faire ... l'amerde appelle l'amerde ( il est nul mon jeu de mot je l'avoue)

Pourtant j'ai supprimé les 3/4 des macros et cellules qui ne concernaient pas mon problème ( je l'utilise a des fins professionnelles donc je ne peux pas vous donner le fichier tel quel.)

Vous avez des solutions sinon (pour les deux problèmes finalement)

Merci !
 

Bobbcolin

XLDnaute Nouveau
Re : VBA Définir une plage variable ( For each X in " la plage qui varie " )

J'aurais juste besoin d'une petite traduction pour pouvoir utiliser ta méthode pierrot :
Si j'ai bien compris (si), mon problème est que je ai pas bien définis les paramètre de la méthode find et qu'elle enregistré un paramètre que j'ai utilisé et c'est pour cela que ma plage n'est plus variable mais égale à une déjà définie auparavant ?
Si oui comment paramétrer et quoi
 

Pierrot93

XLDnaute Barbatruc
Re : VBA Définir une plage variable ( For each X in " la plage qui varie " )

Re,

essaye en modifiant comme suit :

Code:
Dim fin As Range, x As Range
Set fin = Cells.Find("Fin Trajet", , xlValues, xlPart, , , False)
If fin Is Nothing Then MsgBox "non trouvé...": Exit Sub
For Each x In Sheets("Simulation").Range("L6:" & fin.Offset(-1, 0).Address)
 

hellnar

XLDnaute Junior
Re : VBA Définir une plage variable ( For each X in " la plage qui varie " )

Pour parler des espions, sur ma machine il suffit de se mettre sur la variable que l'on veut observer et bouton droit définir comme espion. Dès lors une fenetre indique les valeurs des variables espionnées. C'est plus simple que de faire des Debug.print ...
Sur les anciennes versions, c'est dans le menu débogage : ajouter un espion
Pour la méthode find, il est certainement nécessaire de la remettre à zéro, autrement dit d'effacer d'abord les recherches précédentes. C'est le cas avec Word, mais je ne connais pas la fonction dans Excel....
 

Discussions similaires

Statistiques des forums

Discussions
312 330
Messages
2 087 351
Membres
103 526
dernier inscrit
HEC