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 :

Syntaxe If Not/Or et de Select Case/Or [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Avatar de Kaera
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2011
    Messages : 185
    Par défaut Syntaxe If Not/Or et de Select Case/Or
    Bonjour cher forum,

    Dans une feuille, j'ai une grande liste que je dois trier.
    Je ne veux conserver que les lignes qui contiennent telle ou telle expression.
    J'ai tenté avec If Not et Or (puisque les conditions ne se cumulent pas), raté. Sur internet c'est visiblement la croix et la bannière pour trouver la syntaxe du If Not/Or...
    J'ai donc tenté avec Select Case et Or, encore raté !

    Voici mon ébauche (qui ne fonctionne pas) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    For i = Range("B65536").End(xlUp).Row To 1 Step -1
            Select Case (Cells(i, 2))
                    Case Is <> "*PLOF*"
                    Or Case Is <> "*PLAF*"
                    Or Case Is <> "*PLIF*"
                    Or Case Is <> "*PLUF*"
                    Or Case Is <> "*PLEF*" : Rows(i).Delete
            End Select
    Next i
    En mots : Si la ligne NE contient PAS le mot "PLOF" ou si elle ne contient pas le mot "PLAF" [etc...], alors supprimer la ligne.
    Je ne sais pas quelle structure adopter sachant que je dois conserver toute ligne contenant PLOF ou PLAF, ou PLIF, ou PLUF...

    Quelqu'un pourrait-il m'éclairer sur la syntaxe correcte SVP ? Soit du If Not, soit du Select Case...

    Merci d'avance !

    Kaera*

  2. #2
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    Dis plutôt à quoi tu veux arriver en clair et on te diras quelle méthode employer.. à notre avis..

    Par exemple, si tes cellules contiennent exclusivement PLIF ou PLaf sans autres caractères, et quelles sont dans des colonnes fixes il pourrait être plus facile et bien plus rapide d'utiliser les filtres auto en raisonnant à l'envers : on filtre ce qui contient ce qu'on ne veut pas et on le fait sauter.

    Donc c'est une question de structure initiale de ta table à connaître.


    Cordialement,

    Ps : si le côté technique de la réponse = OK ou pas => pensez à cliquer sur les pouces et quand question résolue à la taguer résolue, et chaque action vous rapporte des points

    Didier

  3. #3
    Membre éclairé
    Avatar de Kaera
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2011
    Messages : 185
    Par défaut
    Bonjour Ormonth,

    Ci-joint un fichier qui explicitera le résultat attendu.
    Le problème c'est que les cellules ne contiennent pas uniquement PLIF ou PLOF(etc), et les autres cellules peuvent avoir des valeurs relativement variées...
    C'est pour cette raison que j'ai tenté de passer par un If Not avec Or.

    Merci d'avance,

    Kaera*
    Fichiers attachés Fichiers attachés

  4. #4
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    Essaie ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim i As Integer
    Dim tmp as String
     
    i = Range("B65536").End(xlUp).Row
     
    While i > 0
      tmp = Cells(i,2).Value
     
      If InStr(tmp, PLOF) > 0 Or InStr(tmp, PLAF) > 0 Or InStr(tmp, PLUF) > 0 Or InStr(tmp, PLEF) > 0 Then
        Rows(i).Delete
      End If
     
    i = i - 1
    Wend

  5. #5
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    pas ouvert le fichier, mais pour répondre précisément sur la syntaxe, ce code supprime les lignes de MaPlage qui ne comportent pas PLAF ou PLOF.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Gogo()
    Dim objLigne As Range
    Dim I As Long
    Dim J As Long
     
    I = Range("MaPlage").Rows.Count
    For J = I To 1 Step -1
        If Application.WorksheetFunction.CountIf(Range("MaPlage").Rows(J), "PLOF") < 1 And Application.WorksheetFunction.CountIf(Range("MaPlage").Rows(J), "PLAF") < 1 Then
            Range("MaPlage").Rows(J).Delete
        End If
    Next J
    End Sub
    'insensible à la casse
    Attention, on raisonne sur les lignes de MaPlage et pas de la feuille Voir l'image ci-dessous !
    Donc on ne supprime pas les donnés adjacentes..
    Pour la ligne entière, il faudrait écrire en ligne 9 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Rows(Range("MaPlage").Rows(J).Row).Delete
    écriture sympa au niveau de l'objet range

    Cordialement,

    Ps : si le côté technique de la réponse = OK ou pas => pensez à cliquer sur les pouces et quand question résolue à la taguer résolue, et chaque action vous rapporte des points

    Didier
    Images attachées Images attachées  

  6. #6
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    Ce code fait ce qui est indiqué dans ton fichier, on utilise les jokers
    Mais il raisonne ligne par ligne, ce que j'avais compris de la question originale, mais pour ce code, ça ne change rien vu qu'il raisonne sur la plage : MaPlage, c'est donc celle-ci qui délimite la zone, mais du coup pourrai-être optimisé si une seule colonne.

    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 Gogo3()
    Dim objLigne As Range
    Dim i As Long
    Dim J As Long
     
    i = Range("MaPlage").Rows.Count
    For J = i To 1 Step -1
        If Application.WorksheetFunction.CountIf(Range("MaPlage").Rows(J), "*PLOF*") < 1 _
        And Application.WorksheetFunction.CountIf(Range("MaPlage").Rows(J), "*PLAF*") < 1 _
         And Application.WorksheetFunction.CountIf(Range("MaPlage").Rows(J), "*PLUF*") < 1 _
         And Application.WorksheetFunction.CountIf(Range("MaPlage").Rows(J), "*PLIF*") < 1 Then
            Range("MaPlage").Rows(J).Delete
    '        Rows(Range("MaPlage").Rows(J).Row).Delete
        End If
    Next J
    End Sub
    Note : insensible à la casse.

    Cordialement,

    Ps : si le côté technique de la réponse = OK ou pas => pensez à cliquer sur les pouces et quand question résolue à la taguer résolue, et chaque action vous rapporte des points

    Didier

  7. #7
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Quelques liens sur les opérateurs logiques :
    ne pas s'arrêter au tag ou langage du sujet, la logique idem dans ces cas.

    http://plasserre.developpez.com/cour...age-vb4#LV-M-4

    http://www.scientillula.net/MPI/fr14...ogique.html#2b

    http://fr.wikipedia.org/wiki/Table_de_v%C3%A9rit%C3%A9

    Cordialement,

    Ps : si le côté technique de la réponse = OK ou pas => pensez à cliquer sur les pouces et quand question résolue à la taguer résolue, et chaque action vous rapporte des points

    Didier

  8. #8
    Membre éclairé
    Avatar de Kaera
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2011
    Messages : 185
    Par défaut
    Merci beaucoup Ormonth pour ton code final, ça fonctionne très bien.
    Merci également pour les liens
    Edit : excellent le lien de P. Lasserre ! C'est justement là-dessus que je me suis emmêlé les pinceaux (Not/Or/And...).

    Kaera*

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

Discussions similaires

  1. [AC-2010] Syntaxe pour plusieurs Select Case (VbYesNo)
    Par wawa4 dans le forum VBA Access
    Réponses: 2
    Dernier message: 22/05/2012, 21h36
  2. Syntaxe SELECT CASE WHEN avec Microsoft.ACE.OLEDB.12.0
    Par kluh dans le forum Langage SQL
    Réponses: 5
    Dernier message: 28/12/2010, 09h59
  3. Syntaxe select case
    Par Nako_lito dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/08/2009, 10h32
  4. problème de syntaxe pour select case
    Par bddaccess dans le forum VBA Access
    Réponses: 23
    Dernier message: 23/09/2008, 11h24
  5. vérification de passage dans un select case
    Par arsgunner dans le forum ASP
    Réponses: 5
    Dernier message: 14/06/2004, 10h05

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