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 :

boucles qui ne s'arrêtent pas


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2014
    Messages : 87
    Par défaut boucles qui ne s'arrêtent pas
    Bonjour à tous,
    J'ai plusieurs boucles imbriquées et je n'arrive pas à m'arrêter au résultat qui m'intéresse.
    Cette boucle me permet de récupérer des données saisies par l'utilisateur dans un tableau Excel et qui seront ensuite stockées dans des variables et utilisées dans des procédures et autres fonctions. Cest variables sont celles que j'appelle Nu,Vyu,Vzu,Myu,Mzu,Tu,Nsc,Vysc,Vzsc,Mysc,Mzsc,Tsc.
    Voici mon 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
    Sub sollicitation()
     
    Dim ELU, Nu, Vyu, Vzu, Myu, Mzu, Tu As Double
    Dim Car, Nsc, Vysc, Vzsc, Mysc, Mzsc, Tsc As Double
     
    Dim i, j As Double
    ELU = Cells(9, 28).Value
     
     
     
    For j = 17 To 21
        For i = 100 To 104
            If ELU = i Then
                Nu = Cells(j, 4).Value
                Vyu = Cells(j, 5).Value
                Vzu = Cells(j, 6).Value
                Myu = Cells(j, 7).Value
                Mzu = Cells(j, 8).Value
            Exit For
            End If
        Next
    Next
    End Sub
    Ce que je souhaite faire c'est:
    Si la variable ELU=100 --> je récupère les valeurs de la lignes 17 de mon tableau.
    Si la variable ELU=101 --> je récupère les valeurs de la lignes 18 de mon tableau.
    Et ainsi de suite jusqu'à ELU=104 pour laquelle je récupère la ligne 21.

    Ensuite pour la variable Car c'est pareil sauf qu'au lieu d'avoir un compteur allant de 100 à 104, je démarre à 200 pour aller à 204 et je récupère les lignes 22 à 26 selon la valeur (pour 200, je récupère la ligne 22 et ainsi de suite).

    Le problème c'est qu'actuellement, je tourne en rond (le principe d'une boucle lol). Je voudrai faire correspondre la valeur 100 à la ligne 17 et sortir de la boucle mais je m'y perds un peu..
    Pouvez vous me donner quelques pistes ?
    D'avance merci
    Cdt

  2. #2
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2014
    Messages : 87
    Par défaut
    J'avais également penser à ce code mais je ne m'arrête pas non plus
    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
    Sub sollicitation()
     
    Dim ELU, Nu, Vyu, Vzu, Myu, Mzu, Tu As Double
    Dim Car, Nsc, Vysc, Vzsc, Mysc, Mzsc, Tsc As Double
    Dim i, j As Double
    ELU = Cells(9, 28).Value
     
     
    For j = 17 To 21
        For i = 100 To 104
            'If ELU = i Then
                Nu = Cells(j, 4).Value
                Vyu = Cells(j, 5).Value
                Vzu = Cells(j, 6).Value
                Myu = Cells(j, 7).Value
                Mzu = Cells(j, 8).Value
                If ELU = i Then Exit For
     
            'Exit For
           ' i = i
            'End If
        Next
    Next
    End Sub

  3. #3
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Je vais me contenter de te faire observer que ta variable ELU, placée telle qu'elle l'est hors de la boucle, ne risque pas de varier.
    Et je ne comprends pas ce que tu cherches vraiment à faire (tes explications manquent de caractère technique pour m'y aider).

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    tu peux faire sans boucle avec un simple switch
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ligne = Switch(ELU = 100, 17, ELU = 101, 18, ELU = 102, 19, ELU = 103, 20, ELU = 104, 21)
        Nu = Cells(ligne, 4).Value
        Vyu = Cells(ligne, 5).Value
        Vzu = Cells(ligne, 6).Value
        Myu = Cells(ligne, 7).Value
        Mzu = Cells(ligne, 8).Value


    ou meme comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim EcarT
        EcarT = 100 - 17
        ligne = ELU - EcarT
        Nu = Cells(ligne, 4).Value
        Vyu = Cells(ligne, 5).Value
        Vzu = Cells(ligne, 6).Value
        Myu = Cells(ligne, 7).Value
        Mzu = Cells(ligne, 8).Value
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2014
    Messages : 87
    Par défaut
    WAHOU Génial!! Merci @patricktoulon je ne connaissais pas du tout ! ça marche super bien . Je vais l'utiliser du coup

    Juste pour info, j'arrive pas à comprendre pourquoi je tourne en rond avec les boucles..Meme quand je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    For i = 100 To 104
        If ELU = i Then Exit Sub
         Nu = Cells(j, 4).Value
         Vyu = Cells(j, 5).Value
         Vzu = Cells(j, 6).Value
         Myu = Cells(j, 7).Value
         Mzu = Cells(j, 8).Value
     
     
    Next
     
    Next
    Les boucles ne sont pas appropriés dans ce cas?

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    ben la pour le coup tu n'obtiendra pas ton résultat l'exit doit se faire apres les instructions bien evidement
    pour ce qui est que la boucle ne s'arrete pas il y a une chance sur xxxxxx que tu es une version recente je l'ai remarqué avec 2016 en test l
    a sortie ne doit pas etre un exit sub mais un exit for
    en derniere raison, je la met quand meme bien que si ca fonctionne avec une de mes deux propsitions elle n'a pas lieu d'etre c'est la valeur de "ELU" qui n'est pas définie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    For i = 100 To 104
        If ELU = i Then Exit Sub
         Nu = Cells(j, 4).Value
         Vyu = Cells(j, 5).Value
         Vzu = Cells(j, 6).Value
         Myu = Cells(j, 7).Value
         Mzu = Cells(j, 8).Value
     
     
    Next
    cela dit pour un choix de 4 position d'une valeur une boucle est a mon gout inutile
    surtout que tu en fait 2 imbriquées soit de 17 a 21= 4 fois (100 a 104 )= 4 autrement 16 tours pour 5 valeur a tester (100,101,102,103,104)


    derniere remarque si ton fichier est sensé evoluer en terme de ligne en plus opter pour la proposition 2 tu n'aura rien a changer

    noublie pas le bouton resolu si tout est OK pour toi
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  7. #7
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 171
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J'interviens dans cette discussion dans le seul but de te faire remarquer que les lignes 3, 4 et 6 ne sont pas correctes quant au typage des variables
    En effet dans ces trois lignes ci-dessous seules les variables Tu, Asc et j sont de type Double. Toutes les autres variables sont de type Variant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim ELU, Nu, Vyu, Vzu, Myu, Mzu, Tu As Double
    Dim Car, Nsc, Vysc, Vzsc, Mysc, Mzsc, Tsc As Double
    Dim i, j As Double
    La bonne syntaxe est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim i As Double, j As Double
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

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

Discussions similaires

  1. Problème de boucle qui ne s'exécute pas
    Par bikine dans le forum Général Java
    Réponses: 1
    Dernier message: 01/04/2015, 08h28
  2. Boucle qui ne se lance pas
    Par Shunsuii dans le forum Langage
    Réponses: 17
    Dernier message: 23/12/2011, 01h44
  3. Variable d'une boucle qui ne se modifie pas
    Par Erast dans le forum Débuter
    Réponses: 4
    Dernier message: 17/04/2010, 20h25
  4. Boucle qui ne s'arrete pas
    Par pierrot67 dans le forum Bases de données
    Réponses: 4
    Dernier message: 29/03/2007, 10h19
  5. [VBA-E]une boucle qui ne s'arrète pas
    Par vivelesgnous dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 15/02/2006, 18h05

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