XL 2016 [Résolu] Calcul d'itinéraire

eddy1975

XLDnaute Occasionnel
Bonsoir le forum,

Je rencontre des soucis dans un fichier de TATIAK que j'ai téléchargé sur le Forum et que j'essaye d'adapter.
Dans l'exemple ou j'ai renseigné la ville de départ (Paris) en H3 et la destination (Moscou) en H4, j'ai deux soucis :
- la durée ne correspond pas, il devrait y avoir plus de 30 heures en E3.
- lorsque les cellules H3 et H4 sont vides et que je clique sur le bouton " Calcul.." les cellules B3 et C3 sont vides elles aussi mais D3 et E3 conservent les données de la précédente recherche. J'aimerais qu'elles soient également vides.
Merci pour votre aide.
@+
 

Pièces jointes

  • Calcul d'itinéraire.xlsm
    60.1 KB · Affichages: 41
Dernière édition:

Lone-wolf

XLDnaute Barbatruc
Bonjour D4

Quelle idée de mettre plus d'un milion de ligne si aux max tu en as 1000. Modifie cette partie

VB:
If Sheets("Feuil1").Range("a3") <> "" And Sheets("Feuil1").Range("b3") <> "" And Sheets("Feuil1").Range("c2") <> "" And Sheets("Feuil1").Range("d2") <> "" Then
If Sheets("Routes").Range("a1048576").End(xlUp) = "REFERENCE" Then
Sheets("Routes").Range("a1048576").End(xlUp).Offset(1, 0) = 1
Else
Sheets("Routes").Range("a1048576").End(xlUp).Offset(1, 0) = Sheets("Routes").Range("a1048576").End(xlUp) + 1
End If
Sheets("Routes").Range("b1048576").End(xlUp).Offset(1, 0) = Sheets("Feuil1").Range("a3")
Sheets("Routes").Range("c1048576").End(xlUp).Offset(1, 0) = Sheets("Feuil1").Range("b3")
Sheets("Routes").Range("d1048576").End(xlUp).Offset(1, 0) = Sheets("Feuil1").Range("c2")
Sheets("Routes").Range("e1048576").End(xlUp).Offset(1, 0) = Sheets("Feuil1").Range("d2")
Sheets("Routes").Range("f1048576").End(xlUp).Offset(1, 0) = Sheets("Feuil1").Range("h2")
Sheets("Routes").Range("g1048576").End(xlUp).Offset(1, 0) = Sheets("Feuil1").Range("j2")

Par
VB:
Dim WsF As WorkSheet, WsR As WorkSheet
Dim plage As Range, cel As Range
Dim derlig As Long, lig As Long

Set WsF = Sheets("Feuil1") : Set WsR = Sheets("Routes")

With WsF
If Not IsEmpty(.Range("a3")) <> "" And Not IsEmpty(.Range("b3")) _
And Not IsEmpty(.Range("c2")) And Not IsEmpty(.Range("d2")) Then

With WsR
derlig = .Range("a" & Rows.Count).End(xlUp)
lig = .Range("a" & Rows.Count).End(xlUp) + 1
Set plage = .Range("a2:a" & derlig)

For each cel in plage
If cel Like "*REFERENCE*" Then
cel.Offset(1, 0) = 1
Else
cel.Offset(1, 0) = WsR.Range("a" & lig)
End If
cel.Offset(1, 1) = WsF.Range("a3")
cel.Offset(1, 2) = WsF.Range("b3")
cel.Offset(1, 3)= WsF.Range("c2")
cel.Offset(1, 4) = WsF.Range("d2")
cel.Offset(1, 5) =WsF .Range("h2")
cel.Offset(1, 6) = WsF.Range("j2")
Next cel
End With
End With
 
Dernière édition:

D4_

XLDnaute Nouveau
Hello,

Lone_Wolf : Je ne comprend pas ton code, quand je le lance, j'ai des erreurs de "End with sans with, et End if sans if" alors que tout est correct...
Et je ne comprend pas comment ça pourrait régler le problème que j'ai énoncé, dont la cause est pour moi inconnue puisque je n'ai pas touché au code de Tatiak et qu'il fonctionnait pendant mes ajout.

Tatiak : Encore mieux ton fichier, mais je peux pas affecter la macro Get_trajet à un bouton
et je préférais utiliser une autre feuille pour le listing, mais de toute façon ce n'est qu'un fichier test pour le moment. (Je préférais également éviter d'avoir 4 formules par lignes. Je préfère faire le calcul en interne de la macro, et n'afficher que du texte dans les cellules)
 

Lone-wolf

XLDnaute Barbatruc
Re D4

Désolé pour le quack, dû à l'oubli de End If dans la macro. Voici le code corrigé et d'après ton code.

VB:
Dim WsF As Worksheet, WsR As Worksheet
Dim plage As Range, cel As Range
Dim derlig As Long, lig As Long

Set WsF = Sheets("Feuil1"): Set WsR = Sheets("Routes")

        derlig = WsR.Range("a" & Rows.Count).End(xlUp)
        lig = WsR.Range("a" & Rows.Count).End(xlUp) + 1
        Set plage = WsR.Range("a2:a" & derlig)

With WsF
    If Not IsEmpty(.Range("a3")) <> "" And Not IsEmpty(.Range("b3")) _
       And Not IsEmpty(.Range("c2")) And Not IsEmpty(.Range("d2")) Then

        For Each cel In plage
            If cel Like "*REFERENCE*" Then
                cel.Offset(1, 0) = 1
            Else
                cel.Offset(1, 0) = WsR.Range("a" & lig)
            End If
               cel.Offset(1, 1) = .Range("a3")
               cel.Offset(1, 2) = .Range("b3")
               cel.Offset(1, 3) = .Range("c2")
              cel.Offset(1, 4) = .Range("d2")
              cel.Offset(1, 5) = .Range("h2")
              cel.Offset(1, 6) = .Range("j2")
        Next cel
    End If
End With
 

Lone-wolf

XLDnaute Barbatruc
Re Pierre

Les lignes des textboxs sont en rouge, qu'est-ce tu fou??? :eek:

Erreur dû à calcul(Me.TextBox1.value, Me.TextBox2.value). Ce ne serait pas mieux une fonction à la place de sub??

Et à notre ami, à la place des tooglebutton, je mettrais des commandbutton

Private Sub Annuler_Click()
Dim i As Long

For i = 1 To 14
Controls("TextBox" & i) = ""
Next i
End Sub
 
Dernière édition:

Discussions similaires

Réponses
12
Affichages
1 K

Membres actuellement en ligne

Statistiques des forums

Discussions
312 164
Messages
2 085 877
Membres
103 009
dernier inscrit
dede972