IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Calcul distance entre 2 codes postaux [AC-2007]


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    dev access débutant
    Inscrit en
    Avril 2015
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev access débutant

    Informations forums :
    Inscription : Avril 2015
    Messages : 39
    Points : 20
    Points
    20
    Par défaut Calcul distance entre 2 codes postaux
    Bonjour
    J'ai une liste de sociétés avec leurs adresses (adresse, cp, ville) dans une table access 2007
    J'aimerais savoir s'il existe du code qui me permettrait de calculer la distance entre mon adresse perso et chacune de ces sociétés
    Merci d'avance
    Cordialement
    Obibikenowan

  2. #2
    Membre à l'essai
    Homme Profil pro
    dev access débutant
    Inscrit en
    Avril 2015
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev access débutant

    Informations forums :
    Inscription : Avril 2015
    Messages : 39
    Points : 20
    Points
    20
    Par défaut
    J'ai oublié de dire que la distance doit être une distance routière et non à vol d'oiseau

  3. #3
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    Bonjour et bienvenue chez nous,

    Regarde ici, c'est tout cuit : http://www.developpez.net/forums/d14...e/#post7900451
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  4. #4
    Membre à l'essai
    Homme Profil pro
    dev access débutant
    Inscrit en
    Avril 2015
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev access débutant

    Informations forums :
    Inscription : Avril 2015
    Messages : 39
    Points : 20
    Points
    20
    Par défaut
    Bonjour,

    Whaou alors là je suis scié!!!!!

    Pour ma première question sur votre forum pour un problème pour lequel j'étais persuadé qu'il n'y avait pas de solution et qui a été résolu en 10 minutes (en plus un dimanche en pleines vacances d'été) t'es hyper balèze ClaudeLeloup !!!!!!!!

    Je vais adapté ça pour tous les enreg de ma table.

    Un très grand merci.

    Un nouvel adepte de "developpez" !!

    Obibikenowan

  5. #5
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    Bonne continuation... sur dvp !
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  6. #6
    Membre à l'essai
    Homme Profil pro
    dev access débutant
    Inscrit en
    Avril 2015
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev access débutant

    Informations forums :
    Inscription : Avril 2015
    Messages : 39
    Points : 20
    Points
    20
    Par défaut pas tout à fait résolu.
    Bonjour ClaudeLELOUP
    Comme avec le formulaire ça marche j'ai voulu mettre à jour ma table "Galeries" à savoir calculer la distance entre chez moi ("94350 Villiers-sur-Marne") et chacune d'entre elles.Nom : Sans titre.jpg
