Workbook_SheetChange - Ma macro se réalise uniquement feuille concernée

Bonjour à tous,

J'ai créé une macro que je souhaite activée dès qu'il y a un changement dans une cellule du classeur. Ma macro ne fonctionne que dans la feuille concernée uniquement.

Je fais appel à la macro également à l'ouverture du classeur, elle ne s'active pas non plus, contrairement aux autres.

Pourriez-vous me dire quel paramètre est erroné ou manquant.

Il faut surement faire appel à la feuille, mais je vois pas la syntaxe à part activate, car je voudrais rester dans la feuille active, et me positionner ensuite dans la feuille suivant la réponse du message que je devrais adapter vbYesNo

Merci par avance.

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

'************************************************************
'Contrôle qu'il n'y a pas un message d'erreur dans les objectifs commerciaux
'************************************************************
Dim Derli2 As Integer   'Dernière ligne
Dim r2       'Compteur

Dim Activite 'Aliment l'activité concernée
    Derli2 = 130 'Positionnement de la dernière ligne de contrôle
       r2 = 0       'Initialisation de la variable

For r2 = 117 To Derli2 Step 1
     If Range("I" & r2).Text = "ERREUR" Then
            Activite = Range("H" & r2).Text
              sRep = MsgBox("A la suite vraisemblablement de modifications de paramètres, vous avez généré des erreurs qu'il vous faut corriger ! " _
              & Chr(10) & Chr(10) & "Il n'y pas de concordance entre les catégories de vente et les catégories d'activité. " & _
              Chr(10) & Chr(10) & " Veuillez vérifier la catégorie de vente " & Activite, vbCritical + vbOKOnly, "Objectifs commerciaux")
            If sRep = vbYes Then Sheets("Objectif com").Activate
                Range("A113").Select
     End If
   Next r2

End Sub

Bonjour Bruce21130 le forum

un petit fichier avec les explications dedans stp

a+

Papou

Bonjour,

Il suffit de déplacer votre code au niveau de ThisWorkBook

Private Sub Workbook_Open()

    Set Sh = ActiveSheet: Set Target = ActiveCell
    Call Workbook_SheetChange(Sh, Target)

End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'*************************************************************
'Contrôle qu'il n'y a pas un message d'erreur dans les objectifs commerciaux
'************************************************************
    Dim Derli2 As Integer 'Derni?re ligne
    Dim r2 'Compteur

    Dim Activite 'Aliment l'activit? concern?e
    Derli2 = 130 'Positionnement de la derni?re ligne de contr?le
    r2 = 0 'Initialisation de la variable

    For r2 = 117 To Derli2 Step 1
        If Range("I" & r2).Text = "ERREUR" Then
            Activite = Range("H" & r2).Text
            sRep = MsgBox("A la suite vraisemblablement de modifications de paramètres, vous avez généré des erreurs qu'il vous faut corriger ! " _
            & Chr(10) & Chr(10) & "Il n'y pas de concordance entre les catégories de vente et les cat?gories d'activit?. " & _
            Chr(10) & Chr(10) & " Veuillez vérifier la catégorie de vente " & Activite, vbCritical + vbOKOnly, "Objectifs commerciaux")
            If sRep = vbYes Then Sheets("Objectif com").Activate
            Range("A113").Select
        End If
    Next r2

End Sub

Bonjour Bruce21130 le forum

un petit fichier avec les explications dedans stp

a+

Papou

Modification d'une cellule dans la feuille objectif ca fonctionne

Modification d'une cellule dans l'autre feuille, je n'ai pas le message

Bonjour,

Il suffit de déplacer votre code au niveau de ThisWorkBook

Merci pour ta réponse,

La modification du code qui est surement adapté n'est pas fonctionnel, et je pense que la raison vient du fait que ma macro ne fonctionne que dans ma feuille active. J'ai d'autres contrôles qui fonctionnent au démarrage.

N'y a t-il pas une instruction nécessaire qui précise au programme, que cette macro concerne la feuille "Objectif com"

Merci par avance pour votre réponse

