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 :

Répétition de mon MSg dans la boucle.


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 5
    Par défaut Répétition de mon MSg dans la boucle.
    Bonjour tout le monde! J'ai un petit problem, j'ai créé une boucle qui compare des valeur si deux valeurs sont égales alors on supprime la colonne, j'aimerai qu'a la fin de la boucle si on à trouvé aucune valeur on affiche un msgbox pour averir.
    Or mon msgbox est dans la boucle donc il est affiché bcp de fois, j'aimerai le sortir de la boucle mais qui soit dependant.

    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
    Sub SupprProjet()
     
     
        'Déclaration et affectation des variables
         Dim I As Long
         Dim J As Long
         Dim nom As String
     
        'nom représente la feuille dont on va se servir
         nom = Sheets("Nv Projet-Personne").Cells(4, 2)
     
         For I = 1 To 1 'La première ligne
     
              For J = 1 To 35 'les 60 premières colonnes
     
                  If Sheets(nom).Cells(I, J) = Sheets("Nv Projet-Personne").Cells(3, 2) Then
                      Sheets(nom).Cells(I, J).EntireColumn.Delete
                      Exit For
                      Else: MsgBox "Projet introuvable"
                  End If
              Next
     
         Next
     
    End Sub
    Merci bcp de votre aide

  2. #2
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

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

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour,
    A première vue, il faut que tu utilises une variable de controle.
    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 SupprProjet()
     'Déclaration et affectation des variables
     Dim I As Long
     Dim J As Long
     Dim controle As Boolean
     Dim nom As String
     'nom représente la feuille dont on va se servir
     nom = Sheets("Nv Projet-Personne").Cells(4, 2)
     controle = False
     For I = 1 To 1 'La première ligne
         For J = 1 To 35 'les 60 premières colonnes
             If Sheets(nom).Cells(I, J) = Sheets("Nv Projet-Personne").Cells(3, 2) Then
                 Sheets(nom).Cells(I, J).EntireColumn.Delete
                 controle = True
                 Exit For
            End If
         Next
     Next
     If controle = False Then MsgBox "Projet introuvable"
     End Sub
    2 commentaires sur ton code :
    Une boucle I de 1 à 1 ça sert à quoi? Pourquoi ne fixes-tu pas la vairable I à 1? Et si de toute façon I est toujours égal à 1, pourquoi passes-tu par une variable?
    For J = 1 To 35 'les 60 premières colonnes
    Les 60 ou les 35 premières colonnes?

    Voici comment simplifier ton 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
     
     Sub SupprProjet()
     'Déclaration et affectation des variables
     Dim J As Long
     Dim controle As Boolean
     Dim nom As String
     'nom représente la feuille dont on va se servir
     nom = Sheets("Nv Projet-Personne").Cells(4, 2)
     controle = False
     For J = 1 To 35 'les 60 premières colonnes
         If Sheets(nom).Cells(1, J) = Sheets("Nv Projet-Personne").Cells(3, 2) Then
             Sheets(nom).Cells(1, J).EntireColumn.Delete
             controle = True
             Exit For
        End If
     Next
     If controle = False Then MsgBox "Projet introuvable"
     End Sub
    Et je me rends compte qu'il n'y aurait même pas besoin d'utiliser une variable de controle. Au lieu d'utiliser Exit For, utilise Exit Sub :
    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 SupprProjet()
     'Déclaration et affectation des variables
     Dim J As Long
     Dim nom As String
     'nom représente la feuille dont on va se servir
     nom = Sheets("Nv Projet-Personne").Cells(4, 2)
     For J = 1 To 35 'les 60 premières colonnes
         If Sheets(nom).Cells(1, J) = Sheets("Nv Projet-Personne").Cells(3, 2) Then
             Sheets(nom).Cells(1, J).EntireColumn.Delete
             controle = True
             Exit Sub       'on sort de la méthode, donc on n'a pas la MsgBox
        End If
     Next
     MsgBox "Projet introuvable"         'si on arrive jusqu'ici, c'est qu'on n'a pas trouvé de correspondance
     End Sub
    Enfin, pour plus de rapidité et d'efficacité dans ton code, tu ne devrais pas utiliser une boucle, mais la méthode Application.Match:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Match(Sheets("Nv Projet-Personne").Cells(3, 2).Value, Sheets(nom).Range("1:1"), 0)
    Renvoie le n° de colonne pour laquelle la valeur de la cellule de la ligne 1 est égale à Sheets("Nv Projet-Personne").Cells(3, 2).Value et renvoie une erreur s'il ne peut pas le trouver. On pourrait donc écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     Sub SupprProjet()
     'Déclaration et affectation des variables
     Dim nom As String
     Dim J As Long
     'nom représente la feuille dont on va se servir
     nom = Sheets("Nv Projet-Personne").Cells(4, 2)
     If Not isError(Application.Match(Sheets("Nv Projet-Personne").Cells(3, 2), Sheets(nom).Range("1:1"), 0))Then
        J = Application.Match(Sheets("Nv Projet-Personne").Cells(3, 2), Sheets(nom).Range("1:1"), 0)
        Sheets(nom).Cells(1, J).EntireColumn.Delete
     Else
         MsgBox "Projet introuvable"
     End If
     End Sub
    J'espère que tu pourras bien avancer comme cela

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

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Il ne te viendrait pas à l'idée d'utiliser une simple variable booléenne que tu passes à True lorsque trouvé ?
    Même pas besoin du Else
    A la sortie de boucle : si ta variable est toujours False --->> message

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 5
    Par défaut
    Merci bcp c'est vraimetn gentil d'avoir pris du temps pour résoudre mon pb.

    Pour le for I c'est parcequ'zu debut je savais pas si je faisais ce programme pour la premeiere ligne ou pour plusisuer

    Merci bcp!!! Bonne journée!!!!!!!

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

Discussions similaires

  1. Où est mon erreur dans la boucle Do-While ?
    Par Novice72 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 21/06/2015, 21h28
  2. Réponses: 5
    Dernier message: 14/05/2008, 21h21
  3. Mon script passe une fois de trop dans la boucle
    Par Stessy dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 08/08/2006, 12h57
  4. Pause dans une boucle
    Par HT dans le forum Langage
    Réponses: 4
    Dernier message: 03/06/2003, 09h52

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