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 SubBonjour Bruce21130 le forum
un petit fichier avec les explications dedans stp
a+
Papou
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
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 SubBonjour,
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 !
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 !
Pas le temps d'entrer dans ton fichier dès maintenant... Je dis donc à plus tard !
Cordialement.