OVH Cloud OVH Cloud

macro - 2 procédures incompatibles ?

8 réponses
Avatar
j-pascal
Bonsoir à toutes et à tous,

Dans une feuille, j'ai les 2 procédures suivantes :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, cancel As
Boolean)
If Target.Column = 7 Or Target.Column = 40 Then
If Target.Offset(0, 6).Value = "x" Then
Target.Offset(0, 6).Value = ""
Else
Target.Offset(0, 6).Value = "x"
End If
End If
cancel = True
End Sub


Private Sub Worksheet_Change(ByVal Target As Range)
If Target = Range("M2") Then
MsgBox Target.Address & "a changé"
End If
End Sub


Je vois, vous riez déjà ;-) Ca ne marche pas ! Elles fonctionnent séparément
seulement... Peut-on lever ce genre d'incompatibilité ?

Un grand merci d'avance pour vos lumières,

JP

8 réponses

Avatar
lSteph
Re, Bonsoir,

Peut-être ne vois-je pas bien, quel est le problème?

lSteph

"j-pascal" a écrit dans le message de news:

Bonsoir à toutes et à tous,

Dans une feuille, j'ai les 2 procédures suivantes :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, cancel As
Boolean)
If Target.Column = 7 Or Target.Column = 40 Then
If Target.Offset(0, 6).Value = "x" Then
Target.Offset(0, 6).Value = ""
Else
Target.Offset(0, 6).Value = "x"
End If
End If
cancel = True
End Sub


Private Sub Worksheet_Change(ByVal Target As Range)
If Target = Range("M2") Then
MsgBox Target.Address & "a changé"
End If
End Sub


Je vois, vous riez déjà ;-) Ca ne marche pas ! Elles fonctionnent
séparément seulement... Peut-on lever ce genre d'incompatibilité ?

Un grand merci d'avance pour vos lumières,

JP


Avatar
j-pascal
Re,

Je n'arrive pas à exécuter la 2nd procédure sauf si je "désactive" la
première. Je me demande donc si on peut mettre deux procédure de ce genre
dans une même feuille ?

JP

lSteph wrote:
Re, Bonsoir,

Peut-être ne vois-je pas bien, quel est le problème?

lSteph

"j-pascal" a écrit dans le message de news:

Bonsoir à toutes et à tous,

Dans une feuille, j'ai les 2 procédures suivantes :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range,
cancel As Boolean)
If Target.Column = 7 Or Target.Column = 40 Then
If Target.Offset(0, 6).Value = "x" Then
Target.Offset(0, 6).Value = ""
Else
Target.Offset(0, 6).Value = "x"
End If
End If
cancel = True
End Sub


Private Sub Worksheet_Change(ByVal Target As Range)
If Target = Range("M2") Then
MsgBox Target.Address & "a changé"
End If
End Sub


Je vois, vous riez déjà ;-) Ca ne marche pas ! Elles fonctionnent
séparément seulement... Peut-on lever ce genre d'incompatibilité ?

Un grand merci d'avance pour vos lumières,

JP




Avatar
lSteph
chez moi tes deux subs s'enchainent sans souci!
si en g2 je dblclique j'obtiens un x en m2 et le message ,
si je répète le x s'éfface, puis j'ai le message;
et si je modifie direct m2 j'ai bien le message .

lSteph

"j-pascal" a écrit dans le message de news:

Re,

Je n'arrive pas à exécuter la 2nd procédure sauf si je "désactive" la
première. Je me demande donc si on peut mettre deux procédure de ce genre
dans une même feuille ?

JP

lSteph wrote:
Re, Bonsoir,

Peut-être ne vois-je pas bien, quel est le problème?

lSteph

"j-pascal" a écrit dans le message de news:

Bonsoir à toutes et à tous,

Dans une feuille, j'ai les 2 procédures suivantes :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range,
cancel As Boolean)
If Target.Column = 7 Or Target.Column = 40 Then
If Target.Offset(0, 6).Value = "x" Then
Target.Offset(0, 6).Value = ""
Else
Target.Offset(0, 6).Value = "x"
End If
End If
cancel = True
End Sub


Private Sub Worksheet_Change(ByVal Target As Range)
If Target = Range("M2") Then
MsgBox Target.Address & "a changé"
End If
End Sub


Je vois, vous riez déjà ;-) Ca ne marche pas ! Elles fonctionnent
séparément seulement... Peut-on lever ce genre d'incompatibilité ?

Un grand merci d'avance pour vos lumières,

JP







Avatar
j-pascal
Re re re, ;-)

Chez moi, ça ne marche pas sauf si je change manuellement le chiffre de la
cellule "M2". Peut-être parce-que :

"M2"=NB.SI(M7:M206;"x") ! Le chiffre change car comme tu l'as constaté le nb
de "x" change au doubles clics sur la colonne "G". Je ne comprends pas
pourquoi ???

Peut-être à demain ?

Bonne nuit,

JP

lSteph wrote:
chez moi tes deux subs s'enchainent sans souci!
si en g2 je dblclique j'obtiens un x en m2 et le message ,
si je répète le x s'éfface, puis j'ai le message;
et si je modifie direct m2 j'ai bien le message .

lSteph

"j-pascal" a écrit dans le message de news:

Re,

Je n'arrive pas à exécuter la 2nd procédure sauf si je "désactive" la
première. Je me demande donc si on peut mettre deux procédure de ce
genre dans une même feuille ?

JP

lSteph wrote:
Re, Bonsoir,

Peut-être ne vois-je pas bien, quel est le problème?

lSteph

"j-pascal" a écrit dans le message de
news:
Bonsoir à toutes et à tous,

Dans une feuille, j'ai les 2 procédures suivantes :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range,
cancel As Boolean)
If Target.Column = 7 Or Target.Column = 40 Then
If Target.Offset(0, 6).Value = "x" Then
Target.Offset(0, 6).Value = ""
Else
Target.Offset(0, 6).Value = "x"
End If
End If
cancel = True
End Sub


Private Sub Worksheet_Change(ByVal Target As Range)
If Target = Range("M2") Then
MsgBox Target.Address & "a changé"
End If
End Sub


Je vois, vous riez déjà ;-) Ca ne marche pas ! Elles fonctionnent
séparément seulement... Peut-on lever ce genre d'incompatibilité ?

Un grand merci d'avance pour vos lumières,

JP








Avatar
lSteph
Bonjour,

"M2"=NB.SI(M7:M206;"x")
Deux pb alors:

1 "Change" répond à un changement par l'utilisateur et non par le calcul
=> utiliser "Calculate" mais ici tu veux cibler le changement uniquement
sur m2, on va utiliser une variable globale.
(tu pourra
2 si tu dblcliques en g2 cela devrait tout bonnement écraser ta formule en
m2
=>pour éviter cela optimiser la condition sur target
Et une question: à quoi sert le 40 puisque par offset de 6 il ne modifiera
pas M:M

Possibilité :

'''''*******Dans module1*******
Public mavar

''''''****** dans thisworkbook******
Private Sub Workbook_Open()
mavar = Feuil1.[m2].Value
End Sub

'''''******Dans le code de la feuille*******
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, cancel As
Boolean)

mavar = [m2].Value
If Target.Row > 2 And (Target.Column = 7 Or Target.Column = 40) Then
If Target.Offset(0, 6).Value = "x" Then
Target.Offset(0, 6).Value = ""
Else
Target.Offset(0, 6).Value = "x"
End If

End If
cancel = True
End Sub


Private Sub Worksheet_Calculate()
If [m2].Value <> mavar Then
MsgBox " M2 a changé"
mavar = [m2].Value
End If
End Sub

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

'lSteph

"j-pascal" a écrit dans le message de news:

Re re re, ;-)

Chez moi, ça ne marche pas sauf si je change manuellement le chiffre de la
cellule "M2". Peut-être parce-que :

"M2"=NB.SI(M7:M206;"x") ! Le chiffre change car comme tu l'as constaté le
nb de "x" change au doubles clics sur la colonne "G". Je ne comprends pas
pourquoi ???

Peut-être à demain ?

Bonne nuit,

