OVH Cloud OVH Cloud

Annuler l'action précédente

4 réponses
Avatar
JeNeVois
Bonjour,

j'aimerais dans une procédure "Worksheet_change"
pouvoir annuler l'action précédente en fonction
du "target", analogue à l'annulation manuelle
dans "Edition", mais là j'ai un blanc...

Merci pour toute réponse

Salutations

4 réponses

Avatar
JB
On 5 fév, 11:13, JeNeVois wrote:
Bonjour,

j'aimerais dans une procédure "Worksheet_change"
pouvoir annuler l'action précédente en fonction
du "target", analogue à l'annulation manuelle
dans "Edition", mais là j'ai un blanc...

Merci pour toute réponse

Salutations
Bonjour,



http://cjoint.com/?cflGIW4nMt

Doublons interdits à la saisie. On restitue l'ancienne valeur si
doublon détecté.

Dim ancien
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 And Target.Count = 1 Then
If Application.CountIf([A:A], Target) > 1 And Target <> "" Then
MsgBox "Doublon"
If ancien <> "" Then Target = ancien
End If
End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ancien = Target
End Sub


Cordialement JB

Avatar
JeNeVois
Merci, ça fonctionne. Ce n'est quand même pas aussi élémentaire;
pourtant manuellement on réctifie souvent le geste (moi au moins :),
c'est étrange que je n'avais pas trouvé de question analogue dans
le forum (mais je n'avais peut-être pas trouvé les bons mot
de recherche...)

Bonne soirée

Cordialement



On 5 fév, 11:13, JeNeVois wrote:
Bonjour,

j'aimerais dans une procédure "Worksheet_change"
pouvoir annuler l'action précédente en fonction
du "target", analogue à l'annulation manuelle
dans "Edition", mais là j'ai un blanc...

Merci pour toute réponse

Salutations
Bonjour,



http://cjoint.com/?cflGIW4nMt

Doublons interdits à la saisie. On restitue l'ancienne valeur si
doublon détecté.

Dim ancien
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 And Target.Count = 1 Then
If Application.CountIf([A:A], Target) > 1 And Target <> "" Then
MsgBox "Doublon"
If ancien <> "" Then Target = ancien
End If
End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ancien = Target
End Sub


Cordialement JB





Avatar
cousinhub
Bonjour JB,
Je viens d'essayer tes codes et je me suis aperçu qu'il y avait un petit
souci.
Si on entre 2 fois le même mot dans la colonne A (vide au préalable), le
Msgbox "doublon" apparaît bien, mais n'interdit pas la saisie.
Si ensuite, on remplace ce doublon par un autre doublon (nommé doublon2
d'un autre mot), le MSgbox apparaît également, et remplace ce doublon2
par le doublon d'origine et alors boucle sans fin (CTRL+ALT+SUPPR......)
Ne vaut-il mieux pas remplacer :

If ancien <> "" Then Target = ancien
par Target = ancien


Amicalement

On 5 fév, 11:13, JeNeVois wrote:
Bonjour,

j'aimerais dans une procédure "Worksheet_change"
pouvoir annuler l'action précédente en fonction
du "target", analogue à l'annulation manuelle
dans "Edition", mais là j'ai un blanc...

Merci pour toute réponse

Salutations
Bonjour,



http://cjoint.com/?cflGIW4nMt

Doublons interdits à la saisie. On restitue l'ancienne valeur si
doublon détecté.

Dim ancien
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 And Target.Count = 1 Then
If Application.CountIf([A:A], Target) > 1 And Target <> "" Then
MsgBox "Doublon"
If ancien <> "" Then Target = ancien
End If
End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ancien = Target
End Sub


Cordialement JB




Avatar
JB
On 5 fév, 18:17, cousinhub wrote:
BonjourJB,
Je viens d'essayer tes codes et je me suis aperçu qu'il y avait un petit
souci.
Si on entre 2 fois le même mot dans la colonne A (vide au préalable), le
Msgbox "doublon" apparaît bien, mais n'interdit pas la saisie.
Si ensuite, on remplace ce doublon par un autre doublon (nommé doublon2
d'un autre mot), le MSgbox apparaît également, et remplace ce doublon2
par le doublon d'origine et alors boucle sans fin (CTRL+ALT+SUPPR......)
Ne vaut-il mieux pas remplacer :

If ancien <> "" Then Target = ancien
par Target = ancien


Amicalement




On 5 fév, 11:13, JeNeVois wrote:
Bonjour,

j'aimerais dans une procédure "Worksheet_change"
pouvoir annuler l'action précédente en fonction
du "target", analogue à l'annulation manuelle
dans "Edition", mais là j'ai un blanc...

Merci pour toute réponse

Salutations
Bonjour,


http://cjoint.com/?cflGIW4nMt

Doublons interdits à la saisie. On restitue l'ancienne valeur si
doublon détecté.

Dim ancien
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 And Target.Count = 1 Then
If Application.CountIf([A:A], Target) > 1 And Target <> "" Then
MsgBox "Doublon"
If ancien <> "" Then Target = ancien
End If
End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ancien = Target
End Sub

CordialementJB- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -


Bonsoir,

Si on modifie une cellule dès le chargement du classeur sans
positionner le curseur sur la cellule, la variable ancien est vide.

Essai avec mémorisation de l'ancienne valeur dans un nom.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 And Target.Count = 1 Then
If Application.CountIf([A:A], Target) > 1 And Target <> "" Then
MsgBox "Doublon"
Target = [mémo]
End If
End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 1 And Target.Count = 1 Then
ActiveWorkbook.Names.Add Name:="mémo", RefersToR1C1:="=" & Chr( 34)
& Target.Value & Chr(34)
End If
End Sub

http://cjoint.com/?cfx2CphxMt

JB