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 :

Conditions avec les fonctions ET et OU [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 Conditions avec les fonctions ET et OU
    Bonjour à tous,

    J'ai réalisé un fichier Excel pour des pilotes en usine de production mais après une semaine de test, je me suis rendu compte qu'il y avait encore certaines choses à revoir... Je me tourne donc vers vous et votre science infuse !

    Après rajout d'une colonne "Fréquence", mon souhait serais:
    Si la durée est mise ainsi que la Machine/Cause mais pas la fréquence, alors sur la feuille 'CalculsMacros' cette durée se rajoute à celle déjà présente (Durée totale) et que la fréquence augmente de +1 à la ligne correspondant à la Machine/Cause.
    Si la fréquence est mise ainsi que la Machine/Cause (La durée dans ce cas n'est pas importante) alors sur la feuille 'CalculsMacros' la fréquence se rajoute à celle déjà présente et la durée totale augmente de 5min toujours à la ligne de la Machine/Cause.

    Voici une partie de la macro de la feuille 'Saisie-pilote' qui me reportait la durée et rajoutait +1 à la fréquence:
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    '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)
     
    'définir les variables
        Dim Ligne As Variant
        Dim Plage As Range
        Dim Cel As Range
        Dim Chaine As String
     
        'saisie en colonnes A à F non vides
        If Target.Column < 7 And Application.CountA(Cells(Target.Row, 3).Resize(, 6)) = 10 Then
     
            'concatène le nom de la machine avec le nom du problème
            Chaine = Cells(Target.Row, 5) & Cells(Target.Row, 6)
     
            With Sheets("CalculsMacros")
     
                'on cherche sur la feuille "CalculsMacros" le numéro de ligne correspondant à l'évènement et au nom de la machine
                Set Plage = .Range(.Cells(4, 2), .Cells(.Rows.Count, 2).End(xlUp))
     
                For Each Cel In Plage
     
                    If Cel.Value & Cel.Offset(, 1).Value = Chaine Then
     
                        Ligne = Cel.Row
                        Exit For
     
                    End If
     
                Next Cel
     
                '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
    A noter que sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        'saisie en colonnes A à F non vides
        If Target.Column < 7 And Application.CountA(Cells(Target.Row, 3).Resize(, 6)) = 10 Then
    j'ai mis le comptage = 10 pour ne pas que le reste de la macro s'effectue pour éviter les erreurs ou les abérations.

    Merci de votre aide,
    Cordialement

    Blend
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Par défaut condition avec les fonction "et" "ou"
    bonsoir,

    je suis partis sur ma précédente proposition.

    logique déduite de tes conditions
    si fréquence <> "" alors
    CMfrequence = CMfrequence + SPfrequence
    CMduree = CMduree + 5
    sinon
    CMfrequence = CMfrequence + 1
    CMduree = CMduree + SPduree

    je ne comprends pas l'intéret du 10 puisque la macro fonctionne uniquement si target colonne 6 est reconnu.

    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
    29
    30
    31
    32
    33
    34
    35
     
    Private Sub Worksheet_Change(ByVal Target As Range)
     
        If Target.Column <> 6 Then Exit Sub  ' le target ne concerne que la colonne 6
        Dim Ligne As Integer
        Dim trouvé As Boolean
        trouvé = False
        'si toutes les colonnes de 3 à 6 sont renseignées
     
            With Sheets("CalculsMacros")
              'on cherche sur la feuille "CalculsMacros" la première ligne de la machine correspondant à l'évènement
               Ligne = Application.Match(Cells(Target.Row, 5), .[A:A], 0) ' départ de la recherche
     
               Do While .Cells(Ligne, 1) = Target.Offset(0, -1) ' "Autre" est traité comme un cas courant dans la boucle
     
                  If .Cells(Ligne, 3) = Target Then
                      If Target.Offset(0, -2) <> "" Then
                         .Cells(Ligne, 5) = .Cells(Ligne, 5) + 0.5
                         .Cells(Ligne, 8) = .Cells(Ligne, 8) + Cells(Target.Row, 4)
                      Else
                         .Cells(Ligne, 5) = .Cells(Ligne, 5) + Cells(Target.Row, 3)
                         .Cells(Ligne, 8) = .Cells(Ligne, 8) + 1
                      End If
                      trouvé = True
                      Exit Do
                  End If
                  Ligne = Ligne + 1
              Loop
     
              If trouvé = False Then
                 MsgBox " cas incompatible avec le choix dans une liste "
              End If
            End With
     
    End Sub
    adapte le tout à ton goût.

    Cordialement,

  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
    Bonsoir Nibledispo,

    Merci beaucoup, je n'ai pu répondre avant par soucis de temps...

    Je viens de réaliser plusieurs tests, cependant, pourquoi le +0.5
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Cells(Ligne, 5) = .Cells(Ligne, 5) + 0.5
    rajoute 12:00 dans la durée ? J'ai essayé de modifié en 00:05 (5min) mais cela ne fonctionne pas .
    Ta macro me plait bien, elle est claire. J'essaie donc de la modifier afin de résoudre mon problème mais je ne sors que des erreurs --'.
    De plus, par exemple, on choisit la Cause1 avec la fréquence (pas de durée) pas de problème. Mais si on re-choisit cette même cause1 avec la durée cette fois-ci, la fréquence se réinitialise.
    Il en est de même avec la durée .
    Une solution ?

    Bien cordialement,

    Blend

  4. #4
    Membre Expert
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Par défaut conditions avec les fonctions ET et OU
    Bonjour,

    La gestion des heures est une horreur à laquelle je ne comprends rien.
    Dans le code, j'ai modifié "0.5" par (timevalue("0:05").

    Pour la seconde remarque, je ne vois pas que les fréquences se réinitialisent.

    Enfin, pour parvenir au résultat, j'ai modifié :
    - ta formule calcul du temps inutilement compliquée (*24) dans la feuille de saisie.
    - le format du temps dans la feuille calcul.

    essai le fichier joint.
    Fichiers attachés Fichiers attachés

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    La gestion des heures est une horreur à laquelle je ne comprends rien.
    Dans le code, j'ai modifié "0.5" par (timevalue("0:05").
    A lire Utiliser les fonctions Date et Heure sous Excel 2007 et déjà le chapitre II. Généralités au sujet des dates et des heures dans Excel
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    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
    Bonjour,

    Bien vu le Timevalue, cela fonctionne!
    De plus, avec ton fichier les fréquences s'additionnent bien alors que sur le miens, il prend seulement la dernière valeur... Je ne me suis pas trop posé de questions et j'ai directement pris la suite de ton fichier en rajoutant mes anciennes modif' .

    Par contre, au niveau de la durée, est-il possible de multiplier les 5min (si la durée en 'saisie-pilote' n'est pas mise) par le nombre de fréquence ? En prenant en compte que si aucune fréquence n'est mise, le chiffre "1" est directement ajouté ?

    Enfin, pour revenir au numéro 10:
    je ne comprends pas l'intéret du 10 puisque la macro fonctionne uniquement si target colonne 6 est reconnu.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'saisie en colonnes A à F non vides
        If Target.Column < 7 And Application.CountA(Cells(Target.Row, 3).Resize(, 6)) = 10 Then
    La somme des colonnes non vides était à l'origine = 3 (Machine+Cause+Durée) dans le but d'éviter que la macro s'effectue si on ajoute seulement la machine/cause sans durée ni fréquence. Car cela entraine un #VALEUR! à la cellule "% du temps de prod" en 'Saisie-pilote'.
    Faudrait-il donc la rajouter afin d'éviter cette possible erreur si les pilotes cliquent avant sur "choisir machine/cause" ?

    Encore merci de votre aide,
    Cordialement,

    Blend

  7. #7
    Membre Expert
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Par défaut conditions avec les fonctions ET et OU
    Bonjour,

    Vois si cela peut convenir.

    tu ne crois pas qu'il sera peut-être nécessaire à un moment de remettre les compteurs à 0 dans la feuille calcul ?

    Cordialement,
    Fichiers attachés Fichiers attachés

  8. #8
    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
    Bonjour nibledispo, bonjour à tous,

    Encore une fois merci beaucoup !

    J'ai modifié tout ça. Sujet résolu! Je ne devrais plus vous embêter avec ce fichier maintenant...!

    Pour te répondre, remettre à zéro n'est pas utile dans mon cas car c'est un document annuel (on remettra à zéro pour 2015 mais un archivage suffira).

    Bonne journée,

    Blend

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 03/05/2006, 01h24
  2. problème avec les fonctions MidStr et LeftStr
    Par timsah dans le forum C++Builder
    Réponses: 1
    Dernier message: 07/02/2006, 10h07
  3. Réponses: 2
    Dernier message: 10/05/2005, 10h58
  4. Problème avec les fonctions
    Par jvachez dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 13/01/2004, 12h06
  5. [Postgresql]Problème avec les fonctions ...
    Par fet dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/10/2003, 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