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 :

Avoir deux conditions dans la fonction If / If not [XL-2010]


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
    Apprenti
    Inscrit en
    Décembre 2013
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2013
    Messages : 44
    Par défaut Avoir deux conditions dans la fonction If / If not
    Bonjour à tous,

    J'ai un léger soucis qui, je pense, ne va pas vous poser de problème!
    Sur cette ligne de code:
    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
    'la macro se déclenche à chaque fois qu'une valeur est entrée dans une cellule de la feuille
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim Ligne As Variant
        'si la saisie concerne une colonne inférieure à 5 et que les saisies des colonnes A, B et D
        'ont été faites
        If Target.Column < 6 And Application.CountA(Cells(Target.Row, 1).Resize(, 5)) = 5 Then
            With Sheets("CalculsMacros")
                'on cherche sur la feuille "CalculsMacros" le numéro de ligne correspondant à l'évènement
                Ligne = Application.Match(Cells(Target.Row, 5), .[C:C], 0)
                'si  on ne le trouve pas, on affecte le n° de la ligne "Autres"
                'on peut aussi rechercher ce n°
                If Not IsNumeric(Ligne) Then Ligne = 9
                'on additionne le nombre de la colonne C de la feuille "saisie-pilote" dans la colonne E
                ' de la feuille "CalculsMacros"
                .Cells(Ligne, 5) = .Cells(Ligne, 5) + Cells(Target.Row, 3)
                .Cells(Ligne, 8) = .Cells(Ligne, 8) + 1
            End With
        End If
    End Sub
    Je souhaiterai que dans la fonction If (ou If not je ne sais pas trop...) soit rajouté une deuxième condition: Que la variable "Ligne" égale la colonne 5 (E) ce qui est déjà fait ET égale la colonne 4 (D).
    En effet, si il y a la même cellule plusieurs fois sur la colonne E alors que sur la colonne D celles-ci sont différentes, la variable "Ligne" va prendre la première cellule trouvée en E alors que ce n'est pas forcément la bonne...

    Je rajoute le fichier en pièce jointe si je me suis mal fait comprendre .

    Cordialement,

    Blend
    Fichiers attachés Fichiers attachés

  2. #2
    Invité
    Invité(e)
    Par défaut Bonjour,
    je ne sai pas si c'est ce que tu cherche!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If IsNumeric(Ligne) Then 
    '?ton code
    else
        Ligne = 9
    end if

  3. #3
    Membre averti
    Homme Profil pro
    Apprenti
    Inscrit en
    Décembre 2013
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2013
    Messages : 44
    Par défaut
    Merci pour ta réponse, je l'ai rajouté en souligné:

    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
    'la macro se déclenche à chaque fois qu'une valeur est entrée dans une cellule de la feuille
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim Ligne As Variant
        'si la saisie concerne une colonne inférieure à 5 et que les saisies des colonnes A, B et D
        'ont été faites
        If Isnumeric(Ligne) And Target.Column < 6 And Application.CountA(Cells(Target.Row, 1).Resize(, 5)) = 5 Then        With Sheets("CalculsMacros")
                'on cherche sur la feuille "CalculsMacros" le numéro de ligne correspondant à l'évènement
                Ligne = Application.Match(Cells(Target.Row, 5), .[C:C], 0)
                'si  on ne le trouve pas, on affecte le n° de la ligne "Autres"
                'on peut aussi rechercher ce n°
                Else Ligne = 9            'on additionne le nombre de la colonne C de la feuille "saisie-pilote" dans la colonne E
                ' de la feuille "CalculsMacros"
                .Cells(Ligne, 5) = .Cells(Ligne, 5) + Cells(Target.Row, 3)
                .Cells(Ligne, 8) = .Cells(Ligne, 8) + 1
            End With
        End If
    End Sub
    Mais après test j'ai "Erreur de compilation: Else sans If". Avec la ligne
    Private Sub Worksheet_Change(ByVal Target As Range)
    en surligné jaune.
    Est-ce mis à la mauvaise place ?

    Sur le fichier joint, la macro ne prend en compte que la colonne E de la feuille 'saisie-pilote' pour reporter la valeur ("Durée") sur la feuille 'CalculsMacros' alors que celle-ci devrait prendre aussi en compte la colonne D.

  4. #4
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Bonjour,

    à quoi sert la ligne n°15 ? Vu que la ligne With a disparu …

  5. #5
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    If Isnumeric(Ligne) And Target.Column < 6 And Application.CountA(Cells(Target.Row, 1).Resize(, 5)) = 5 Then       
     With Sheets("CalculsMacros")
                'on cherche sur la feuille "CalculsMacros" le numéro de ligne correspondant à l'évènement
                Ligne = Application.Match(Cells(Target.Row, 5), .[C:C], 0)
                'si  on ne le trouve pas, on affecte le n° de la ligne "Autres"
                'on peut aussi rechercher ce n°
                Else
     Ligne = 9            'on additionne le nombre de la colonne C de la feuille "saisie-pilote" dans la colonne E
                ' de la feuille "CalculsMacros"
                .Cells(Ligne, 5) = .Cells(Ligne, 5) + Cells(Target.Row, 3)
                .Cells(Ligne, 8) = .Cells(Ligne, 8) + 1
            End With
        End If
    End Sub

  6. #6
    Membre éclairé Avatar de SCryptCypher
    Femme Profil pro
    MacGyver
    Inscrit en
    Novembre 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : MacGyver

    Informations forums :
    Inscription : Novembre 2013
    Messages : 35
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    With Sheets("CalculsMacros")
         If Isnumeric(Ligne) And Target.Column < 6 And Application.CountA(Cells(Target.Row, 1).Resize(, 5)) = 5 Then       
              'on cherche sur la feuille "CalculsMacros" le numéro de ligne correspondant à l'évènement
              Ligne = Application.Match(Cells(Target.Row, 5), .[C:C], 0)
              'si  on ne le trouve pas, on affecte le n° de la ligne "Autres"
              'on peut aussi rechercher ce n°
         Else
              Ligne = 9            'on additionne le nombre de la colonne C de la feuille "saisie-pilote" dans la colonne E
              ' de la feuille "CalculsMacros"
              .Cells(Ligne, 5) = .Cells(Ligne, 5) + Cells(Target.Row, 3)
              .Cells(Ligne, 8) = .Cells(Ligne, 8) + 1
          End If
    End With

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

Discussions similaires

  1. avoir deux serveurs dans un seul et même domaine
    Par Jean-Claude Dusse dans le forum Windows Serveur
    Réponses: 6
    Dernier message: 26/01/2009, 12h03
  2. dégriser un champ : deux arguments dans la fonction
    Par fripette dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 09/06/2008, 18h20
  3. conditions dans la fonction DLookUp
    Par joe370 dans le forum VBA Access
    Réponses: 6
    Dernier message: 07/06/2007, 10h50
  4. Réponses: 2
    Dernier message: 20/01/2006, 15h15
  5. [FLASH MX2004] Deux conditions dans une boucle
    Par pierrot10 dans le forum Flash
    Réponses: 1
    Dernier message: 06/11/2005, 16h31

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