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 :

Condition "Or" avec format date et texte


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juillet 2008
    Messages
    268
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 268
    Par défaut Condition "Or" avec format date et texte
    Bonjour,

    Je tente de faire en une seule ligne 2 conditions même j'ai un problème d'incompatibilité de type.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Public Sub MoisTest()
     
        With ThisWorkbook.Sheets("Feuil1")
            For i = 3 To 20
                If (.Cells(i, 16).Value = "ok") Or (Month(.Cells(i, 16).Value) = 12) Then
                    Debug.Print .Cells(i, 16) & " ok"
                End If
            Next i
        End With
     
    End Sub
    Passer par 2 conditions successives, je sais faire mais j'aimerais éviter d'alourdir la lisibilité du code en doublant le nombre de ligne à chaque fois.

    Les cellules ont un format que je peux modifier si c'est vraiment nécessaire : dd/mm/yy

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut buzz73 et le forum
    À ma connaissance tu es obligé de passer par 2 tests successifs, tes variables pouvant être du texte, tu ne peux pas tester le mois, ça déclenche une erreur
    A+

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Avec un peu d'astuce il est possible de faire le test sur une seule ligne sans déclencher d'erreur en remplaçant la deuxième partie par ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Month(IIf(IsDate(.Cells(i, 16).Value), 10, .Cells(i, 16).Value)) = 12
    En supposant bien sûr que le contenu de ta cellule est reconnu comme étant une date.

    Attention: à utiliser avec parcimonie, car Month(10) correspond à une date réelle.

  4. #4
    Membre éclairé
    Inscrit en
    Juillet 2008
    Messages
    268
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 268
    Par défaut
    Effectivement, Excel teste toutes les conditions avant de retourner un résultat donc ça plante.

    J'ai essayé la solution de decondelite mais ce n'est pas mois qui remplis les cellules... donc parfois il y a des surprises.
    Finalement, je suis revenu aux tests successifs.

    Merci à vous deux pour vos réponses!

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    La solution que je te propose part du principe que le contenu de ta cellule est interprétable ou non comme étant une date. Ca reconnaît donc également les nombres comme étant des dates: la preuve Month(10) fonctionne très bien, alors que pourtant Month attend un argument de type Date.

    Pour te donner plus de chances et de précision, vérifie avec un test interne supplémentaire si ta cellule contient un simple nombre ou non.

  6. #6
    Membre éclairé
    Inscrit en
    Juillet 2008
    Messages
    268
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 268
    Par défaut
    J'ai testé, ça marche effectivement.
    Merci!
    Par contre, il semblerait qu'il faille préférer le "if... then...else" (d'après des articles lus mais je n'ai pas compris les nuances). Votre avis?

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

Discussions similaires

  1. Incrémentations année avec format date
    Par krfa1 dans le forum ASP
    Réponses: 3
    Dernier message: 14/11/2005, 16h05

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