OVH Cloud OVH Cloud

Evenement change

4 réponses
Avatar
christèle
Je cherche à obtenir un avertissement lorsqu'une nouvelle valeur saisie en
colonne D existe déjà dans cette colonne.
Dans l'objet Feuil1 de mon projet VBA j'ai saisi le code suivant :
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 4 And Target <> Empty Then
j = ActiveCell.Row
For i = 1 To j - 1
If Cells(i, 4) = ActiveCell Then
MsgBox ("la valeur a déjà été saisie à la ligne : " & i )
End If
Next
End If
End Sub
Le code marche bien mais j'ai 3 problèmes :
1) La vérification ne se fait que lorsque je fais un copier/coller d'une des
valeurs de D ou lorsqu'après avoir saisi une valeur en D, je valide ma saisie
en cliquant sur le bouton Entrer (à gauche dans la barre de formule). Que
dois je faire pour que la vérification se fasse également lorsque je tape la
touche Entrée ou Tab ?
2) Lorsque je supprime une valeur, j'ai automatiquement un bogg. Comment
éviter cela ? (procédure d'erreur ? autre solution ?)
3)Je souhaiterais que la casse ne soit pas distinctive. Que la valeur saisie
en D soit en majuscule ou en minuscule, pour moi, il ne s'agit pas d'un
doublon. Comment faire pour qu'il en soit ainsi pour Excel ?
Merci
Christèle

4 réponses

Avatar
MichDenis
Bonjour Christèle,

J'ai pas tout saisi, mais ça pourrait ressembler à ceci :

'----------------------
Private Sub Worksheet_Change(ByVal Target As Range)

On Error Resume Next
If Target.Column = 4 And Target <> Empty Then
Set g = Columns.Find(Target, Target, xlFormulas, xlWhole, , xlNext)
If Err = 0 Then
If g.Address <> Target.Address Then
MsgBox "Une donnée existe déjà à : " & g.Address
End If
Else
Err = 0
End If
End If

End Sub
'----------------------


Salutations!



"christèle" a écrit dans le message de news:

Je cherche à obtenir un avertissement lorsqu'une nouvelle valeur saisie en
colonne D existe déjà dans cette colonne.
Dans l'objet Feuil1 de mon projet VBA j'ai saisi le code suivant :
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 4 And Target <> Empty Then
j = ActiveCell.Row
For i = 1 To j - 1
If Cells(i, 4) = ActiveCell Then
MsgBox ("la valeur a déjà été saisie à la ligne : " & i )
End If
Next
End If
End Sub
Le code marche bien mais j'ai 3 problèmes :
1) La vérification ne se fait que lorsque je fais un copier/coller d'une des
valeurs de D ou lorsqu'après avoir saisi une valeur en D, je valide ma saisie
en cliquant sur le bouton Entrer (à gauche dans la barre de formule). Que
dois je faire pour que la vérification se fasse également lorsque je tape la
touche Entrée ou Tab ?
2) Lorsque je supprime une valeur, j'ai automatiquement un bogg. Comment
éviter cela ? (procédure d'erreur ? autre solution ?)
3)Je souhaiterais que la casse ne soit pas distinctive. Que la valeur saisie
en D soit en majuscule ou en minuscule, pour moi, il ne s'agit pas d'un
doublon. Comment faire pour qu'il en soit ainsi pour Excel ?
Merci
Christèle
Avatar
christèle
Merci beaucoup, ça marche même si mes explications étaient peu claires...
j'ai encore un autre soucis. Plutot qu'avoir l'adresse de la cellule doublon
j'aimerais extraire la valeur situé en colonne B de la ligne où se situe le
doublon. (si en d4, je saisis une valeur identique à celle en d4, j'aimerais
connaitre alors la valeur situé en d2). ça j'arrivais à l'obtenir avec ma
variable i : MsgBox ("la valeur a déjà été saisie à la ligne : " & i &
Chr(10) & "Valeur de la colonne B : " & Cells(i, 2).Value)
Je cherche aussi quelques références de livres sous Excel VBA qui me
permettront de mieux comprendre ce type d'événement, les fonctions dans les
userforms ... Merci. Christèle

"MichDenis" wrote:

Bonjour Christèle,

J'ai pas tout saisi, mais ça pourrait ressembler à ceci :

'----------------------
Private Sub Worksheet_Change(ByVal Target As Range)

On Error Resume Next
If Target.Column = 4 And Target <> Empty Then
Set g = Columns.Find(Target, Target, xlFormulas, xlWhole, , xlNext)
If Err = 0 Then
If g.Address <> Target.Address Then
MsgBox "Une donnée existe déjà à : " & g.Address
End If
Else
Err = 0
End If
End If

