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

Macros et VBA Excel Discussion :

Distances entre x et y


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 27
    Points : 15
    Points
    15
    Par défaut Distances entre x et y
    Bonjour tout le monde,

    Je bloque sur la création d'une macro.
    Je m'explique: j'ai un point d'origine et 10 points de livraison. Les 11 points ont des coordonnées x et y.

    J'aimerai déterminer via une macro la distance entre tous ces points et l'afficher dans un tableau (nom des colonnes => point d'origine jusqu'au 10e point de livraison et nom des lignes => point d'origine jusqu'au 10e point de livraison). Exemple: on pourrait donc lire dans ce tableau la distance de 1 à 2, de 4 à 2, de 1 à 10, de 0 à 9, etc.

    La distance entre deux points se calcule comme cela: racine((x1-x2)²+(y1-y2)²).

    Ci-joint la trame excel, les coordonnées des points sont sur l'onglet "Coordonnees" et on essaye de remplir l'onglet "Distance".

    J'ai déjà déclaré x et y:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Coordonnees()
     
    Dim i As Integer
    Dim x As Integer
    Dim y As Integer
     
    For i = 2 To 12
        x = Worksheets("Coordonnees").Cells(2, i).Value
        y = Worksheets("Coordonnees").Cells(3, i).Value
     
    Next i
     
    End Sub
    Est-ce que quelqu'un a une idée ?

    Merci d'avance.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre actif
    Homme Profil pro
    Ingénieur
    Inscrit en
    Janvier 2010
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 272
    Points : 222
    Points
    222
    Par défaut
    Bonjour,

    Je te propose le morceau de code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    For i = 1 To 11
        For j = 1 To 11
            x1 = Worksheets("Coordonnees").Range("B2").Offset(0, i - 1).Value
            y1 = Worksheets("Coordonnees").Range("B3").Offset(0, i - 1).Value
            x2 = Worksheets("Coordonnees").Range("B2").Offset(0, j - 1).Value
            y2 = Worksheets("Coordonnees").Range("B3").Offset(0, j - 1).Value
     
            Range("B2").Offset(i - 1, j - 1) = Sqr((x2 - x1) ^ 2 + (y2 - y1) ^ 2)
     
            Next j
            Next i
    Cela te conviendrait-il ?

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 27
    Points : 15
    Points
    15
    Par défaut
    Bonjour,

    Merci ça fonctionne bien mais peux-tu m'expliquer le code stp.
    Je ne connais pas .Offset...

    Merci de ton aide.

  4. #4
    Membre actif
    Homme Profil pro
    Ingénieur
    Inscrit en
    Janvier 2010
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 272
    Points : 222
    Points
    222
    Par défaut
    Offset signifie décalage. L'origine du référentiel de décalage est défini par rapport à la cellule à laquelle on applique l'offset (dans mon code : B2 ou B3).
    Un offset de (0,0) correspond à la cellule de départ :

    Range("B2").Offset(0,0) renvoie la cellule B2
    Range("B2").Offset(1,0) renvoie la cellule B3
    Range("B2").Offset(0,1) renvoie la cellule C2
    Range("B2").Offset(1,-1) renvoie la cellule A3

    etc.. Tu saisis ?
    Dans mon code, cela sert simplement à parcourir les cellules des lignes x et y pour affecter à x1, x2, y1 et y2 les valeurs de tous les couples possibles (x1;y1) et (x2;y2)

    A ta disposition

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 27
    Points : 15
    Points
    15
    Par défaut
    Ok merci. Et sans offset ça aurait donné quoi ?

  6. #6
    Membre actif
    Homme Profil pro
    Ingénieur
    Inscrit en
    Janvier 2010
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 272
    Points : 222
    Points
    222
    Par défaut
    On aurait pu écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    For i = 1 To 11
        For j = 1 To 11
            x1 = Worksheets("Coordonnees").Cells(2,i+1).Value
            y1 = Worksheets("Coordonnees").Cells(3,i+1).Value
            x2 = Worksheets("Coordonnees").Cells(2,j+1).Value
            y2 = Worksheets("Coordonnees").Cells(3,j+1).Value
     
            Range("B2").Offset(i - 1, j - 1) = Sqr((x2 - x1) ^ 2 + (y2 - y1) ^ 2)
     
        Next j
    Next i

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 27
    Points : 15
    Points
    15
    Par défaut
    Merci !

    J'ai finalement codé comme ça:

    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
    Sub Coordonnees()
     
    Dim i As Integer
    Dim j As Integer
    Dim x1 As Integer
    Dim x2 As Integer
    Dim y1 As Integer
    Dim y2 As Integer
     
        For i = 2 To 12
            For j = 2 To 12
                x1 = Worksheets("Coordonnees").Cells(2, i).Value
                y1 = Worksheets("Coordonnees").Cells(3, i).Value
                x2 = Worksheets("Coordonnees").Cells(2, j).Value
                y2 = Worksheets("Coordonnees").Cells(3, j).Value
     
                Worksheets("Distance").Cells(i, j) = Sqr((x2 - x1) ^ 2 + (y2 - y1) ^ 2)
            Next j
        Next i
     
    End Sub
    J'aimerai n'afficher que la partie haute symétrique du tableau sans les 0 (un résultat seulement par couple en fait).
    Je pense qu'il faut rajouter un if ou une boucle comme while i-j >0 ?

  8. #8
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    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
    Sub Coordonnees()
    Dim i As Byte, j As Byte
    Dim x1 As Integer, x2 As Integer, y1 As Integer, y2 As Integer
     
    With Worksheets("Coordonnees")
        For i = 2 To 11
            For j = i + 1 To 12
                x1 = .Cells(2, i).Value
                y1 = .Cells(3, i).Value
                x2 = .Cells(2, j).Value
                y2 = .Cells(3, j).Value
                Worksheets("Distance").Cells(i, j) = Sqr((x2 - x1) ^ 2 + (y2 - y1) ^ 2)
            Next j
        Next i
    End With
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 27
    Points : 15
    Points
    15
    Par défaut
    J'ai bien compris merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Distance entre 2 couleur
    Par matique dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 08/02/2006, 14h19
  2. [3D] Trouver la distance entre 2 vecteurs3d
    Par Happy dans le forum Développement 2D, 3D et Jeux
    Réponses: 6
    Dernier message: 10/01/2006, 11h30
  3. distance entre 2 points avec Point2D
    Par mikees dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 09/01/2006, 16h10
  4. Aucune distance entre les colones d'un tableau
    Par FrankOVD dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 29/06/2005, 12h05
  5. Mesure distance entre 2 points d'une image
    Par vexal dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/05/2005, 14h29

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