PB exécution code "événementiel" si plusieurs classeur ouvert
commentcamarchepresque
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
-
Patrice33740 Messages postés 8561 Date d'inscription Statut Membre Dernière intervention -
Patrice33740 Messages postés 8561 Date d'inscription Statut Membre Dernière intervention -
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:
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.
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:
- PB exécution code "événementiel" si plusieurs classeur ouvert
- Code ascii - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans system - Guide
- Code puk bloqué - Guide
- Code activation windows 10 - Guide
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
4 réponses
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é.
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é.
Bonjour Patrice et merci,
j'ai essayé ta proposition,
si je modifie comme cela ->
j'ai un message d'erreur de type "l'indice n'appartiens pas à la sélection
merci beaucoup pour ton aide
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
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 ->
ET
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.
++
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.
++
Bonjour,
il reste peut-être encore des instructions à préciser :
au lieu de
et Activecell est la cellule active de la fenêtre active, donc pas forcement de la feuille concernée :
au lieu de :
Mais attention, Target ne représente pas une cellule unique mais une plage de cellule. Par facilité on peut écrire :
- soit d'ignorer la commande quand Target.Count est >1
- soit de traiter le problème pour chaque cellule de Target.
Cordialement
Patrice
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 = resultatcependant, 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