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 :

Problème avec une boucle


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 12
    Par défaut Problème avec une boucle
    Bonjour,

    Je souhaite parcourir un tableau pour récupérer le numéro de ligne d'un article disponible dans ma base de donnée avec ce morceau de code que j'ai réalisé

    Sub positionLigne()

    Dim positionLigne As Byte
    positionLigne = Columns("A").Find("", Range("A1"), xlValues).Row

    Dim position As Byte
    position = 0
    While Range(position, 1).Value <> 34 And Range(position, 3).Value <> "WST2 2R" And position < positionLigne
    position = position + 1
    Wend
    MsgBox position

    End Sub
    J'ai une erreur dans ma boucle while mais je ne sais pas trop comment la résoudre. Je ne sais pas où elle est. Je pense que le soucis viens de ma manière d'obtenir la valeur de ma cellule car je ne suis pas de m'y prendre de la bonne manière.

  2. #2
    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 pense que le soucis viens de ma manière d'obtenir la valeur de ma cellule
    Il n'est pas possible de travailler efficacement sans comprendre le sens de ce que l'on écrit.
    Où, dans le code que tu montres, penses-tu extraire la moindre valeur de cellule ? (cela m'intéresse ...)

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 12
    Par défaut
    Dim positionLigne As Byte
    positionLigne = Columns("A").Find("", Range("A1"), xlValues).Row
    MsgBox positionLigne

    Dim position As Byte
    position = 0

    Dim numeroNomenclature As Byte
    numeroNomenclature = 0

    Dim numeroLu As Byte
    numeroLu = 0

    Dim positionTemporaire As Byte
    positionTemporaire = 2

    numeroLu = Cells(positionTemporaire, 2)

    While numeroLu <> 34
    positionTemporaire = positionTemporaire + 1
    numeroLu = Cells(positionTemporaire, 2)
    Wend

    MsgBox positionTemporaire

    End Sub
    De cette façon ça fonctionne. Je vais essayer de réussir à lui faire comparer en plus une chaine de caractère.

    Edit :

    Je n'ai pas réussi à faire fonctionner correctement l'exemple ci-dessus avec une 2ème condition sur la boucle While.

    Du coup je suis parti sur une boucle For.

    Sub positionLigne()

    Dim positionLigne As Byte
    positionLigne = Columns("A").Find("", Range("A1"), xlValues).Row

    Dim position As Byte
    position = 0

    Dim numeroNomenclature As Byte
    numeroNomenclature = 0

    Dim numeroLu As Byte
    numeroLu = 0

    Dim positionTemporaire As Byte
    positionTemporaire = 2

    numeroLu = Cells(positionTemporaire, 2)

    Dim typeTorche As String
    typeTorche = Cells(positionTemporaire, 4)

    For i = 0 To 134
    numeroLu = Cells(positionTemporaire, 2)
    typeTorche = Cells(positionTemporaire, 4)
    If numeroLu = 4 And typeTorche = "WST2 2R" Then
    Exit For
    Else
    positionTemporaire = positionTemporaire + 1
    End If
    Next

    MsgBox positionTemporaire

    End Sub

    De cette façon ça semble fonctionner.
    Ceci dit j'aimerais bien faire une boucle qui tourne jusqu'à ce qu'un booléen passe de false à true soit car le code à trouver la ligne soit parce qu'il est arrivé à la dernière ligne vide (en comparant avec la valeur de positionLigne trouvé au début).

    Pour i = 0
    Si ... et ... alors (i = 1 on sort donc de la boucle)
    Sinon si ... et ... (on va voir la cellule suivante i reste à 0)
    Sinon (i = 1 car il n'y a plus de donnée plus loin, évite la boucle infini et renvoie un message pour dire qu'il n'a rien trouvé)

Discussions similaires

  1. Problème avec une boucle
    Par bf491499 dans le forum VB.NET
    Réponses: 1
    Dernier message: 16/03/2007, 07h35
  2. Problème avec une boucle
    Par sissi25 dans le forum Langage
    Réponses: 7
    Dernier message: 21/02/2007, 23h40
  3. problème avec une boucle
    Par mars315 dans le forum Langage
    Réponses: 14
    Dernier message: 25/11/2006, 08h39
  4. Problème avec une boucle for
    Par cisse18 dans le forum Général JavaScript
    Réponses: 20
    Dernier message: 29/03/2006, 16h50
  5. [MySQL] Problème avec une boucle
    Par yayacameleon dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 09/03/2006, 09h53

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