OVH Cloud OVH Cloud

macro évenementiellle qui réagit bizarement

4 réponses
Avatar
daniel
Bonjour,
J'utilise une macro qui m'a été donnée sur ce forum (essentiellement par
Daniel), et que j'ai un peu changée. Mais celle-ci réagit parfois
bizarrement. Normalement elle intervient seulement si l'on change des
données dans les colonnes 6 ou 13, mais parfois, après la colonne 13, elle
revient 12 colonne en arrière et indique la référence qui est en E2. Donc je
vais rajouter cette ligne au début :
If Target.Row < 3 Or Target.Column > 13 Then Exit Sub 'ligne -3 ou
colonne +13 on sort
Mais pourquoi réagit-elle parfois comme ça ???? Pourquoi pour 6 ou 7(la
nouvelle ligne) IF, 5 end if suffisent ???, et vba n'en veut pas plus.
Et comment imposer autrement les colonnes F ou M ????
Par avance merci de vos réponses (constructives).

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Ligne

If Target.Count > 1 Then Exit Sub 'on ne peut saisir ou effacer qu'une
cellule
(nouvelle ligne) If Target.Row < 3 Or Target.Column > 13 Then Exit Sub
'ligne -3 ou colon +13 on sort

If Target.Column = 13 And Target.Row > 3 And IsEmpty(Target.Value)
Then
Target.Offset(0, -12).Value = Empty 'si on efface une cellule de la
colonne 13
End If

If Target.Column = 6 And Target.Row > 3 Then
Ligne = Application.Match(Target.Value, Range("TEST1"), 0)
If Not IsNumeric(Ligne) Then
On Error Resume Next
MsgBox Target.Value & " : cette référence n'est pas dans la liste"
Exit Sub
End If
Target.Offset(0, -1).Value = WorksheetFunction.Index(Range("TEST2"),
Ligne, 1)
Target.Offset(0, -2).Value = WorksheetFunction.Index(Range("TEST3"),
Ligne, 1)
Else
On Error Resume Next
If Target.Column = 13 And Target.Row > 3 And Target.Value <> 0 Then
Target.Offset(0, -12).Value = [e2]
If [e2] = 35 Then
MsgBox "historisez avant de continuer, svp"
End If
Else
Exit Sub
End If
End If

End Sub

4 réponses

Avatar
Quetzalcoatl
Bonjour,

Voir ta ligne de code :
Target.Offset(0, -12).Value = [e2]


"daniel" a écrit dans le message de news:
uh7g9$
Bonjour,
J'utilise une macro qui m'a été donnée sur ce forum (essentiellement par
Daniel), et que j'ai un peu changée. Mais celle-ci réagit parfois
bizarrement. Normalement elle intervient seulement si l'on change des
données dans les colonnes 6 ou 13, mais parfois, après la colonne 13, elle
revient 12 colonne en arrière et indique la référence qui est en E2. Donc
je vais rajouter cette ligne au début :
If Target.Row < 3 Or Target.Column > 13 Then Exit Sub 'ligne -3 ou
colonne +13 on sort
Mais pourquoi réagit-elle parfois comme ça ???? Pourquoi pour 6 ou 7(la
nouvelle ligne) IF, 5 end if suffisent ???, et vba n'en veut pas plus.
Et comment imposer autrement les colonnes F ou M ????
Par avance merci de vos réponses (constructives).

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Ligne

If Target.Count > 1 Then Exit Sub 'on ne peut saisir ou effacer qu'une
cellule
(nouvelle ligne) If Target.Row < 3 Or Target.Column > 13 Then Exit Sub
'ligne -3 ou colon +13 on sort

If Target.Column = 13 And Target.Row > 3 And IsEmpty(Target.Value)
Then
Target.Offset(0, -12).Value = Empty 'si on efface une cellule de la
colonne 13
End If