JP

lSteph wrote:
chez moi tes deux subs s'enchainent sans souci!
si en g2 je dblclique j'obtiens un x en m2 et le message ,
si je répète le x s'éfface, puis j'ai le message;
et si je modifie direct m2 j'ai bien le message .

lSteph

"j-pascal" a écrit dans le message de news:

Re,

Je n'arrive pas à exécuter la 2nd procédure sauf si je "désactive" la
première. Je me demande donc si on peut mettre deux procédure de ce
genre dans une même feuille ?

JP

lSteph wrote:
Re, Bonsoir,

Peut-être ne vois-je pas bien, quel est le problème?

lSteph

"j-pascal" a écrit dans le message de
news:
Bonsoir à toutes et à tous,

Dans une feuille, j'ai les 2 procédures suivantes :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range,
cancel As Boolean)
If Target.Column = 7 Or Target.Column = 40 Then
If Target.Offset(0, 6).Value = "x" Then
Target.Offset(0, 6).Value = ""
Else
Target.Offset(0, 6).Value = "x"
End If
End If
cancel = True
End Sub


Private Sub Worksheet_Change(ByVal Target As Range)
If Target = Range("M2") Then
MsgBox Target.Address & "a changé"
End If
End Sub


Je vois, vous riez déjà ;-) Ca ne marche pas ! Elles fonctionnent
séparément seulement... Peut-on lever ce genre d'incompatibilité ?

Un grand merci d'avance pour vos lumières,

JP











Avatar
lSteph
Bonsoir,
Enfin là je suis sûr que j'ai la bonne réponse!
Je ne suis pas sûr d'être clair ?!
Tu ne resteras pas dans le doute, ce coup là

j'ai vraiment rien compris.
;o)))

A+

lSteph
"j-pascal" a écrit dans le message de news:

Bonjour !

"M2"=NB.SI(M7:M206;"x")
Deux pb alors:

1 "Change" répond à un changement par l'utilisateur et non par le
calcul => utiliser "Calculate" mais ici tu veux cibler le changement
uniquement sur m2, on va utiliser une variable globale.
(tu pourra
2 si tu dblcliques en g2 cela devrait tout bonnement écraser ta
formule en m2
=>pour éviter cela optimiser la condition sur target
Et une question: à quoi sert le 40 puisque par offset de 6 il ne
modifiera pas M:M


En fait, il y a deux colonnes "M" et "AT" dans lesquelles s'inscrivent des
"x" (désolé, j'aurais dû te le préciser plus tôt)


Possibilité :

'''''*******Dans module1*******
Public mavar


Pourquoi "public" ?

''''''****** dans thisworkbook******
Private Sub Workbook_Open()
mavar = Feuil1.[m2].Value
End Sub

'''''******Dans le code de la feuille*******
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, cancel
As Boolean)

mavar = [m2].Value
If Target.Row > 2 And (Target.Column = 7 Or Target.Column = 40) Then
If Target.Offset(0, 6).Value = "x" Then
Target.Offset(0, 6).Value = ""
Else
Target.Offset(0, 6).Value = "x"
End If


Merci pour cette idée, ça peut effectivement m'éviter des soucis (j'ai mis
le "Target.Row" > 6)


End If
cancel = True
End Sub


Private Sub Worksheet_Calculate()
If [m2].Value <> mavar Then
MsgBox " M2 a changé"
mavar = [m2].Value
End If
End Sub


C'est super ! Le pb (puisque je viens d'évoquer la colonne "AT", est le
suivant :

Tant que la cellule "AT2" est différente de 0, peu importe les variations
de
la cellule M2
Si la cellule AT2 est supérieure à 0 alors toute variation de M2 (en
négatif
ou en positif) doit être décelée.
Avant de t'en parler, je viens de passer 1 heure à essayer ce nouveau test
et je ne m'en sors pas ;-(
Il faut que la cellule M2 soit testéeseulement si la valeur de AT est
différente de AT pas au moment ou AT change !
Je ne suis pas sûr d'être clair ?!

JP


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

'lSteph

"j-pascal" a écrit dans le message de news:

Re re re, ;-)

Chez moi, ça ne marche pas sauf si je change manuellement le chiffre
de la cellule "M2". Peut-être parce-que :

"M2"=NB.SI(M7:M206;"x") ! Le chiffre change car comme tu l'as
constaté le nb de "x" change au doubles clics sur la colonne "G". Je
ne comprends pas pourquoi ???

Peut-être à demain ?

Bonne nuit,

JP

lSteph wrote:
chez moi tes deux subs s'enchainent sans souci!
si en g2 je dblclique j'obtiens un x en m2 et le message ,
si je répète le x s'éfface, puis j'ai le message;
et si je modifie direct m2 j'ai bien le message .

lSteph

"j-pascal" a écrit dans le message de
news:
Re,

Je n'arrive pas à exécuter la 2nd procédure sauf si je "désactive"
la première. Je me demande donc si on peut mettre deux procédure
de ce genre dans une même feuille ?

JP

lSteph wrote:
Re, Bonsoir,

Peut-être ne vois-je pas bien, quel est le problème?

lSteph

"j-pascal" a écrit dans le message de
news:
Bonsoir à toutes et à tous,

Dans une feuille, j'ai les 2 procédures suivantes :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range,
cancel As Boolean)
If Target.Column = 7 Or Target.Column = 40 Then
If Target.Offset(0, 6).Value = "x" Then
Target.Offset(0, 6).Value = ""
Else
Target.Offset(0, 6).Value = "x"
End If
End If
cancel = True
End Sub


Private Sub Worksheet_Change(ByVal Target As Range)
If Target = Range("M2") Then
MsgBox Target.Address & "a changé"
End If
End Sub


Je vois, vous riez déjà ;-) Ca ne marche pas ! Elles fonctionnent
séparément seulement... Peut-on lever ce genre d'incompatibilité
?

Un grand merci d'avance pour vos lumières,

JP















Avatar
j-pascal
Désolé,

Je simplifie :

Ton code détecte parfaitement le changement de valeur de la cellule M2.
Supposons que je veuille que cette détection se fasse seulement dans le cas
où la cellule A2 devient supérieure à 0 !
1 - la valeur de M2 change de valeur ie 1, 2, 3, 4, 3, 4, 5, 6, 7
2 - la valeur initiale de A2 = 0
3 - si la valeur de A2 passe à 1, alors tout changement de M2 doit être
détecté
Cela te paraît-il plus clair ?

(vraiment) désolé ;-(

JP


lSteph wrote:
Bonsoir,
Enfin là je suis sûr que j'ai la bonne réponse!
Je ne suis pas sûr d'être clair ?!
Tu ne resteras pas dans le doute, ce coup là

j'ai vraiment rien compris.
;o)))

A+

lSteph
"j-pascal" a écrit dans le message de news:

Bonjour !

"M2"=NB.SI(M7:M206;"x")
Deux pb alors:

1 "Change" répond à un changement par l'utilisateur et non par le
calcul => utiliser "Calculate" mais ici tu veux cibler le
changement uniquement sur m2, on va utiliser une variable globale.
(tu pourra
2 si tu dblcliques en g2 cela devrait tout bonnement écraser ta
formule en m2
=>pour éviter cela optimiser la condition sur target
Et une question: à quoi sert le 40 puisque par offset de 6 il ne
modifiera pas M:M


En fait, il y a deux colonnes "M" et "AT" dans lesquelles
s'inscrivent des "x" (désolé, j'aurais dû te le préciser plus tôt)


Possibilité :

'''''*******Dans module1*******
Public mavar


Pourquoi "public" ?

''''''****** dans thisworkbook******
Private Sub Workbook_Open()
mavar = Feuil1.[m2].Value
End Sub

'''''******Dans le code de la feuille*******
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range,
cancel As Boolean)

mavar = [m2].Value
If Target.Row > 2 And (Target.Column = 7 Or Target.Column = 40) Then
If Target.Offset(0, 6).Value = "x" Then
Target.Offset(0, 6).Value = ""
Else
Target.Offset(0, 6).Value = "x"
End If