End Sub
'----------------------


Salutations!



"christèle" a écrit dans le message de news:

Je cherche à obtenir un avertissement lorsqu'une nouvelle valeur saisie en
colonne D existe déjà dans cette colonne.
Dans l'objet Feuil1 de mon projet VBA j'ai saisi le code suivant :
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 4 And Target <> Empty Then
j = ActiveCell.Row
For i = 1 To j - 1
If Cells(i, 4) = ActiveCell Then
MsgBox ("la valeur a déjà été saisie à la ligne : " & i )
End If
Next
End If
End Sub
Le code marche bien mais j'ai 3 problèmes :
1) La vérification ne se fait que lorsque je fais un copier/coller d'une des
valeurs de D ou lorsqu'après avoir saisi une valeur en D, je valide ma saisie
en cliquant sur le bouton Entrer (à gauche dans la barre de formule). Que
dois je faire pour que la vérification se fasse également lorsque je tape la
touche Entrée ou Tab ?
2) Lorsque je supprime une valeur, j'ai automatiquement un bogg. Comment
éviter cela ? (procédure d'erreur ? autre solution ?)
3)Je souhaiterais que la casse ne soit pas distinctive. Que la valeur saisie
en D soit en majuscule ou en minuscule, pour moi, il ne s'agit pas d'un
doublon. Comment faire pour qu'il en soit ainsi pour Excel ?
Merci
Christèle





Avatar
Denis Michon
Bonjour Christèle,


Essaie ceci :

'----------------------
Private Sub Worksheet_Change(ByVal Target As Range)

Dim G As Range
On Error Resume Next
If Target.Column = 4 And Target <> Empty Then
Set G = Columns(4).Find(Target, Target, xlFormulas, xlWhole, , xlNext)
If Err = 0 Then
If G.Address <> Target.Address Then
MsgBox "Une donnée existe déjà à : " & G.Offset(0, -2).Address _
& vbCrLf & "sa valeur est : " & G.Offset(0, -2).Value
End If
Else
Err = 0
End If
End If
Set G = Nothing
End Sub
'----------------------

Pour ce qui est de la bibliographie, il existe plusieurs bon livre pour expliquer VBA sous excel. Cela dépend de ton
niveau et de celui que tu voudrais obtenir.


Salutations!




"christèle" a écrit dans le message de news:

Merci beaucoup, ça marche même si mes explications étaient peu claires...
j'ai encore un autre soucis. Plutot qu'avoir l'adresse de la cellule doublon
j'aimerais extraire la valeur situé en colonne B de la ligne où se situe le
doublon. (si en d4, je saisis une valeur identique à celle en d4, j'aimerais
connaitre alors la valeur situé en d2). ça j'arrivais à l'obtenir avec ma
variable i : MsgBox ("la valeur a déjà été saisie à la ligne : " & i &
Chr(10) & "Valeur de la colonne B : " & Cells(i, 2).Value)
Je cherche aussi quelques références de livres sous Excel VBA qui me
permettront de mieux comprendre ce type d'événement, les fonctions dans les
userforms ... Merci. Christèle

"MichDenis" wrote:

Bonjour Christèle,

J'ai pas tout saisi, mais ça pourrait ressembler à ceci :

'----------------------
Private Sub Worksheet_Change(ByVal Target As Range)

On Error Resume Next
If Target.Column = 4 And Target <> Empty Then
Set g = Columns.Find(Target, Target, xlFormulas, xlWhole, , xlNext)
If Err = 0 Then
If g.Address <> Target.Address Then
MsgBox "Une donnée existe déjà à : " & g.Address
End If
Else
Err = 0
End If
End If

End Sub
'----------------------


Salutations!



"christèle" a écrit dans le message de news:

Je cherche à obtenir un avertissement lorsqu'une nouvelle valeur saisie en
colonne D existe déjà dans cette colonne.
Dans l'objet Feuil1 de mon projet VBA j'ai saisi le code suivant :
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 4 And Target <> Empty Then
j = ActiveCell.Row
For i = 1 To j - 1
If Cells(i, 4) = ActiveCell Then
MsgBox ("la valeur a déjà été saisie à la ligne : " & i )
End If
Next
End If
End Sub
Le code marche bien mais j'ai 3 problèmes :
1) La vérification ne se fait que lorsque je fais un copier/coller d'une des
valeurs de D ou lorsqu'après avoir saisi une valeur en D, je valide ma saisie
en cliquant sur le bouton Entrer (à gauche dans la barre de formule). Que
dois je faire pour que la vérification se fasse également lorsque je tape la
touche Entrée ou Tab ?
2) Lorsque je supprime une valeur, j'ai automatiquement un bogg. Comment
éviter cela ? (procédure d'erreur ? autre solution ?)
3)Je souhaiterais que la casse ne soit pas distinctive. Que la valeur saisie
en D soit en majuscule ou en minuscule, pour moi, il ne s'agit pas d'un
doublon. Comment faire pour qu'il en soit ainsi pour Excel ?
Merci
Christèle





