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 :

Probleme code WorksheetChange [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 13
    Par défaut Probleme code WorksheetChange
    Bonjour,

    Je cherche à résoudre ce problème en vain et je suis sensée terminer ce fichier d'ici deux jours...
    Je vous explique:

    Mon fichier est un tableau excel dans lequel nous attribuons des notes à des fournisseurs sur des critères prédéfinis et qui génère des notes "finales" (moyenne de critères et note générale) selon des pondérations accordées aux critères notés.
    Plusieurs personnes attribuent des notes à ces critères. Les évaluations portent sur des "segments" définis par des codes

    J'ai mis en place deux macros qui doivent s'activer automatiquement lorsque les cellules concernées sont modifiées:

    - une pour la saisie des informations fournisseurs: lorsque l'on saisit le code du segment l'intitulé apparait
    - une seconde pour donner un message d'avertissement: lorsque la moyenne d'un critère est inférieure à 3 j'aimerai qu'un message alerte apparaisse.

    Ma première macro fonctionne mais pas ma seconde et je n'arrive pas à les mettre ensemble.
    Ma seconde macro: les cellules correspondantes aux moyennes des critères sont: R12, R24, R32, R44, R56, U12, U24, U32, U44, U56, W12, W24, W32, W44 et W56.
    Ces cellules contiennent des formules SI qui ont permis le calcul des moyennes.
    J'aimerai que lorsque l'une ou plusieurs de ces cellules affichent un résultat inférieur ou égal à 3 un message d'alerte apparaisse.

    Je suis partie d'un worksheet change pour la deuxième macro mais cela bug: le message apparait qu'importe le résultat de la cellule ou apparait deux fois à la suite
    j'avais essayé (exemple pour R12):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    WORKSHEET CHANGE (ByVal Target As Range)
    Dim ValR12 As Range
    Set ValR12 = Range("R12")
     
    If ValR12 < 3 Then
    MsgBox "ALERTE"
    Exit Sub
     
    End If
    cela semblait marcher, quand j'ai ajouté toutes les autres cellules cela ne fonctionnait plus...

    Pour la première macro j'étais partie d'un WORKSHEET CALCULATE et ça fonctionne bien mais comment cumuler deux worksheet différets sur la même feuille?
    Comment faire que mes deux macros agissent automatiquement et indépendamment l'une de l'autre?
    Avez vous une proposition pour la seconde macro? (Avec explications je suis débutante?)

    Je vous remercie pour votre aide

    Cordialement,

  2. #2
    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 179
    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 179
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Le code que tu affiches n'est pas correct.
    Une procédure commence toujours par Sub ou Function et une procédure événementielle a pour nom celui de l'objet suivi de l'événement. Tous les deux séparés par un Underscore
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Change(ByVal Target As Range)
     MsgBox "Adresse " & Target.Value
    End Sub
    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

  3. #3
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonsoir Mtiaeaix, Philippe, bonsoir le forum,

    Si les cellules contiennent des formules, je pense qu'il serait plus judicieux d'utiliser la macro événementielle Calculate. Peut-être comme ça :

    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
    Private Sub Worksheet_Calculate()
    Dim PL As Range 'déclare la variable PL (PLage)
    Dim CEL As Range 'déclare la variable CEL (CELlule)
    Dim MSG As String 'déclare la variable MSG (MeSsaGe)
     
    'définit la plage PL
    Set PL = Application.Union(Range("R12"), Range("R24"), Range("R32"), Range("R44"), Range("R56"), _
       Range("U12"), Range("U24"), Range("U32"), Range("U44"), Range("U56"), _
       Range("W12"), Range("W24"), Range("W32"), Range("W44"), Range("W56"))
     
    For Each CEL In PL 'boucle sur toutes les cellule CEL de l aplage PL
        If CEL.Value < 3 Then 'condition : si la valeur de la cellule CEL est inférieure à 3
            'définit le message MSG
            MSG = IIf(MSG = "", "Alerte cellule : " & CEL.Address(0, 0), MSG & Chr(10) & "Alerte cellule : " & CEL.Address(0, 0))
        End If 'fin de la condition
    Next CEL 'prochaine cellule de la boucle
    MsgBox MSG 'affiche le message MSG
    End Sub
    Pour pas qu'il y ait d'interférence avec la première macro il faudrait que tu en fournisses le code...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 13
    Par défaut Re
    Bien entendu qu'il y a private Sub et End Sub...
    Je n'avais pas jugé utile de le noter car je me rendais compte que le problème venait de la conception de mes conditions...

    J'avais essayé aussi avec Calculate selon mon modèle et ça ne fonctionnait pas j'étais tellement désespérée que j'avais abandonné le calculate!

    Merci Tauthème demain matin je teste cette solution qui me parait correspondre PARFAITEMENT.
    Une question supplémentaire à ce sujet: worksheet calculate fonctionne même si les calculs sont en automatique? (J'avais lu qu'il fallait cocher recalcule et décocher calcul automatique dans outils options!)

    Pour ma première macro: J'ai 3 cellules B4, B5 et B6 dans lesquelles nous saisissons le code du segment
    l'intitulé doit apparaitre dans les cellules C4, C5, C6

    B4 est le code du premier segment et C4 son intitulé
    B5 est le code du second segment (s'il y a, ce n'est pas obligatoire ça peut être vide) et C5 son intitulé
    et idem B6

    Je l'ai faite à partir de calculate

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim ValB4 As Range
     
    ValB4 = Range("B4")
     
    If ValB4 = "CODE SEGMENT" Then
    "INTITULE"
    ElseIf ValB4 = "CODE SEGMENT" Then
    jusqu'à épuisement de mes codes segments

    puis le même avec B5 et le même avec B6

    (Je pense que l'on eut faire avec Select Case)

    Je vous remercie pour votre aide

  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 179
    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 179
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Bien entendu qu'il y a private Sub et End Sub...
    Je n'avais pas jugé utile de le noter car je me rendais compte que le problème venait de la conception de mes conditions...
    A quoi bon prévoir des balises pour insérer son code si on commence à le retaper.
    Déjà lorsque l'on tape des lignes de code, on a régulièrement des erreurs de syntaxes dû à de multiples raisons donc si tu veux avoir des réponses correctes par rapport à tes questions il est plus facile de faire un copier/coller de ta procédure que d'en retaper les lignes.
    Enfin c'est mon avis.
    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
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 13
    Par défaut
    je suis d'accord mais je ne suis pas sur mon poste de travail et je n'ai pas le copié collé à porter de mains.
    Mais je commence déjà à tester les pistes que vous me donnez
    Demain matin je vous enverrai le copié collé mais en dehors du private sub end sub le contenu était exactement ce que j'ai noté plus haut

    Re bonjour,

    J'ai tenté d'ajouter le code de tautheme mais cela ne fonctionne pas. En fait le message apparait peu importe si le critère est inférieur à 3 ou supérieur. Or j'aimerai que le message "Veuillez saisir une ligne évènement" n'apparaisse que lorsque l'un ou plusieurs des critères à une note inférieure à 3. De plus le message destiné aux modifications des cellules critères s'affiche même lors de modifications de mes cellules codes et intitulés.

    Voici mes deux codes superposés (j'ai remplacé les intitulés par des lettres car le contenu est confidentiel.)

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
     
    Private Sub Worksheet_Calculate()
     
    Dim valB4, valB5, valB6, valC4, valC5, valC6 As Range
     
        valB4 = Range("B4")
        valB5 = Range("B5")
        valB6 = Range("B6")
        valC4 = Range("C4")
        valC5 = Range("C5")
        valC6 = Range("C6")
     
     
    If Range("B4") <> valB4 Then
    valB4 = Range("B4")
     
        If Range("B4") = "1BCDFR" Then
        Range("C4") = "FFFFFFF"
     
        ElseIf Range("B4") = "1CCDRE" Then
        Range("C4") = "FFFFFFFE"
     
        ElseIf Range("B4") = "1DCDRF" Then
        Range("C4") = "MMMMMM"
     
        ElseIf Range("B4") = "1ETRGF" Then
        Range("C4") = "CCCCCCC"
     
        ElseIf Range("B4") = "1FTYHG" Then
        Range("C4") = "NNNNNNN"
     
    End If
     
    End If
     
    If Range("B5") <> valB5 Then
    valB5 = Range("B5")
     
        If Range("B5") = "1BCDFR" Then
        Range("C5") = "FFFFFFF"
     
        ElseIf Range("B5") = "1CCDRE" Then
        Range("C5") = "FFFFFFFE"
     
        ElseIf Range("B5") = "1DCDRF" Then
        Range("C5") = "MMMMMM"
     
        ElseIf Range("B5") = "1ETRGF" Then
        Range("C5") = "CCCCCCC"
     
        ElseIf Range("B5") = "1FTYHG" Then
        Range("C5") = "NNNNNNN"
    End If
     
    End If
     
    If Range("B6") <> valB6 Then
    valB64 = Range("B6")
     
        If Range("B6") = "1BCDFR" Then
        Range("C6") = "FFFFFFF"
     
        ElseIf Range("B6") = "1CCDRE" Then
        Range("C6") = "FFFFFFFE"
     
        ElseIf Range("B6") = "1DCDRF" Then
        Range("C6") = "MMMMMM"
     
        ElseIf Range("B6") = "1ETRGF" Then
        Range("C6") = "CCCCCCC"
     
        ElseIf Range("B6") = "1FTYHG" Then
        Range("C6") = "NNNNNNN"
    End If
     
    End If
     
    Dim PL As Range
    Dim CEL As Range
    Dim MSG As String
     
    Set PL = Application.Union(Range("R12"), Range("R24"), Range("R32"), Range("R44"), Range("R56"), _
       Range("U12"), Range("U24"), Range("U32"), Range("U44"), Range("U56"), _
       Range("W12"), Range("W24"), Range("W32"), Range("W44"), Range("W56"))
     
    For Each CEL In PL
    If CEL.Value < 3 Then
     MSG = IIf(MSG = "", "Alerte cellule : " & CEL.Address(0, 0), MSG & Chr(10) & "Alerte cellule : " & CEL.Address(0, 0))
    End If
    Next CEL
    MsgBox "Veuillez saisir une ligne évènement"
     
    End Sub
    Si vous pouviez m'aider ce serait top!!!

    Merci encore

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

Discussions similaires

  1. Probleme code sql
    Par Micavk dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 25/01/2006, 14h28
  2. probleme code vba ne s'execute pas apres instruction sql
    Par arnogef dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 29/12/2005, 12h34
  3. [TP] Problème code touche clavier
    Par phildeb dans le forum Turbo Pascal
    Réponses: 10
    Dernier message: 02/12/2005, 22h44
  4. Probleme code asm dans .c
    Par sorry60 dans le forum C
    Réponses: 5
    Dernier message: 18/04/2005, 13h15
  5. [langage] probleme code
    Par louisis dans le forum Langage
    Réponses: 5
    Dernier message: 30/06/2004, 17h43

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