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 :

If à plusieurs conditions : erreur d'éxecution '13' [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Novembre 2018
    Messages : 25
    Par défaut If à plusieurs conditions : erreur d'éxecution '13'
    Bonjour à tous et à toutes !

    Je viens vers vous car j'ai un problème que je dois régler au plus vite, et j'ai beau chercher une solution, je ne trouve pas !
    Je vous explique le contexte :
    Dans une fiche regroupant plusieurs informations, je dois déterminer un stock restant à l'aide des différentes infos (cases vides ou non)
    Exemple :
    Nom : exemple.png
Affichages : 123
Taille : 5,5 Ko
    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
    23
    24
    25
    Sub Workbook_Open()
    Dim i, Somme As Long
        Sheets("Fiche de vie").Unprotect Password:="12643"
        'Calcul du stock restant
        With Sheets("Fiche de vie")
            For i = 6 To 1000
                If IsDate(.Cells(i, 1)) And .Cells(i, 4) = 0 And .Cells(i, 3) - 15 > Now() Then
                Somme = Somme + 1
                ElseIf IsDate(.Cells(i, 1)) And .Cells(i, 4) = 0 And .Cells(i, 3) = "NA" Then
                Somme = Somme + 1
                ElseIf IsDate(.Cells(i, 1)) And .Cells(i, 4) = 0 And .Cells(i, 3) = "remp a ouv" Then
                Somme = Somme + 1
                End If
                
                If IsDate(.Cells(i, 3)) And .Cells(i, 3) - 15 < Now() Then
                .Cells(i, 3).Select
                Selection.Font.Bold = True
                Selection.Font.ColorIndex = 3
                End If
            Next i
        End With
        'Envoie de la valeur dans la cellule
        Sheets("Fiche de vie").Cells(2, 14) = Somme
        Sheets("Fiche de vie").Protect Password:="12643"
    End Sub
    Donc mon code regarde si la case 1 est vide ou non, si la case 4 est vide ou non, jusque la, il n'y a pas de soucis.
    Mon problème est sur la colonne 3, car nous pouvons avoir, soit une date, soit "NA" si cette information n'est pas donnée OU "Remp a ouv" si l'information n'est pas disponible maintenant.
    Je me doute que l'erreur vient sur la ligne surlignée en rouge (C'est moi qui l'ai mise, et non excel), car il regarde comme si la case 3 était une date, hors ce n'est pas le cas. Mais je n'arrive pas à trouver les modifications requises pour que cela fonctionne..
    J'ai essayé avec un On Error Resume Next, l'erreur ne vient pas, mais mon 2éme IF met "NA" en rouge, et je ne veux pas.

    Merci d'avance de votre aide!

  2. #2
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour Izinoux, et bienvenu sur ce Forum,

    Remarque préliminaire.
    Ce dénombrement ne peut-il pas s'exécuter par les fonctions statistiques, ou autres, natives d'Excel?
    (NB.SI.ENS, SommeProd...)

    Cela dit pour répondre à ta question, il te faut d'abord tester si ta cellule en 3ème colonne est une date.
    Sauf erreur, Excel effectue d'abord l'opération puis regarde la condition.

    Pour plus de clarté, et de rigueur, mieux vaut à mon avis utiliser la méthode Select Case (True, valeur...)

    Reviens si nécessaire

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Novembre 2018
    Messages : 25
    Par défaut
    Bonjour, merci de votre réponse.

    J'avais déjà essayer avec des fonctions propres à excel, je ne sais plus exactement pourquoi mais je ne pouvais pas, ou je n'y arrivais pas. J'ai préféré me pencher sur le vba car je trouvais ça plus simple.

    J'ai essayé avec le Select Case True, mais rien ne s'affiche dans la cellule au finale :
    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
    23
    24
    25
    26
    27
    28
    Sub Workbook_Open()
    Dim i, Somme, x As Long
        Sheets("Fiche de vie").Unprotect Password:="11009"
        'Calcul du stock restant
        With Sheets("Fiche de vie")
            For i = 6 To 1000
            Select Case True
                Case IsDate(.Cells(i, 1)) And .Cells(i, 4) = 0 And .Cells(i, 3) - 15 > Now()
                Somme = Somme + 1
                Case IsDate(.Cells(i, 1)) And .Cells(i, 4) = 0 And .Cells(i, 3) = "NA"
                Somme = Somme + 1
                Case IsDate(.Cells(i, 1)) And .Cells(i, 4) = 0 And .Cells(i, 3) = "remp a ouv"
                Somme = Somme + 1
                Case IsDate(.Cells(i, 1)) And .Cells(i, 4) = 0 And .Cells(i, 3) = 0
                Somme = Somme
                End Select
     
                If IsDate(.Cells(i, 3)) And .Cells(i, 3) - 15 < Now() Then
                .Cells(i, 3).Select
                Selection.Font.Bold = True
                Selection.Font.ColorIndex = 3
                End If
            Next i
        End With
        'Envoie de la valeur dans la cellule
        Sheets("Fiche de vie").Cells(2, 14) = Somme
        Sheets("Fiche de vie").Protect Password:="11009"
    End Sub

  4. #4
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut Izinoux,

    Utiliser Select Case ne te dispense pas de gérer chaque occurence

    ou bien (en intégrant un choix de cas dans un cas)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Case....
         Select Case...
    C'est ici le cas pour les cellules de la 3ème colonne.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Novembre 2018
    Messages : 25
    Par défaut
    Donc ça donnerais plus quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Select Case True
                Case IsDate(Cells(i, 3))
                    If IsDate(.Cells(i, 1)) And .Cells(i, 4) = 0 And .Cells(i, 3) - 15 > Now() Then
                    Somme = Somme + 1
                    End If
                Case .Cells(i, 3) = "NA"
                    If IsDate(.Cells(i, 1)) And .Cells(i, 4) = 0 And .Cells(i, 3) = "NA" Then
                    Somme = Somme + 1
                    End If
                Case .Cells(i, 3) = "remp a ouv"
                    If IsDate(.Cells(i, 1)) And .Cells(i, 4) = 0 And .Cells(i, 3) = "remp a ouv" Then
                    Somme = Somme + 1
                    End If
                End Select
    Ce code me donne toujours rien dans ma cellule, elle reste vide.
    Merci

  6. #6
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut,

    Tu répètes le test sur
    .Cells(i, 3)
    dans chaque cas!

    Essaie plutôt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    If IsDate(.Cells(i, 1)) And .Cells(i, 4).Value = 0 Then
     
            Select Case True
     
                        Case IsDate(Cells(i, 3))
                            Somme = Somme + 1
     
                        Case .Cells(i, 3) = "NA" Or (.Cells(i, 3) = "remp a ouv")
                            Somme = Somme + 1
     
            End Select
     
    End If
    Attention! 0 ne veut pas dire vide!

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 14/09/2010, 11h08
  2. [XSLT] <xsl:if> test sur plusieurs condition
    Par oxilab dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 30/06/2006, 20h30
  3. [SQL] Requete contenant plusieurs conditions
    Par dj-julio dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 17/01/2006, 01h24
  4. Plusieur Condition dans REquette UPDATE
    Par ducseb dans le forum Langage SQL
    Réponses: 12
    Dernier message: 11/08/2005, 11h46
  5. [ Struts ] plusieurs conditions avec equal?
    Par njac dans le forum Struts 1
    Réponses: 7
    Dernier message: 04/06/2004, 09h04

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