Merci pour cette idée, ça peut effectivement m'éviter des soucis
(j'ai mis le "Target.Row" > 6)


End If
cancel = True
End Sub


Private Sub Worksheet_Calculate()
If [m2].Value <> mavar Then
MsgBox " M2 a changé"
mavar = [m2].Value
End If
End Sub


C'est super ! Le pb (puisque je viens d'évoquer la colonne "AT", est
le suivant :

Tant que la cellule "AT2" est différente de 0, peu importe les
variations de
la cellule M2
Si la cellule AT2 est supérieure à 0 alors toute variation de M2 (en
négatif
ou en positif) doit être décelée.
Avant de t'en parler, je viens de passer 1 heure à essayer ce
nouveau test et je ne m'en sors pas ;-(
Il faut que la cellule M2 soit testéeseulement si la valeur de AT est
différente de AT pas au moment ou AT change !
Je ne suis pas sûr d'être clair ?!

JP


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

'lSteph

"j-pascal" a écrit dans le message de
news:
Re re re, ;-)

Chez moi, ça ne marche pas sauf si je change manuellement le
chiffre de la cellule "M2". Peut-être parce-que :

"M2"=NB.SI(M7:M206;"x") ! Le chiffre change car comme tu l'as
constaté le nb de "x" change au doubles clics sur la colonne "G".
Je ne comprends pas pourquoi ???

Peut-être à demain ?

Bonne nuit,

JP

lSteph wrote:
chez moi tes deux subs s'enchainent sans souci!
si en g2 je dblclique j'obtiens un x en m2 et le message ,
si je répète le x s'éfface, puis j'ai le message;
et si je modifie direct m2 j'ai bien le message .

lSteph

"j-pascal" a écrit dans le message de
news:
Re,

Je n'arrive pas à exécuter la 2nd procédure sauf si je
"désactive" la première. Je me demande donc si on peut mettre
deux procédure de ce genre dans une même feuille ?

JP

lSteph wrote:
Re, Bonsoir,

Peut-être ne vois-je pas bien, quel est le problème?

lSteph

"j-pascal" a écrit dans le message de
news:
Bonsoir à toutes et à tous,

Dans une feuille, j'ai les 2 procédures suivantes :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range,
cancel As Boolean)
If Target.Column = 7 Or Target.Column = 40 Then
If Target.Offset(0, 6).Value = "x" Then
Target.Offset(0, 6).Value = ""
Else
Target.Offset(0, 6).Value = "x"
End If
End If
cancel = True
End Sub


Private Sub Worksheet_Change(ByVal Target As Range)
If Target = Range("M2") Then
MsgBox Target.Address & "a changé"
End If
End Sub


Je vois, vous riez déjà ;-) Ca ne marche pas ! Elles
fonctionnent séparément seulement... Peut-on lever ce genre
d'incompatibilité ?

Un grand merci d'avance pour vos lumières,

JP
















Avatar
j-pascal
Bonjour,

Après avoir essayé des trucs compliqués (qui ne marchaient pas !), j'ai
pensé avoir trouvé la solution avec la simplicité :

Private Sub Worksheet_Calculate()

If [m2].Value <> mavar And [at1] <> 0 Then
MsgBox "Attention, votre sélection (à droite) est modifiée !"
mavar = [m2].Value
End If
End Sub

mais ça ne marche pas à tous les coups !

Pour une raison que je ne m'explique pas, parfois, c'est au moment où la
valeur de [at1] change que le message s'affiche, alors qu'il ne devrait le
faire qu'au changement de valeurs de [m2] (avec [at1] > 0).

s'agit-il d'un pb de "purge" de la variable "mavar" ?

A bientôt, peut-être ???

Bonne journée,

JP


lSteph wrote:
Bonsoir,
Enfin là je suis sûr que j'ai la bonne réponse!
Je ne suis pas sûr d'être clair ?!
Tu ne resteras pas dans le doute, ce coup là

j'ai vraiment rien compris.
;o)))

A+

lSteph
"j-pascal" a écrit dans le message de news:

Bonjour !

"M2"=NB.SI(M7:M206;"x")
Deux pb alors:

