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 :

sorti boucle for ne semble pas fonctionner


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 1
    Points : 1
    Points
    1
    Par défaut sorti boucle for ne semble pas fonctionner
    Bonjour,

    je ne comprends pas pourquoi, ma macro ne sort pas de la boucle for.
    Je m'explique je cherche a récupérer le numéro de la première colonne ou il y a marquer "force".
    sauf que lorsqu'il y a dans une des colonne suivante le même mot le numéro de colonne change alors que je souhaite arrêter avant

    ma macro est la suivante.
    un fichier excel est en exemple

    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
    Sub trouv_num_col_forc()
        Dim colonne_force As Integer
     
        colonne_force = 17001
     
        derniere_ligne = Range("A1").End(xlDown).Row 'Dernière ligne de la base de données
        derniere_colonne = Range("A1").End(xlToRight).Column  'Dernière colonne de la base de données
     
        For i = 1 To derniere_ligne
            For j = 1 To derniere_colonne
     
                If Cells(i, j) Like "?orce*" Then
                    colonne_force = j
                    MsgBox colonne_force
                    Exit For
                    Exit For
     
            Next
        Next
    End If
        If colonne_force > 17000 Then
            colonne_force = InputBox("quel est le numero de la colonne contenant les valeurs de force", "Force") 'La variable reçoit la valeur entrée dans l'InputBox
            MsgBox colonne_force
        End If
     
    End Sub

  2. #2
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    Bonjour, bonjour !

    Merci de baliser le code comme c'est pourtant indiqué dans les règles du forum !

    Sinon erreur de logique : une seule instruction possible Exit For au sein d'une boucle !
    Sans compter le End If mal placé …

    Exécuter le code en mode pas à pas (via la touche F8) permet de comprendre ses erreurs.

    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

  3. #3
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    Avec le balisage du code, c'est mieux !

    Le End If doit être situé avant le premier Next car il faut respecter l'ordre chronologique des instructions …

    Un seul Exit For par boucle, donc il doit y avoir un nouveau test et un Exit For entre les Next par exemple …

    Les deux boucles pourraient être remplacées par une recherche, consulter l'aide de la méthode Find
    ou activer le Générateur de macros et effectuer la recherche manuellement depuis la feuille de calculs,
    le code est livré sur un plateau ! Consulter aussi l'aide de la propriété CurrentRegion

  4. #4
    Membre éprouvé Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Points : 973
    Points
    973
    Par défaut
    Bonjour
    La version corrigé
    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 trouv_num_col_forc()
        Dim colonne_force As Integer
     
        derniere_ligne = Range("A1").End(xlDown).Row 'Dernière ligne de la base de données
        derniere_colonne = Range("A1").End(xlToRight).Column  'Dernière colonne de la base de données
     
        For i = 1 To derniere_ligne
            For j = 1 To derniere_colonne
                If Cells(i, j) Like "?orce*" Then
                    colonne_force = j
                        If colonne_force > 17000 Then
                        colonne_force = InputBox("quel est le numero de la colonne contenant les valeurs de force", "Force") 'La variable reçoit la valeur entrée dans l'InputBox
     
    End If
                    MsgBox colonne_force
                    Exit For
                End If
            Next j
        Next i
     
    End Sub
    Une autre methode
    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
    Sub trouv_num_col_forc1()
        Set c =activeworksheet .Find("?orce*", LookIn:=xlValues)
        If Not c Is Nothing Then
            firstAddress = c.Address
            Do
                    If c.Column > 17000 Then
                    colonne_force = InputBox("quel est le numero de la colonne contenant les valeurs de force", "Force") 'La variable reçoit la valeur entrée dans l'InputBox
                    Else
                    colonne_force = c.Column
                    End If
     
                MsgBox colonne_force
                Set c = activeworksheet.FindNext(c)
            Loop While Not c Is Nothing And c.Address <> firstAddress
        End If
     
    End Sub

Discussions similaires

  1. setFont ne semble pas fonctionner
    Par Nico57 dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 25/07/2007, 15h37
  2. Réponses: 1
    Dernier message: 28/03/2007, 18h09
  3. [PDO] et bindValue qui ne semble pas fonctionner
    Par Tommyl dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 31/10/2006, 17h12
  4. Ma table temporaire ne semble pas fonctionner.
    Par outshined dans le forum Requêtes
    Réponses: 2
    Dernier message: 12/09/2006, 15h40
  5. [langage] boucle "for" modification du pas
    Par K-ZimiR dans le forum Langage
    Réponses: 4
    Dernier message: 29/04/2004, 12h54

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