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 :

Programme qui s'execute deux fois


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2010
    Messages : 125
    Par défaut Programme qui s'execute deux fois
    Bonjour tout le monde,

    J'ai ecrit une macro qui fonctionne a cela pres qu'elle s'execute toujours deux fois...

    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
    32
    33
    34
    Sub HauptgewerkErfüllung()
     
    Dim C As Range
    Dim Hauptgewerk As Worksheet, GESAMT As Worksheet, HE As Worksheet
    Dim Feuille As Worksheet
    Dim Such As String, Nom As String
     
    Set GESAMT = Workbooks("Gesamt-Tabelle.xls").Worksheets("Tabelle")
    Set HE = Workbooks("Versuch.xls").Worksheets("HE")
     
    For k = 6 To Worksheets("Makros").Cells(Rows.Count, 8).End(xlUp).Row
        Nom = Worksheets("Makros").Cells(k, 8).Value
     
     
    Set Hauptgewerk = Worksheets(Nom)
     
    ' # Sucht das Blatt die von dem Hauptgewerk betrifft wird
    For Each Feuille In Worksheets
    ' # Sucht die Zeile ins Gesamt Tabelle, wo es die Hauptgewerkergebnisse gibt.
        For Each C In GESAMT.Range("L8:L" & GESAMT.Cells(Rows.Count, 12).End(xlUp).Row)
            If C.Value = 2 And Feuille.Name = C.Offset(0, -11).Value Then
               ' Fügt eine neue Spalte für das Monat ein
                    Hauptgewerk.Range("F1").EntireColumn.Insert
                    Hauptgewerk.Range("D4") = GESAMT.Range("Z6").Value
                      '   # Erfüllt das Blatt
                    Hauptgewerk.Range("B5:B11") = C.Offset(0, -11).Value
                    Hauptgewerk.Cells(6, 6) = C.Offset(0, 8).Value + C.Offset(0, 7).Value
     
                End If
     
            Next
     
    Next
    End Sub
    Le but de cette macro est de remplir un tableau identique sur plusieurs feuilles du classeur. Pour naviguer d'une feuille a l'autre, j'ai repertorie les differents noms de feuille dans un tableau dans la feuille "Makros"

    Mon probleme est que la macro s'effectue a chaque fois sur toute les feuilles (Si j'ai 3 feuilles, chaque feuille sera rempli 3 fois).

    J'ai beau chercher, je vois pas ce qu'il faut que je change.

    merci d'avance !

    Potzo

  2. #2
    Membre Expert Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Par défaut
    bonjour,

    là à chaud, ce que je vois c'est une double imbrication

    il y a

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    'une boucle
    for k=6 to ...
        'et la tu passe en revue toute les feuilles... k fois
        for each feuille in worksheets
        ...
        next feuille
    next k

  3. #3
    Membre éclairé Avatar de grisan29
    Homme Profil pro
    ouvrier poseur
    Inscrit en
    Octobre 2006
    Messages
    866
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ouvrier poseur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2006
    Messages : 866
    Par défaut
    bonjour, mayekeul et potzo

    n'est ce pas pour mis avoir 2 next avant end sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    End If
     
            Next
     
    Next
    End Sub
    cordialement

    pascal

  4. #4
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    Le code que tu fournis doit obligatoirement planter tel quel !

    Il n'y a pas le nombre de Next correspondants au nombre de For.

    Pour s'y retrouver, il est très conseillé de mettre après le for la variable concernée, la lisibilité y gagne de beaucoup, surtout en cas d'imbrication, donc tel quel le code ne se produit même pas 1 fois...

    cordialement,

    Didier

  5. #5
    Membre confirmé
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2010
    Messages : 125
    Par défaut
    Concernant le nombre de Next, c'est parce que j'avais coupe une partie du code qui reprenait la meme syntaxe et donc le Next k du coup. Voici mon code complet :

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    Sub HauptgewerkErfüllung()
     
    Dim C As Range
    Dim Hauptgewerk As Worksheet, GESAMT As Worksheet, HE As Worksheet
    Dim Feuille As Worksheet
    Dim Such As String, Nom As String
     
    Set GESAMT = Workbooks("Gesamt-Tabelle.xls").Worksheets("Tabelle")
    Set HE = Workbooks("Versuch.xls").Worksheets("HE")
     
    For k = 6 To Worksheets("Makros").Cells(Rows.Count, 8).End(xlUp).Row
        Nom = Worksheets("Makros").Cells(k, 8).Value
     
     
    Set Hauptgewerk = Worksheets(Nom)
     
    ' # Sucht das Blatt die von dem Hauptgewerk betrifft wird
    For Each Feuille In Worksheets
    ' # Sucht die Zeile ins Gesamt Tabelle, wo es die Hauptgewerkergebnisse gibt.
        For Each C In GESAMT.Range("L8:L" & GESAMT.Cells(Rows.Count, 12).End(xlUp).Row)
            If C.Value = 2 And Feuille.Name = C.Offset(0, -11).Value Then
               ' Fügt eine neue Spalte für das Monat ein
                    Hauptgewerk.Range("F1").EntireColumn.Insert
                    Hauptgewerk.Range("D4") = GESAMT.Range("Z6").Value
              Hauptgewerk.Range("F4") = GESAMT.Range("Z6").Value
                '   # Erfüllt das Blatt
                    Hauptgewerk.Range("B5:B11") = C.Offset(0, -11).Value
                    Hauptgewerk.Cells(6, 6) = C.Offset(0, 8).Value + C.Offset(0, 7).Value
                    Hauptgewerk.Cells(8, 6) = C.Offset(0, 2).Value
                    Hauptgewerk.Cells(6, 4).Value = C.Offset(0, 17).Value + C.Offset(0, 16).Value
                    Hauptgewerk.Cells(7, 6) = C.Offset(0, 14).Value * C.Offset(0, 2).Value
                    Hauptgewerk.Cells(9, 6) = Hauptgewerk.Cells(6, 6) + (Hauptgewerk.Cells(8, 6) - Hauptgewerk.Cells(7, 6))
                    Hauptgewerk.Cells(10, 6) = Hauptgewerk.Cells(6, 6) * Hauptgewerk.Cells(8, 6) / Hauptgewerk.Cells(7, 6)
                    Hauptgewerk.Cells(11, 6) = Hauptgewerk.Cells(6, 6) + (Hauptgewerk.Cells(8, 6) - Hauptgewerk.Cells(7, 6)) * Hauptgewerk.Cells(5, 6) * Hauptgewerk.Cells(6, 6) / (Hauptgewerk.Cells(7, 6) * Hauptgewerk.Cells(7, 6))
                    Hauptgewerk.Cells(12, 6) = Hauptgewerk.Cells(8, 6) - Hauptgewerk.Cells(11, 6)
                    Hauptgewerk.Cells(13, 6) = (Hauptgewerk.Cells(8, 6) - Hauptgewerk.Cells(7, 6)) / (Hauptgewerk.Cells(8, 6) - Hauptgewerk.Cells(6, 6))
                    Hauptgewerk.Cells(14, 6) = (Hauptgewerk.Cells(8, 6) - Hauptgewerk.Cells(7, 6)) / (Hauptgewerk.Cells(10, 6) - Hauptgewerk.Cells(6, 6))
                End If
     
            Next
     
    Next
     '# Sucht das Blatt die von dem Hauptgewerk betrifft wird
    For Each Feuille In Worksheets
        For Each C In HE.Range("B3:B" & HE.Cells(Rows.Count, 2).End(xlUp).Row)
               Hauptgewerk.Cells(5, 4).Value = C.Offset(0, 6).Value
               Hauptgewerk.Cells(5, 6).Value = Hauptgewerk.Cells(5, 4).Value + Hauptgewerk.Cells(5, 7).Value
            Next
    Next
    Next k
    End Sub
    J'ai pas tres bien ce que tu veux dire Ormonth.
    La boucle sur le k est juste la pour changer le nom de la feuille dans laquelle je suhaite travailler..mais bon ca marche pas trop

  6. #6
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Citation Envoyé par Potzo Voir le message
    :

    J'ai pas tres bien ce que tu veux dire Ormonth.
    dans ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    For Each Feuille In Worksheets
        For Each C In HE.Range("B3:B" & HE.Cells(Rows.Count, 2).End(xlUp).Row)
               Hauptgewerk.Cells(5, 4).Value = C.Offset(0, 6).Value
               Hauptgewerk.Cells(5, 6).Value = Hauptgewerk.Cells(5, 4).Value + Hauptgewerk.Cells(5, 7).Value
            Next
    Next
    écrire ainsi est bien plus lisible et montre que tu maîtrise tes boucles !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    For Each Feuille In Worksheets
        For Each C In HE.Range("B3:B" & HE.Cells(Rows.Count, 2).End(xlUp).Row)
               Hauptgewerk.Cells(5, 4).Value = C.Offset(0, 6).Value
               Hauptgewerk.Cells(5, 6).Value = Hauptgewerk.Cells(5, 4).Value + Hauptgewerk.Cells(5, 7).Value
            Next C
    Next Feuille
    cordialement,

    Didier

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

Discussions similaires

  1. Message de confirm qui s'affiche deux fois
    Par Lolie11 dans le forum Langage
    Réponses: 17
    Dernier message: 07/06/2007, 11h00
  2. Trouver le programme qui s'execute toutes les 10 minutes
    Par sboffin dans le forum Windows Serveur
    Réponses: 3
    Dernier message: 22/03/2007, 17h37
  3. Script qui s'exécute deux fois ?
    Par ben53 dans le forum Langage
    Réponses: 1
    Dernier message: 29/01/2007, 15h56
  4. Pop-up qui s'ouvre deux fois
    Par arnapou dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 26/06/2006, 08h49
  5. code qui s'execute plusieurs fois
    Par khelif dans le forum JBuilder
    Réponses: 1
    Dernier message: 10/03/2005, 21h56

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