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 If dans une boucle [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Runsh63
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Mars 2011
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2011
    Messages : 476
    Par défaut Problème avec If dans une boucle
    Bonjour,

    Pour retraiter les données d'un fichier, je détermine une classe de compte. Selon, cette classe, alors je supprime des lignes entières en fonction du nombre de caractère de ce compte. Voilà le bout de code que j'ai écris:

    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
    Sub Test()
     
    Application.ScreenUpdating = False
     
        With Sheets("Original data")
     
            Dim i As Long, Acc As String
     
                For i = .Cells(.Rows.Count, 1).End(xlUp).Row To 2 Step -1
                Acc = Len(.Cells(i, 1))
                    If Left(.Cells(i, 1).Value, 1) <> "6" Or Left(.Cells(i, 1).Value, 1) <> "7" Then
                        If Acc = 5 Then
                            .Cells(i, 1).Offset(0, 1).Value = "Couic"
                        End If
     
                    End If
                Next i
        End With
     
    Application.ScreenUpdating = True
     
    End Sub
    Ne maîtrisant pas encore parfaitement VBA, j'y vais pas à pas, d'où une boucle For... To Step -1 alors que je ne supprime rien (pour l'instant, je ne fais qu'identifier les lignes qui vont être supprimées dans la version finale). D'où également aucune alternative proposée si les conditions ne sont pas remplies (et donc la succession de End If à la fin sans rien). Problème dès le début, mes cellules dont le premier caractère est un 6 ou un 7 et qui ont un NBCAR de 5 se voit attribuer la valeur "Couic". Je ne vois pas pourquoi...
    Pourriez-vous m'aider SVP ? J'espère avoir été assez clair dans mon explication...

  2. #2
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonjjour.

    C'est exactement ce que tu as écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Acc = Len(.Cells(i, 1))
                    If Left(.Cells(i, 1).Value, 1) <> "6" Or Left(.Cells(i, 1).Value, 1) <> "7" Then
                        If Acc = 5 Then
                            .Cells(i, 1).Offset(0, 1).Value = "Couic"
                        End If
     
                    End If
    ce qui veut dire : ((si la valeur commence par un 6) ou (si la valeur commence par un 7)) Et (le nombre de car = 5) alors écrire "Couic" immédiatement à droite.

    PGZ

  3. #3
    Membre Expert
    Femme Profil pro
    Data engineer
    Inscrit en
    Juin 2007
    Messages
    673
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Data engineer
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 673
    Par défaut
    Bonjour,
    La traduction exact serait : ((si la valeur NE commence PAS par un 6) ou (si la valeur NE commence PAS par un 7)... ce qui est toujours vrai.

  4. #4
    Membre éclairé Avatar de Runsh63
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Mars 2011
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2011
    Messages : 476
    Par défaut
    Mince alors... Moi ce que je voulais, c'était dire : Si la valeur ne commence pas par un 6 ou un 7, alors regarde la longeur de la valeur des cellules et couic si elles ne sont pas égales à 5. Car pour mes cellules dont le premier caractère est un 6 ou un 7, j'aurai un traitement différent (toujours basé sur la longueur des caractères).

  5. #5
    Membre Expert
    Femme Profil pro
    Data engineer
    Inscrit en
    Juin 2007
    Messages
    673
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Data engineer
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 673
    Par défaut
    Re-bonjour,
    Question toute simple de logique :

    non ( A ou B ) = non A ET non B


  6. #6
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Re,

    Citation Envoyé par Runsh63 Voir le message
    Mince alors... Moi ce que je voulais, c'était dire : Si la valeur ne commence pas par un 6 ou un 7, alors regarde la longeur de la valeur des cellules et couic si elles ne sont pas égales à 5. Car pour mes cellules dont le premier caractère est un 6 ou un 7, j'aurai un traitement différent (toujours basé sur la longueur des caractères).
    Si ta valeur commence par 6, elle ne commence pas par 7 et elle satisfait la condition. Si la valeur commence par 7, elle ne commence pas par 6 et elle satisfait la condition. Si la valeur commence pa autre chose, elle satisfait la condition. En un mot, le if ne sert à rien.

    Essaie avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If (Left(.Cells(i, 1).Value, 1) <> "6") and (Left(.Cells(i, 1).Value, 1) <> "7") Then
    C'est la traduction de ce que dit tedo01.

    Cdlt,

    PGZ

  7. #7
    Membre éclairé Avatar de Runsh63
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Mars 2011
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2011
    Messages : 476
    Par défaut
    Bonjour,

    Merci à vous deux tedo01 et pgz, question de logique en effet. Désolé pour le temps que j'ai mis à percuter, j'étais aux fraises là...
    Encore merci !

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

Discussions similaires

  1. Problème avec boutons dans une boucle
    Par CHAP26 dans le forum Flash
    Réponses: 2
    Dernier message: 03/06/2008, 14h28
  2. Problème de requête dans une boucle avec ADOQuery
    Par Ekik dans le forum Bases de données
    Réponses: 8
    Dernier message: 14/05/2007, 16h07
  3. Problème de SCANF dans une boucle WHILE
    Par FidoDido® dans le forum C
    Réponses: 4
    Dernier message: 30/12/2005, 17h42
  4. [Conception] Problème de test dans une boucle while
    Par Cyrius dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/11/2005, 18h07
  5. Problème avec TNMSMTP dans une boucle.
    Par Orgied dans le forum Web & réseau
    Réponses: 3
    Dernier message: 07/04/2004, 10h19

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