If Target.Column = 6 And Target.Row > 3 Then
Ligne = Application.Match(Target.Value, Range("TEST1"), 0)
If Not IsNumeric(Ligne) Then
On Error Resume Next
MsgBox Target.Value & " : cette référence n'est pas dans la liste"
Exit Sub
End If
Target.Offset(0, -1).Value = WorksheetFunction.Index(Range("TEST2"),
Ligne, 1)
Target.Offset(0, -2).Value = WorksheetFunction.Index(Range("TEST3"),
Ligne, 1)
Else
On Error Resume Next
If Target.Column = 13 And Target.Row > 3 And Target.Value <> 0 Then
Target.Offset(0, -12).Value = [e2]
If [e2] = 35 Then
MsgBox "historisez avant de continuer, svp"
End If
Else
Exit Sub
End If
End If

End Sub




Avatar
daniel
Bonjour,
Je n'ai pas compris la réponse,
Target.Offset(0, -12).Value = [e2]
se trouve déjà dans la macro, et c'est donc pour compléter la colonne A si

l'on indique un chiffre en colonne M.
Mes questions sont
Mais pourquoi réagit-elle parfois comme ça ???? Pourquoi pour 6 ou 7(la
nouvelle ligne) IF, 5 end if suffisent ???, et vba n'en veut pas plus.
Et comment imposer autrement les colonnes F ou M ????
Bon week-end.


Daniel (novice)

"Quetzalcoatl" a écrit dans le message
de news: 4466e4a2$0$18340$
Bonjour,

Voir ta ligne de code :
Target.Offset(0, -12).Value = [e2]


"daniel" a écrit dans le message de news:
uh7g9$
Bonjour,
J'utilise une macro qui m'a été donnée sur ce forum (essentiellement par
Daniel), et que j'ai un peu changée. Mais celle-ci réagit parfois
bizarrement. Normalement elle intervient seulement si l'on change des
données dans les colonnes 6 ou 13, mais parfois, après la colonne 13,
elle revient 12 colonne en arrière et indique la référence qui est en E2.
Donc je vais rajouter cette ligne au début :
If Target.Row < 3 Or Target.Column > 13 Then Exit Sub 'ligne -3 ou
colonne +13 on sort
Mais pourquoi réagit-elle parfois comme ça ???? Pourquoi pour 6 ou 7(la
nouvelle ligne) IF, 5 end if suffisent ???, et vba n'en veut pas plus.
Et comment imposer autrement les colonnes F ou M ????
Par avance merci de vos réponses (constructives).

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Ligne

If Target.Count > 1 Then Exit Sub 'on ne peut saisir ou effacer qu'une
cellule
(nouvelle ligne) If Target.Row < 3 Or Target.Column > 13 Then Exit Sub
'ligne -3 ou colon +13 on sort

If Target.Column = 13 And Target.Row > 3 And IsEmpty(Target.Value)
Then
Target.Offset(0, -12).Value = Empty 'si on efface une cellule de
la colonne 13
End If

If Target.Column = 6 And Target.Row > 3 Then
Ligne = Application.Match(Target.Value, Range("TEST1"), 0)
If Not IsNumeric(Ligne) Then
On Error Resume Next
MsgBox Target.Value & " : cette référence n'est pas dans la liste"
Exit Sub
End If
Target.Offset(0, -1).Value = WorksheetFunction.Index(Range("TEST2"),
Ligne, 1)
Target.Offset(0, -2).Value = WorksheetFunction.Index(Range("TEST3"),
Ligne, 1)
Else
On Error Resume Next
If Target.Column = 13 And Target.Row > 3 And Target.Value <> 0
Then
Target.Offset(0, -12).Value = [e2]
If [e2] = 35 Then
MsgBox "historisez avant de continuer, svp"
End If
Else
Exit Sub
End If
End If

End Sub








Avatar
Daniel
Bonsoir.
Essaie le code suivant; je pense que le second "on error" n'est pas
indispensable :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Ligne

If Target.Count > 1 Then Exit Sub 'on ne peut saisir ou effacer qu'une
cellule (nouvelle ligne)
If Target.Row < 3 Or Target.Column > 13 Then Exit Sub 'ligne -3 ou colon
+13 on sort

If Target.Column = 13 And Target.Row > 3 And IsEmpty(Target.Value) Then
Target.Offset(0, -12).Value = Empty 'si on efface une cellule de la
colonne 13
End If

