Quelle type de boucle pour tester conditions Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Avatar du membre
pipout64
Membre habitué
Membre habitué
Messages : 85
Inscrit le : 19 avril 2013
Version d'Excel : 2007 FR

Message par pipout64 » 9 janvier 2020, 10:37

Bonjour à tous.

J'ai souvent besoin de tester des batch de fichiers XML.
Un parser permet de relever les erreurs de structures de ces fichiers XML.
Un rapport d'erreurs est généré et je me retrouve parfois avec des milliers de lignes et énormément d'erreurs en doublon.
Mais bon nombre d'erreurs sont "normales" car les fichiers XML testés sont "bruts" et nécessitent des étapes de finalisation ultérieures.
Je souhaite supprimer toutes les lignes qui contiennent un message d'erreur que j'ai identifié afin de n'avoir à la fin que les erreurs qui nécessitent une vraie action/correction de ma part.
J'ai identifié une quinzaine de messages d'erreurs "normales et polluantes à supprimer du rapport" et les ai déclarés dans des constantes typées string.

Ex:
Dim SheetRapportBIRD As Worksheet
Dim nbLine As Long
Dim x As Long
Dim MessageErreur As String
...
Const inwork As String = "Attribute @inwork of element <issno> is always used with value ""00"""
Const comments As String = "Comments are not allowed in XML elements."
Const NotationCGM1 As String = "[NOTATION ERROR]: Notations cgm system ID(s) must be empty."
Const DocTypePMC As String = "[DOCTYPE ERROR] DOCTYPE must be present in the document "
...

nbLine = SheetRappor.UsedRange.Rows.Count
For x = nbLine To 1 Step -1
    MessageErreur = SheetRapportBIRD.Range("B" & x)
    If MessageErreur = inwork Or MessageErreur = comments Or MessageErreur = NotationCGM1 Or MessageErreur = DocTypePMC Then
        SheetRapportBIRD.Range("B" & x).Delete
    End If
Next
Je voulais donc boucler sur toutes les lignes de ma sheet avec du For Next en partant de la dernière ligne step -1 et mettre une condition pour tester si la cellule contenant le message d'erreur correspondait aux messages d'erreurs déclarés dans mes constantes.
Le problème c'est que je ne peux pas utiliser un IF avec beaucoup de conditions du style:

Si contenu de la cellule A3652 = inwork OU cellule A3652= comments OU cellule A3652= NotationCGM1 OU cellule A3652= DocTypePMC OU cellule A3652=...... alors supprimer la ligne 3652.

Je suppose que je ne peux pas utiliser une vingtaine de OU dans ma condition IF ?

Et je ne suis pas sûr que créer autant de boucles for next qu'il y a de constantes déclarées soit hyper efficace.
J'ai regardé du côté de select case mais ça ne me paraît pas plus efficace.
Je ne maîtrise pas trio les boucles while mais j'aurais le même problèmes puisque c'est le nombre de conditions qui me pose problème.

Merci d'avance pour vos lumières.

Bonne journée.
Avatar du membre
bigdaddy154
Membre impliqué
Membre impliqué
Messages : 1'207
Appréciations reçues : 47
Inscrit le : 5 mars 2014
Version d'Excel : 2010

Message par bigdaddy154 » 9 janvier 2020, 10:52

Bonjour,

peut être en partant sur un
Select case
https://docs.microsoft.com/fr-fr/dotnet ... -statement

Cordialement
Avatar du membre
pipout64
Membre habitué
Membre habitué
Messages : 85
Inscrit le : 19 avril 2013
Version d'Excel : 2007 FR

Message par pipout64 » 9 janvier 2020, 11:03

J'ai regardé un peu mais je serai obligé d'énumérer tous les case et je pense donc que ça ne m'avancera pas plus.
Je viens de tester un IF avec 10 conditions (OR) et ça fonctionne bien.
Au pire, je peux voir jusqu'où ça passe en mettant un maximum de "OR" sur le même IF et recréer une ou 2 boucles supplémentaires pour fractionner un peu mes IF...
Avatar du membre
bigdaddy154
Membre impliqué
Membre impliqué
Messages : 1'207
Appréciations reçues : 47
Inscrit le : 5 mars 2014
Version d'Excel : 2010

Message par bigdaddy154 » 9 janvier 2020, 11:15

Sinon tu créé un tableau avec toutes tes erreurs normales dedans et tu boucles sur ton tableau si ton erreur est trouvée tu delete sinon tu laisses :mrgreen:

Cordialement
Avatar du membre
pipout64
Membre habitué
Membre habitué
Messages : 85
Inscrit le : 19 avril 2013
Version d'Excel : 2007 FR

Message par pipout64 » 10 janvier 2020, 09:23

Bon finalement, j'ai mis 10 OR dans ma condition "IF" et ça passe nickel.
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message