1 "Change" répond à un changement par l'utilisateur et non par le
calcul => utiliser "Calculate" mais ici tu veux cibler le
changement uniquement sur m2, on va utiliser une variable globale.
(tu pourra
2 si tu dblcliques en g2 cela devrait tout bonnement écraser ta
formule en m2
=>pour éviter cela optimiser la condition sur target
Et une question: à quoi sert le 40 puisque par offset de 6 il ne
modifiera pas M:M


En fait, il y a deux colonnes "M" et "AT" dans lesquelles
s'inscrivent des "x" (désolé, j'aurais dû te le préciser plus tôt)


Possibilité :

'''''*******Dans module1*******
Public mavar


Pourquoi "public" ?

''''''****** dans thisworkbook******
Private Sub Workbook_Open()
mavar = Feuil1.[m2].Value
End Sub

'''''******Dans le code de la feuille*******
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range,
cancel As Boolean)

mavar = [m2].Value
If Target.Row > 2 And (Target.Column = 7 Or Target.Column = 40) Then
If Target.Offset(0, 6).Value = "x" Then
Target.Offset(0, 6).Value = ""
Else
Target.Offset(0, 6).Value = "x"
End If


Merci pour cette idée, ça peut effectivement m'éviter des soucis
(j'ai mis le "Target.Row" > 6)


End If
cancel = True
End Sub


Private Sub Worksheet_Calculate()
If [m2].Value <> mavar Then
MsgBox " M2 a changé"
mavar = [m2].Value
End If
End Sub


C'est super ! Le pb (puisque je viens d'évoquer la colonne "AT", est
le suivant :

Tant que la cellule "AT2" est différente de 0, peu importe les
variations de
la cellule M2
Si la cellule AT2 est supérieure à 0 alors toute variation de M2 (en
négatif
ou en positif) doit être décelée.
Avant de t'en parler, je viens de passer 1 heure à essayer ce
nouveau test et je ne m'en sors pas ;-(
Il faut que la cellule M2 soit testéeseulement si la valeur de AT est
différente de AT pas au moment ou AT change !
Je ne suis pas sûr d'être clair ?!

JP


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

'lSteph

"j-pascal" a écrit dans le message de
news:
Re re re, ;-)

Chez moi, ça ne marche pas sauf si je change manuellement le
chiffre de la cellule "M2". Peut-être parce-que :

"M2"=NB.SI(M7:M206;"x") ! Le chiffre change car comme tu l'as
constaté le nb de "x" change au doubles clics sur la colonne "G".
Je ne comprends pas pourquoi ???

Peut-être à demain ?

Bonne nuit,

JP

lSteph wrote:
chez moi tes deux subs s'enchainent sans souci!
si en g2 je dblclique j'obtiens un x en m2 et le message ,
si je répète le x s'éfface, puis j'ai le message;
et si je modifie direct m2 j'ai bien le message .

lSteph

"j-pascal" a écrit dans le message de
news:
Re,

Je n'arrive pas à exécuter la 2nd procédure sauf si je
"désactive" la première. Je me demande donc si on peut mettre
deux procédure de ce genre dans une même feuille ?

JP

lSteph wrote:
Re, Bonsoir,

Peut-être ne vois-je pas bien, quel est le problème?

lSteph

"j-pascal" a écrit dans le message de
news:
Bonsoir à toutes et à tous,

Dans une feuille, j'ai les 2 procédures suivantes :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range,
cancel As Boolean)
If Target.Column = 7 Or Target.Column = 40 Then
If Target.Offset(0, 6).Value = "x" Then
Target.Offset(0, 6).Value = ""
Else
Target.Offset(0, 6).Value = "x"
End If
End If
cancel = True
End Sub


Private Sub Worksheet_Change(ByVal Target As Range)
If Target = Range("M2") Then
MsgBox Target.Address & "a changé"
End If
End Sub


Je vois, vous riez déjà ;-) Ca ne marche pas ! Elles
fonctionnent séparément seulement... Peut-on lever ce genre
d'incompatibilité ?

Un grand merci d'avance pour vos lumières,

JP