Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/11/2011, 11h22   #1
Membre du Club
 
Avatar de Kaera
 
Femme
Étudiant
Inscription : novembre 2011
Messages : 102
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 22
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Santé

Informations forums :
Inscription : novembre 2011
Messages : 102
Points : 69
Points : 69
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 :
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*
Kaera est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 11h32   #2
Rédacteur
 
Avatar de Ormonth
 
Homme Didier GONARD
Formateur Développeur Office - indépendant
Inscription : février 2008
Messages : 2 353
Détails du profil
Informations personnelles :
Nom : Homme Didier GONARD
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Formateur Développeur Office - indépendant

Informations forums :
Inscription : février 2008
Messages : 2 353
Points : 4 685
Points : 4 685
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
__________________
Didier Gonard

Ps :
Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite !
Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP
N'oubliez pas de mettre : ..quand c'est le cas !
Ormonth est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 22/11/2011, 12h05   #3
Membre du Club
 
Avatar de Kaera
 
Femme
Étudiant
Inscription : novembre 2011
Messages : 102
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 22
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Santé

Informations forums :
Inscription : novembre 2011
Messages : 102
Points : 69
Points : 69
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
Type de fichier : xlsx Test22112011.xlsx (8,6 Ko, 2 affichages)
Kaera est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 12h23   #4
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

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

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
Essaie ça

Code :
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
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 12h44   #5
Rédacteur
 
Avatar de Ormonth
 
Homme Didier GONARD
Formateur Développeur Office - indépendant
Inscription : février 2008
Messages : 2 353
Détails du profil
Informations personnelles :
Nom : Homme Didier GONARD
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Formateur Développeur Office - indépendant

Informations forums :
Inscription : février 2008
Messages : 2 353
Points : 4 685
Points : 4 685
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 :
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 :
 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
Type de fichier : jpg Ormonth444.jpg (51,0 Ko, 3 affichages)
__________________
Didier Gonard

Ps :
Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite !
Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP
N'oubliez pas de mettre : ..quand c'est le cas !
Ormonth est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 13h50   #6
Rédacteur
 
Avatar de Ormonth
 
Homme Didier GONARD
Formateur Développeur Office - indépendant
Inscription : février 2008
Messages : 2 353
Détails du profil
Informations personnelles :
Nom : Homme Didier GONARD
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Formateur Développeur Office - indépendant

Informations forums :
Inscription : février 2008
Messages : 2 353
Points : 4 685
Points : 4 685
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 :
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
__________________
Didier Gonard

Ps :
Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite !
Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP
N'oubliez pas de mettre : ..quand c'est le cas !
Ormonth est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 22/11/2011, 14h40   #7
Rédacteur
 
Avatar de Ormonth
 
Homme Didier GONARD
Formateur Développeur Office - indépendant
Inscription : février 2008
Messages : 2 353
Détails du profil
Informations personnelles :
Nom : Homme Didier GONARD
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Formateur Développeur Office - indépendant

Informations forums :
Inscription : février 2008
Messages : 2 353
Points : 4 685
Points : 4 685
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
__________________
Didier Gonard

Ps :
Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite !
Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP
N'oubliez pas de mettre : ..quand c'est le cas !
Ormonth est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 24/11/2011, 10h05   #8
Membre du Club
 
Avatar de Kaera
 
Femme
Étudiant
Inscription : novembre 2011
Messages : 102
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 22
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Santé

Informations forums :
Inscription : novembre 2011
Messages : 102
Points : 69
Points : 69
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*
Kaera est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h11.


 
 
 
 
Partenaires

Hébergement Web