J'ai apporté une correction en désignant la feuille dans mes instructions et ça fonctionne bien, ainsi qu'au démarrage avec les informations que vous m'avez données.

Pour info voici mes corrections :

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

'************************************************************

'Contrôle qu'il n'y a pas un message d'erreur dans les objectifs commerciaux

'************************************************************

Dim Derli2 As Integer 'Dernière ligne

Dim r2 'Compteur

Dim Activite 'Aliment l'activité concernée

Derli2 = 130 'Positionnement de la dernière ligne de contrôle

r2 = 0 'Initialisation de la variable

For r2 = 117 To Derli2 Step 1

If Worksheets("Objectif Com").Range("I" & r2).Text = "ERREUR" Then

Activite = Worksheets("Objectif Com").Range("H" & r2).Text

sRep = MsgBox("A la suite vraisemblablement de modifications de paramètres, vous avez généré des erreurs qu'il vous faut corriger ! " _

& Chr(10) & Chr(10) & "Il n'y pas de concordance entre les catégories de vente et les catégories d'activité. " & _

Chr(10) & Chr(10) & " Veuillez vérifier la catégorie de vente " & Activite, vbCritical + vbOKCancel, "Objectifs commerciaux")

If sRep = vbOK Then Sheets("Objectif com").Activate

Range("A113").Select

Else: If sRep = vbCancel Then Range("A1").Select

End If

Next r2

End Sub

Bonjour, Salut à tous !

Sans rien regarder d'autre que ta dernière procédure, je la trouve incohérente !

Tu utilises une évènementielle niveau classeur qui se déclenchera lors de modification dans toute cellule ou plage de toutes les feuilles du classeur pour intervenir à chaque fois sur la même feuille, ce sans aucun contrôle sur la feuille concernée (Sh) et/ou la plage concernée (Target)...

Bon courage pour le résultat !

Sais-tu bien comment user d'une évènementielle ?

En outre, la plupart de tes variables ne sont pas typées, alors qu'elles le devraient, une initialisation à 0 d'une variable numérique est inutile tant qu'elle n'a pas pris d'autre valeur...

Cordialement.

Je débute en VBA complètement autodidacte... et j'avance face aux problèmes que je rencontre. Non bien évidemment je ne connais pas encore toutes les subtilités et syntaxes.

Le but de la manoeuvre est de m'informer lorsque l'alerte existe (Erreur) et de me laisser le choix de poursuivre la saisie d'autres informations, sinon il y a une redondance de l'alerte est c'est ennuyeux.

En même temps je me donne les moyens de m'informer de nouveau au démarrage du système.

Dans l'immédiat ça fonctionne bien

Pour les variables ok il y a eu une omission.

Un peu d'indulgence tout de même... !!!

TssTsst ! L'indulgence n'a rien à faire ici !

Si par exemple on ne te fait jamais remarquer qu'une variable a toujours un valeur par défaut, que cette valeur correspond à son type si elle est déclarée et typée : 0 pour une variable numérique, "" (chaîne vide) pour une variable String, False pour une variable booléenne, Empty si non typée (=type Variant par défaut) [laquelle valeur peut s'identifier à 0 ou "" selon contexte...], et si elle n'est pas déclarée, donc pas typée, elle sera de type Variant... Tu peux continuer à l'ignorer, or il est utile de le savoir !

J'ai donc ouvert ton fichier ! Et commencé par essuyer une erreur 9 ! Pas très grave, c'est juste que la feuille Ventes à disparue du classeur... Mais au survol panoramique, j'aurai encore un lot conséquent de remarques à faire ! A toi de les prendre en considération, juste pour ce qu'elles sont, et vérifier par toi-même car sur un Forum on ne peut pas prendre toutes les déclarations pour argent comptant, mieux vaut s'assurer de leur validité, et éventuellement les discuter pour faire apporter des précisions...

Pas le temps d'entrer dans ton fichier dès maintenant... Je dis donc à plus tard !

Cordialement.

Rechercher des sujets similaires à "workbook sheetchange macro realise uniquement feuille concernee"