Affichages : 6668
Taille : 99,8 Ko
    J'ai donc fait une fonction qui fait un select de tous les enregistrements et qui extrait le code postal + ville de chaque galerie.
    j'ai initialisé la ville de départ toujours la même "94350 Villiers-sur-Marne" et je lance la procédure.
    voici le code
    ------------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Function calcul_distances()
    Dim bds As Database, rst3 As Recordset
    Dim depart As String
    Dim arrivee As String
    Dim Distance As Double
     
    depart = "94350 villiers-sur-marne"
     
    Set bds = CurrentDb
    Set rst3 = bds.OpenRecordset("SELECT T_Galeries.CP1_Galerie, T_Galeries.Ville1_Galerie, T_Galeries.Pays1, T_Galeries.Distance_villiers FROM T_Galeries WHERE (((T_Galeries.Pays1)='France'));")
    With rst3
    .MoveLast
    .MoveFirst
      Do While Not .EOF
        If Not (IsNull(!CP1_Galerie)) Then
            arrivee = ""
            arrivee = rst3!CP1_Galerie & " " & rst3!Ville1_Galerie
            Distance = G_DISTANCE(depart, arrivee)
            .Edit
            !Distance_villiers = Distance
            .Update
        End If
    .MoveNext
        Loop
       End With
    End Function
    ---------------------

    Quand je regarde le résultat très peu de distances sont trouvées. Le plus étonnant est que pour le même CP et la même ville (par exemple 75009 Paris voir pièce jointe) la distance n'a été calculée qu'une seule fois.
    As-tu une idée de ce qui se passe ?
    Cordialement.
    obibikenowan

  7. #7
    Membre à l'essai
    Homme Profil pro
    dev access débutant
    Inscrit en
    Avril 2015
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev access débutant

    Informations forums :
    Inscription : Avril 2015
    Messages : 39
    Points : 20
    Points
    20
    Par défaut un peu mieux mais pas complètement.
    Bonjour ClaudeLELOUP,

    Pour comprendre pourquoi pour les mêmes valeurs de départ et d'arrivée la fonction ne renvoie pas toujours une distance j'ai changé ma sélection WHERE (((T_Galeries.CP1_Galerie)='75009'));")J'ai vu également que certains caractères comme le 'blanc' est traduit.
    J'ai donc réinitialisé ma variable depart à chaque boucle avant l'appel de la fonction

    Donc quand j'appelle la fonction G_DISTANCE je lui passe toujours les mêmes valeurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    depart = "94350 villiers-sur-Marne"
    arrivee = "75009 Paris"
    -----------
    ...
    ...
     
    Set bds = CurrentDb
    Set rst3 = bds.OpenRecordset("SELECT T_Galeries.CP1_Galerie, T_Galeries.Ville1_Galerie, T_Galeries.Pays1, T_Galeries.Distance_villiers FROM T_Galeries WHERE (((T_Galeries.CP1_Galerie)='75009'));")
    With rst3
      .MoveLast
      .MoveFirst
      Do While Not .EOF
        If Not (IsNull(!CP1_Galerie)) Then
            depart = ""
            depart = "94350 villiers-sur-Marne"
            arrivee = ""
            arrivee = rst3!CP1_Galerie & " " & rst3!Ville1_Galerie
            Distance = G_DISTANCE(depart, arrivee)
            .Edit
            .Distance_villiers = Distance
            .Update
        End If
      .MoveNext
        Loop
       End With
    End Function
    -------------------------

    Du coup la fonction renvoie plus souvent une distance, mais pas systématiquement (voir pièce jointe).
    Bizarre et je ne vois pas quoi faire de plus.
    Cordialement.
    Images attachées Images attachées  

  8. #8
    Membre à l'essai
    Homme Profil pro
    dev access débutant
    Inscrit en
    Avril 2015
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev access débutant

    Informations forums :
    Inscription : Avril 2015
    Messages : 39
    Points : 20
    Points
    20
    Par défaut presque trouvé mais pas complètement.
    Bonjour.

    Pour continuer à chercher pourquoi la fonction G_DISTANCE ne renvoie pas toujours une distance j'ai mis un point d’arrêt sur la ligne "Set myRequest = New XMLHTTP60" de la fonction G_DISTANCE.J'ai relancé ma fonction et donc à chaque fois que je fais appel à fonction G_DISTANCE le programme s'est arrêté sur cette ligne. J'ai interrogé les variables et laissé continuer l'exécution. Et bien là la fonction renvoie systématiquement la distance.

    J'ai refais un test en retirant le point d’arrêt et là la fonction G_DISTANCE ne renvoie pas la distance à chaque fois.

    On dirait qu'il faut laisser du temps à la fonction G_DISTANCE avant de la solliciter de nouveau. Mes appels à cette fonction seraient trop rapides.

    je suis pas expert en VB. y a t'il un moyen de vérifier que la fonction G_DISTANCE a bien eu le temps de s'exécuter avant de la solliciter de nouveau ?

    Je vais mettre un temps de pause dans ma fonction avant chaque appel pour voir si cela résout le pb

    Cordialement.

  9. #9
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    Bonjour,

    Entre l'instruction 18 et 19, place un DoEvents pour temporiser. Probablement que l'.edit se produit alors que la fonction n'est pas encore terminée.


    Tu as posté la cause pendant que je rédigeais mon billet !
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  10. #10
    Membre à l'essai
    Homme Profil pro
    dev access débutant
    Inscrit en
    Avril 2015
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev access débutant

    Informations forums :
    Inscription : Avril 2015
    Messages : 39
    Points : 20
    Points
    20
    Par défaut trouvé une solution mais est-ce la meilleure ?
    Bonjour,

    avant chaque appel de la procédure G_DISTANCE j'ai mis une pause de 300ms et la fonction renvoie bien la distance à chaque fois.
    j'ai essayé 100ms mais c'est trop rapide elle renvoie 0 quelques fois.

    Je ne suis pas expert en vb il y a certainement du code plus performant mais bon je fais avec les 'moyens du bord'

    --------------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    Function calcul_distances()
    Dim bds As Database, rst3 As Recordset
    Dim depart As String
    Dim arrivee As String
    Dim Distance As Double
    
    On Error GoTo fin
    Set bds = CurrentDb
    Set rst3 = bds.OpenRecordset("SELECT T_Galeries.CP1_Galerie, T_Galeries.Ville1_Galerie, T_Galeries.Pays1, T_Galeries.Distance_villiers FROM T_Galeries WHERE (((T_Galeries.CP1_Galerie)='75009'));")
    With rst3
    .MoveLast
    .MoveFirst
      Do While Not .EOF
        If rst3!Distance_villiers = 0 Then
            If Not (IsNull(!CP1_Galerie)) Then
                depart = ""
                depart = "94350 villiers-sur-marne"
                arrivee = ""
                arrivee = Trim(rst3!CP1_Galerie) & " " & Trim(rst3!Ville1_Galerie)
                Sleep 300
                Distance = G_DISTANCE(depart, arrivee)
                .Edit
                !Distance_villiers = Distance
                .Update
            End If
        End If
    .MoveNext
        Loop
       End With
    fin:
    End Function
    --------------

    cordialement.

  11. #11
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    Quand tu postes du code, tu dois l'insérer dans les balises !

    http://dolphy35.developpez.com/images/Balises.gif



    As-tu essayé avec un DoEvents au lieu d'un Sleep (que je décalerais d'une instruction, juste avant l'edit !) ?
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  12. #12
    Membre à l'essai
    Homme Profil pro
    dev access débutant
    Inscrit en
    Avril 2015
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev access débutant

    Informations forums :
    Inscription : Avril 2015
    Messages : 39
    Points : 20
    Points
    20
    Par défaut
    Bonjour,

    désolé je n'avais pas vu ta réponse.
    j'ai retiré la pause et ajouté le doevents. c'est bien là que tu veux que j'ajoute la ligne ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    If Not (IsNull(!CP1_Galerie)) Then
                depart = ""
                depart = "94350 villiers-sur-marne"
                arrivee = ""
                arrivee = Trim(rst3!CP1_Galerie) & " " & Trim(rst3!Ville1_Galerie)
                'Sleep 300
                Distance = G_DISTANCE(depart, arrivee)
                DoEvents
                .Edit
                !Distance_villiers = Distance
                .Update
            End If
    mais ça marche pas il y a des distances à 0
    cordialement

  13. #13
    Membre à l'essai
    Homme Profil pro
    dev access débutant
    Inscrit en
    Avril 2015
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev access débutant

    Informations forums :
    Inscription : Avril 2015
    Messages : 39
    Points : 20
    Points
    20
    Par défaut
    bonjour,

    le je l'ai mis avant l'appel, après l'appel et avant-après l'appel mais cela ne marche pas (tj des 0)

    cordialement.

  14. #14
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    Si ça ne marche pas avec DoEvents, Sleep est la solution, mais place-le juste avant .Edit, car c'est le calcul de la distance qui demande du temps.
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  15. #15
    Membre à l'essai
    Homme Profil pro
    dev access débutant
    Inscrit en
    Avril 2015
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev access débutant

    Informations forums :
    Inscription : Avril 2015
    Messages : 39
    Points : 20
    Points
    20
    Par défaut
    Bonjour.

    Avec sleep ça marche. Par contre ça ne marche pas avec les villes qui contiennent des accents (voir pièce jointe)
    Images attachées Images attachées  

  16. #16
    Membre à l'essai
    Homme Profil pro
    dev access débutant
    Inscrit en
    Avril 2015
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev access débutant

    Informations forums :
    Inscription : Avril 2015
    Messages : 39
    Points : 20
    Points
    20
    Par défaut
    bonjour,

    c'est pareil avec le formulaire. dès qu'il y a un accent ou une cédille ça marche plus

  17. #17
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    C'est qu'il faut d'abord les supprimer ! Google, comme la plupart des Américains n'aiment pas les signes diacritiques.

    Une fonction pour les supprimer : http://blog.developpez.com/philben/p...ccentues_d_une
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  18. #18
    Membre à l'essai
    Homme Profil pro
    dev access débutant
    Inscrit en
    Avril 2015
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev access débutant

    Informations forums :
    Inscription : Avril 2015
    Messages : 39
    Points : 20
    Points
    20
    Par défaut
    Bonjour,

    J'ai essayé la fonction de conversion mais cela ne marche pas
    je l'ai retiré pour revenir à la situation d'avant ou cela avait l'air de fonctionner avec sleep mais maintenant la fonction G_DISTANCE retourne systématiquement 0 même avec un point d’arrêt.
    ras le bol
    mais merci pour ton aide mais je laisse tomber ça me prend le chou
    cordialement

  19. #19
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    Hâtez-vous lentement, et sans perdre courage,
    Vingt fois sur le métier remettez votre ouvrage,
    Polissez-le sans cesse, et le repolissez,
    Ajoutez quelquefois, et souvent effacez.
    Boileau






    La requête :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE tLaTable SET tLaTable.Distance_Ville = G_Distance("villiers-sur-marne",SupprimerAccents([Ville1_Gallerie]));
    Fichiers attachés Fichiers attachés
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  20. #20
    Membre à l'essai
    Homme Profil pro
    dev access débutant
    Inscrit en
    Avril 2015
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev access débutant

    Informations forums :
    Inscription : Avril 2015
    Messages : 39
    Points : 20
    Points
    20
    Par défaut
    Bonjour,

    Avant de voir ta réponse j'ai fait les manip suivantes ce matin.

    Au lieu de recopier le code de la fonction G_DISTANCE dans mon module "module1", j'ai importé le module M_apiGoogleMaps dans ma base et enlevé le code des deux fonctions de mon module.
    j'ai fait un couper/coller de ma fonction de calcul de distance de mon module vers le module M_apiGoogleMaps
    j'ai ajouté la fonction SupprimerAccents dans le module M_apiGoogleMaps.
    j'ai mis la valeur de sleep à 500

    et TOUTES les distances ont été trouvées même celles avec accents

    Je ne comprends pas pourquoi hier quelques distances étaient trouvées, puis un peu plus tard aucune et ce matin toutes.
    Je n'avais rien changé dans la G_distance et j'ai fait un couper/coller de ma fonction.

    Je te remercie infiniment pour ton aide et je pense que ce post va aider bien d'autres personnes
    Très cordialement.
    obibikenowan

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Requête entre 2 codes postaux de type alphanumérique
    Par poetedelavie dans le forum Requêtes
    Réponses: 5
    Dernier message: 03/09/2014, 15h26
  2. Calcul distance entre 2 coordonnee gps
    Par Zombiman dans le forum C#
    Réponses: 8
    Dernier message: 30/07/2013, 09h15
  3. Calcul distance entre deux coordonnées GPS
    Par hamdouch89 dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 03/05/2012, 15h14
  4. Calcule distance entre 2 points
    Par abir001 dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 08/04/2010, 11h12
  5. calcul distance entre deux villes
    Par alexfrei04 dans le forum Access
    Réponses: 2
    Dernier message: 08/01/2007, 21h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo