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 :

Insérer boucle dans programme VBA [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Responsable Electrotechnique
    Inscrit en
    Février 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Electrotechnique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2016
    Messages : 3
    Par défaut Insérer boucle dans programme VBA
    Bonjour à tous et à toutes,

    J'ai récupéré une petite programmation sur le net (l'algorithme de Dijkstra pour les connaisseurs) que j'ai adapté à mes besoins.

    Je souhaite savoir si vous pouviez m'aider à insérer une boucle à l’intérieur... tout simplement...

    Mon programme vient du cheminement (cheminement = routing ou routage, si vous préférez) de câbles dans une grande installation électrique.
    Ces derniers partent d'une armoire électrique vers une autre, en passant par quelques chemins de câbles (qui les supportent).
    En bref, le programme fonctionne comme un GPS ; Je parts d'un point A et je veux aller au point B => le chemin le plus court est alors celui qui est généré.

    Mon problème étant que cette programmation fonctionne au "coup par coup", c'est à dire "câble après câble". Dans les faits, j'ai une liste d'environ 500 câbles - ce qui me demande de répéter l'opération 500 fois. J'aimerais donc insérer une boucle automatique qui, lorsque je clique sur le calcul, fasse le même travail que précédemment, mais pour les 500 câbles.

    Le programme :
    6-Routing Automatique - Un calcul avec inversion V2.0.xlsm

    Exemple aujourd'hui :
    Je saisi le tenant et l'aboutissant de mon câble : Armoire 1 => Armoire 2
    Du coup, le chemin le plus court à emprunter est le suivant : A, B, C, E, H, U.
    Et cela, je dois le répéter autant de fois que j'ai de câbles... alors qu'une boucle automatique permettrait de faire l'ensemble du travail en un seul clic.

    Exemple de ce que je recherche ;
    J'entre tous les tenants et tous les aboutissants (lignes après lignes) et le programme me donne le chemin correspondant à utiliser pour chacun d'entre eux
    Armoire 1 => Armoire 2 ;
    Armoire 3 => Armoire 1 ;
    Armoire x => Armoire y ;
    Armoire n => Armoire n+1 ;
    etc.

    et me génère le chemin pour chacun d'entre eux :
    Armoire 1 => Armoire 2 ; A, B, C, E, H, U.
    Armoire 3 => Armoire 1 ; H, K, I, O, P
    Armoire x => Armoire y ; J, G, R, Y
    Armoire n => Armoire n+1 ; I, P, N, C

    Ca serait top que vous puissiez m'aider
    Bonne journée

  2. #2
    Expert éminent 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
    Par défaut
    Il suffit de changer ta procédure AfficherResultat comme ceci:

    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
    Private Sub AfficherResultat(ByVal i As Long)Dim k As Variant
    Dim n As Noeud
    Dim iRow As Integer
     
     
    With Feuil1
        .Range("R3:S10").ClearContents
        iRow = 2 + Chemin.NombreNoeuds
     
     
        For Each k In Chemin.Noeuds.Keys
            Set n = Chemin.Item(k)
            .Cells(iRow, "R").Value = n.Nom
            .Cells(iRow, "S").Value = n.Parcouru
            iRow = iRow - 1
        Next k
     
     
        .Range("R3:R10").Copy
        .Range("J20")(i).PasteSpecial Paste:=xlPasteAll, Transpose:=True
        Application.CutCopyMode = False
        With .Range("I20")(i)
            .Formula = "=SUM(S3:S7)"
            .Value = .Value
        End With
    End With
    End Sub
    Et ta procédure CheminPlusCourt avec boucle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public Sub CheminPlusCourt()Dim i As Long
     
     
    Initialisation
    For i = 2 To 10                                       'TA BOUCLE
        AlgoDijkstra Feuil1.Range("H" & i), Feuil1.Range("I" & i)
        AfficherResultat i - 1
    Next i
    End Sub
    il faudra bien sûr décaler ta plage résultats en bas et réadapter les plages du code

  3. #3
    Candidat au Club
    Homme Profil pro
    Responsable Electrotechnique
    Inscrit en
    Février 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Electrotechnique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2016
    Messages : 3
    Par défaut
    Merci beaucoup, cela fonctionne!!

    J'ai cependant une petite erreur, est-ce que vous sauriez ce que cela raconte ?
    Erreur 424 - Objet requis

    En cliquant sur le débogueur, j'ai la ligne suivante en surbrillance ;
    Set debut = mesNoeuds.Item(nomNoeudDebut)

    Nouvelle version du programme ;
    7-Routing Automatique V3.0.xlsm

    Cela m'intrigue ; le programme lui manque un objet mais tourne quand même ? Humm..

  4. #4
    Expert éminent 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
    Par défaut
    Ca n'a rien d’intrigant

    Cette erreur vient du fait que tu as des nœuds vides ou nœuds n'existent pas dans la plage d'initialisation. D'où l'erreur.

    Pour pallier à cela, j'ai ajouté une fonction et un test

    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
    Public Sub CheminPlusCourt()
    Dim i As Long
     
    Initialisation
    For i = 2 To 10   'TA BOUCLE
        If IsNoeud(Feuil1.Range("H" & i)) And IsNoeud(Feuil1.Range("I" & i)) Then
            AlgoDijkstra Feuil1.Range("H" & i), Feuil1.Range("I" & i)
            AfficherResultat i - 1
        End If
    Next i
    End Sub
     
    Private Function IsNoeud(ByVal Tmp As String) As Boolean 'fonction qui test l'existence d'un noeud Tmp
     
    On Error Resume Next
    IsNoeud = Not mesNoeuds.Item(Tmp) Is Nothing
    End Function

  5. #5
    Candidat au Club
    Homme Profil pro
    Responsable Electrotechnique
    Inscrit en
    Février 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Electrotechnique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2016
    Messages : 3
    Par défaut
    Merci énormément, cela fonctionne parfaitement !
    Je vais continuer de travailler ce petit programme pour l'adapter à mon travail pro.
    Merci encore !!
    Bonne journée

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

Discussions similaires

  1. Erreur 3061 dans programme VBA
    Par fbourdon dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 09/10/2009, 11h22
  2. Insérer Musique dans programme c++
    Par pepsi33 dans le forum C++
    Réponses: 1
    Dernier message: 09/10/2007, 21h42
  3. [VBA-E] Boucles dans combo box
    Par titeZ dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 11/05/2007, 09h31
  4. [VBA-E] Problème pour faire une boucle dans une userform
    Par Garlim dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 02/05/2007, 23h10
  5. [SQL & VBA]Insérer champ dans instruction SQL existante
    Par stéphane_ais2 dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 22/05/2006, 11h58

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