If Target.Column = 6 And Target.Row > 3 Then
Ligne = Application.Match(Target.Value, Range("TEST1"), 0)
If Not IsNumeric(Ligne) Then
On Error Resume Next
MsgBox Target.Value & " : cette référence n'est pas dans la
liste"
Exit Sub
End If
Target.Offset(0, -1).Value = WorksheetFunction.Index(Range("TEST2"),
Ligne, 1)
Target.Offset(0, -2).Value = WorksheetFunction.Index(Range("TEST3"),
Ligne, 1)
Else
If Target.Column = 13 And Target.Row > 3 And Target.Value <> 0 Then
Target.Offset(0, -12).Value = [e2]
If [e2] = 35 Then
MsgBox "historisez avant de continuer, svp"
End If
Else
Exit Sub
End If
End If
End Sub

Cordialement.
Daniel
"daniel" a écrit dans le message de news:

Bonjour,
Je n'ai pas compris la réponse,
Target.Offset(0, -12).Value = [e2]
se trouve déjà dans la macro, et c'est donc pour compléter la colonne A si

l'on indique un chiffre en colonne M.
Mes questions sont
Mais pourquoi réagit-elle parfois comme ça ???? Pourquoi pour 6 ou 7(la
nouvelle ligne) IF, 5 end if suffisent ???, et vba n'en veut pas plus.
Et comment imposer autrement les colonnes F ou M ????
Bon week-end.


Daniel (novice)

"Quetzalcoatl" a écrit dans le
message de news: 4466e4a2$0$18340$
Bonjour,

Voir ta ligne de code :
Target.Offset(0, -12).Value = [e2]


"daniel" a écrit dans le message de news:
uh7g9$
Bonjour,
J'utilise une macro qui m'a été donnée sur ce forum (essentiellement par
Daniel), et que j'ai un peu changée. Mais celle-ci réagit parfois
bizarrement. Normalement elle intervient seulement si l'on change des
données dans les colonnes 6 ou 13, mais parfois, après la colonne 13,
elle revient 12 colonne en arrière et indique la référence qui est en
E2. Donc je vais rajouter cette ligne au début :
If Target.Row < 3 Or Target.Column > 13 Then Exit Sub 'ligne -3 ou
colonne +13 on sort
Mais pourquoi réagit-elle parfois comme ça ???? Pourquoi pour 6 ou 7(la
nouvelle ligne) IF, 5 end if suffisent ???, et vba n'en veut pas plus.
Et comment imposer autrement les colonnes F ou M ????
Par avance merci de vos réponses (constructives).

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Ligne

If Target.Count > 1 Then Exit Sub 'on ne peut saisir ou effacer
qu'une cellule
(nouvelle ligne) If Target.Row < 3 Or Target.Column > 13 Then Exit
Sub 'ligne -3 ou colon +13 on sort

If Target.Column = 13 And Target.Row > 3 And
IsEmpty(Target.Value) Then
Target.Offset(0, -12).Value = Empty 'si on efface une cellule de
la colonne 13
End If

If Target.Column = 6 And Target.Row > 3 Then
Ligne = Application.Match(Target.Value, Range("TEST1"), 0)
If Not IsNumeric(Ligne) Then
On Error Resume Next
MsgBox Target.Value & " : cette référence n'est pas dans la
liste"
Exit Sub
End If
Target.Offset(0, -1).Value = WorksheetFunction.Index(Range("TEST2"),
Ligne, 1)
Target.Offset(0, -2).Value = WorksheetFunction.Index(Range("TEST3"),
Ligne, 1)
Else
On Error Resume Next
If Target.Column = 13 And Target.Row > 3 And Target.Value <> 0
Then
Target.Offset(0, -12).Value = [e2]
If [e2] = 35 Then
MsgBox "historisez avant de continuer, svp"
End If
Else
Exit Sub
End If
End If

End Sub












Avatar
daniel
Bonjour Daniel,
Merci pour la réponse, je vais mettre en application ce que tu proposes, et
je te donnerai le résultat, qui je pense sera positif.
Encore merci et à la prochaine.
Daniel(novice)