PB exécution code "événementiel" si plusieurs classeur ouvert

Fermé
commentcamarchepresque Messages postés 3 Date d'inscription mardi 8 décembre 2015 Statut Membre Dernière intervention 11 décembre 2015 - Modifié par commentcamarchepresque le 8/12/2015 à 11:53
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 - 12 déc. 2015 à 15:06
Bonjour à tous,
je travail sur un classeur qui contiens des code événementiels, ceux si fonctionnent que si je n'ai aucune activité sur un autre classeur excel....si c’est le cas, les codes ne se déclenchent plus. je suis alors obliger de fermer complètement excel et ré-ouvrir mon classeur (seul) pour retrouver ces fonctionnalités liés aux événements.
Le code:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim resultat As String
Sheets("Gestionnaire XXXX").Unprotect ("mdp")
If Not Intersect(Target, ActiveWorkbook.Sheets("Gestionnaire XXXX").Range("G6:G905")) Is Nothing Then
'instructions
resultat = InputBox("Veuillez indiquer dans le champ ci-dessous le nombre XXXXXX", "saisie xxxxxx", "0")
ActiveCell.Offset(-1, 4).Value = resultat
End If
Dim cell As Range
For Each cell In ActiveWorkbook.Sheets("Gestionnaire XXXX").Range("G6:G905")
If cell = "" And cell.Offset(0, -1) <> "" And cell.Offset(0, -5) <> 1 And cell.Offset(0, 5) <> "" Then
Dim Rep As Integer
Rep = msgbox("Le prochain audit procces de l'opérateur " & cell.Offset(0, -3) & " au poste " & cell.Offset(0, -2) & " prévu le " & cell.Offset(0, 5) & " doit être réalisé par un XXXXXX." & Chr(10) & Chr(10) & " - cliquer sur OK pour prévenir par E-mail votre partenaire XXXXX." _
& Chr(10) & Chr(10) & " - cliquer sur annuler pour sortir de la procédure ", vbOKCancel + vbInformation, "Information")
If Rep = vbOK Then
' ici le traitement si réponse positive
cell.Offset(0, -5) = 1
Call Mail_auto
Else
' ici le traitement si réponse négative
Exit Sub
End If
End If
Next
End Sub


ce qui m'inquiète, c’est que je ne trouve aucune discussion sur ce type de PB ....
je sèche complètement.

merci par avance aux personnes qui voudront bien m'aider.
A voir également:

4 réponses

Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
9 déc. 2015 à 22:45
Bonjour,

Le problème vient peut-être de l'utilisation de ActiveWorkbook au lieu du classeur concerné [ie : Workbooks("MonClasseur")] et aussi de l'utilisation de Sheets("... sans préciser le classeur concerné.
0
commentcamarchepresque Messages postés 3 Date d'inscription mardi 8 décembre 2015 Statut Membre Dernière intervention 11 décembre 2015
10 déc. 2015 à 12:35
Bonjour Patrice et merci,
j'ai essayé ta proposition,
si je modifie comme cela ->
If Not Intersect(Target,Workbooks("monfichier").Sheets("mafeuille").Range("ma plage"))

j'ai un message d'erreur de type "l'indice n'appartiens pas à la sélection

merci beaucoup pour ton aide
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
Modifié par Patrice33740 le 10/12/2015 à 23:42
C'est donc que soit "monfichier", soit "mafeuille", soit "maplage" n'existe pas !
Pour faire référence à la feuille dont le module contient la macro Worksheet_Change tu peux utiliser simplement Me.
Par exemple :
If Not Intersect(Target, Me.Range("G6:G905")) Is Nothing Then
0
commentcamarchepresque Messages postés 3 Date d'inscription mardi 8 décembre 2015 Statut Membre Dernière intervention 11 décembre 2015
Modifié par commentcamarchepresque le 11/12/2015 à 15:14
Bonjour Patrick,
j'ai essayé te nouvelle proposition, cela m'a permis (je pense..) d'isolé le problème.

j'ai d'abord appliqué les modifs sur une copie local (sur le bureau) du classeur comme cela ->
If Not Intersect(Target, Me.Range("G6:G905")) Is Nothing Then

ET
For Each cell In Me.Range("G6:G905")


là....j'ai testé l'absence de "conflit" un ouvrant un autre classeur(local) -> simulé une activité dessus -> retour sur mon classeur -> résultat ok -> après ce moment de bonheur intence , je l'ai testé un condition réel de fonctionnement.

Le classeur d'origine étant stocké sur un réseau d'entreprise, j'ai appliqué les modifs -> et là....de nouveau "conflit"

En gros, si le classeur est en local, ça fonctionne...mais pas si il est sur le réseau...

Du coup, je n'ai aucune idée de la syntaxe approprié pour pallier au PB...

je vais essayer de faire plus de teste pour confirmer le résultat

merci beaucoup Patrick pour ton aide, vraiment sympa.
++
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
Modifié par Patrice33740 le 12/12/2015 à 15:07
Bonjour,

il reste peut-être encore des instructions à préciser :
au lieu de
Sheets("Gestionnaire XXXX").Unprotect ("mdp")
écrire :
Me.Unprotect ("mdp")

et Activecell est la cellule active de la fenêtre active, donc pas forcement de la feuille concernée :
au lieu de :
ActiveCell.Offset(-1, 4).Value = resultat
écrire :
Target.Offset(-1, 4).Value = resultat

Mais attention
, Target ne représente pas une cellule unique mais une plage de cellule. Par facilité on peut écrire :
Target.Cells(1, 1).Offset(-1, 4).Value = resultat
cependant, il est préférable
- soit d'ignorer la commande quand Target.Count est >1
- soit de traiter le problème pour chaque cellule de Target.


Cordialement
Patrice
0