Avatar
christèle
Merci. Je vais tester ça (et essayer de comprendre)
Pour ce qui est de mon niveau, c'est difficile à dire. J'ai pu suivre 2
jours d'une initiation à vba. J'ai pu abordé la notion de variable (mais peu
d'information sur les tableau), la construction d'une userform basic
(quelques propriétés comme "rowsource"), les instructions de boucle et de
controle, un peu d'instruction d'erreur mais en ce qui concerne les
événements sur les objets worksheet ... je trouve rien d'interessant dans mes
bouquins (pas très poussé). Je dirais que je suis à un niveau intermédiaire.
Alors si tu as des conseils littéraires à me donner, je suis tout ouie.
Christèle

"Denis Michon" wrote:

Bonjour Christèle,


Essaie ceci :

'----------------------
Private Sub Worksheet_Change(ByVal Target As Range)

Dim G As Range
On Error Resume Next
If Target.Column = 4 And Target <> Empty Then
Set G = Columns(4).Find(Target, Target, xlFormulas, xlWhole, , xlNext)
If Err = 0 Then
If G.Address <> Target.Address Then
MsgBox "Une donnée existe déjà à : " & G.Offset(0, -2).Address _
& vbCrLf & "sa valeur est : " & G.Offset(0, -2).Value
End If
Else
Err = 0
End If
End If
Set G = Nothing
End Sub
'----------------------

Pour ce qui est de la bibliographie, il existe plusieurs bon livre pour expliquer VBA sous excel. Cela dépend de ton
niveau et de celui que tu voudrais obtenir.


Salutations!




"christèle" a écrit dans le message de news:

Merci beaucoup, ça marche même si mes explications étaient peu claires...
j'ai encore un autre soucis. Plutot qu'avoir l'adresse de la cellule doublon
j'aimerais extraire la valeur situé en colonne B de la ligne où se situe le
doublon. (si en d4, je saisis une valeur identique à celle en d4, j'aimerais
connaitre alors la valeur situé en d2). ça j'arrivais à l'obtenir avec ma
variable i : MsgBox ("la valeur a déjà été saisie à la ligne : " & i &
Chr(10) & "Valeur de la colonne B : " & Cells(i, 2).Value)
Je cherche aussi quelques références de livres sous Excel VBA qui me
permettront de mieux comprendre ce type d'événement, les fonctions dans les
userforms ... Merci. Christèle

"MichDenis" wrote:

Bonjour Christèle,

J'ai pas tout saisi, mais ça pourrait ressembler à ceci :

'----------------------
Private Sub Worksheet_Change(ByVal Target As Range)

On Error Resume Next
If Target.Column = 4 And Target <> Empty Then
Set g = Columns.Find(Target, Target, xlFormulas, xlWhole, , xlNext)
If Err = 0 Then
If g.Address <> Target.Address Then
MsgBox "Une donnée existe déjà à : " & g.Address
End If
Else
Err = 0
End If
End If

End Sub
'----------------------


Salutations!



"christèle" a écrit dans le message de news:

Je cherche à obtenir un avertissement lorsqu'une nouvelle valeur saisie en
colonne D existe déjà dans cette colonne.
Dans l'objet Feuil1 de mon projet VBA j'ai saisi le code suivant :
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 4 And Target <> Empty Then
j = ActiveCell.Row
For i = 1 To j - 1
If Cells(i, 4) = ActiveCell Then
MsgBox ("la valeur a déjà été saisie à la ligne : " & i )
End If
Next
End If
End Sub
Le code marche bien mais j'ai 3 problèmes :
1) La vérification ne se fait que lorsque je fais un copier/coller d'une des
valeurs de D ou lorsqu'après avoir saisi une valeur en D, je valide ma saisie
en cliquant sur le bouton Entrer (à gauche dans la barre de formule). Que
dois je faire pour que la vérification se fasse également lorsque je tape la
touche Entrée ou Tab ?
2) Lorsque je supprime une valeur, j'ai automatiquement un bogg. Comment
éviter cela ? (procédure d'erreur ? autre solution ?)
3)Je souhaiterais que la casse ne soit pas distinctive. Que la valeur saisie
en D soit en majuscule ou en minuscule, pour moi, il ne s'agit pas d'un
doublon. Comment faire pour qu'il en soit ainsi pour Excel ?
Merci
Christèle