Code vba

bennisay

XLDnaute Occasionnel
Bonjour le forum

J ai un code VBA pour avertissment de doublons pour une seule colonne "C"
Comment modifier le code pour avoir le meme resultat dans les colonnes "U" & "V"
le code :

' code pour avertirtissement de doublon dans la colonne "C"

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim Colonne As Integer
Dim Adresse As String

'On sort si plus d'une cellule a été modifiée
If Target.Count > 1 Then Exit Sub
'On sort si la cellule modifiée est vide
If Target.Value = "" Then Exit Sub

'Définit la colonne à vérifier (1=Colonne A, 2=colonne B ...etc...)
Colonne = 3

'Vérifie si c'est la colonne cible a été modifiée
If Target.Column = Colonne Then

'Recherche si la nouvelle donnée existe déjà dans la colonne.
Adresse = Columns(Colonne).Find(What:=Target.Value, After:=Target.Offset(1, 0), LookAt:=xlWhole, _
SearchDirection:=xlNext).Address

'Si l'adresse de cellule trouvée ne correspond pas à la cellule modifiée, cela
'signifie qu'il y a un doublon dans la colonne.
If Adresse <> Target.Address Then

MsgBox "La Réference '" & Target & "' Déjà saisie ", vbInformation

End If
End If

End Sub




Merci infiniment
 

bennisay

XLDnaute Occasionnel
Re : Code vba

re

Merci pour votre aide
j ai modifie le code de cette maniere

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim Colonne As Integer
Dim Adresse As String
If Target.Count > 1 Then Exit Sub
If Target.Value = "" Then Exit Sub

Colonne = 3
If Target.Column = Colonne Then
Adresse = Columns(Colonne).Find(What:=Target.Value, After:=Target.Offset(1, 0), LookAt:=xlWhole, _
SearchDirection:=xlNext).Address
If Adresse <> Target.Address Then
MsgBox "La Réference '" & Target & "' Déjà saisie ", vbInformation
End If
End If

Colonne = 4
If Target.Column = Colonne Then
Adresse = Columns(Colonne).Find(What:=Target.Value, After:=Target.Offset(1, 0), LookAt:=xlWhole, _
SearchDirection:=xlNext).Address
If Adresse <> Target.Address Then
MsgBox "La Réference '" & Target & "' Déjà saisie ", vbInformation
End If
End If

End Sub

Le code marche mais le probleme c est que si l une de ces colonnes contienne une formule
j ai
Adresse = Columns(Colonne).Find(What:=Target.Value, After:=Target.Offset(1, 0), LookAt:=xlWhole, _
SearchDirection:=xlNext).Address ( EN JAUNE )
vous avez une idee comment debloquer ce probleme
 

bennisay

XLDnaute Occasionnel
Re : Code vba

PHP:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim Colonne As Integer
Dim Adresse As String
If Target.Count > 1 Then Exit Sub
If Target.Value = "" Then Exit Sub

Colonne = 3
If Target.Column = Colonne Then
Adresse = Columns(Colonne).Find(What:=Target.Value, After:=Target.Offset(1, 0), LookAt:=xlWhole, _
SearchDirection:=xlNext).Address
If Adresse <> Target.Address Then
MsgBox "La Réference '" & Target & "' Déjà saisie ", vbInformation
End If
End If

Colonne = 4
If Target.Column = Colonne Then
Adresse = Columns(Colonne).Find(What:=Target.Value, After:=Target.Offset(1, 0), LookAt:=xlWhole, _
SearchDirection:=xlNext).Address
If Adresse <> Target.Address Then
MsgBox "La Réference '" & Target & "' Déjà saisie ", vbInformation
End If
End If

End Sub
 

bennisay

XLDnaute Occasionnel
Re : Code vba

BONSOIR

Le code marche mais le probleme c est que si l une de ces colonnes contienne une formule
j ai cette partie de code

HTML:
Adresse = Columns(Colonne).Find(What:=Target.Value, After:=Target.Offset(1, 0), LookAt:=xlWhole, _
SearchDirection:=xlNext).Address
En jaune
Vous avez une idee pourquoi ja i cette partie de code en jaune ??
ET MERCI
 

Dranreb

XLDnaute Barbatruc
Re : Code vba

Bonjour.
Ce serait bien évidemment un paramètre de la méthode Find.
Ça se confirme, c'est comme dans les versions précédente : si vous ne le précisez pas il le reprend de la boîte de dialogue de recherche, selon que vous y avez demandé en dernier de chercher parmi les valeurs ou parmi les formules des cellules. Ce lien n'existe plus.

Remarque: en mettant Target.EntireColumn à la place de Columns(Colonne), comme je vous l'avais conseillé au poste #2, dont vous n'avez tenu aucun compte, vous ne seriez pas obligé d'écrire deux fois tout le code, mais juste de vérifier devant si Target.Column est un des numéros de colonne à traiter. Le plus court serait sans doute:
VB:
If Intersect([C:D], Target) Is Nothing Then Exit Sub
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 355
Messages
2 087 556
Membres
103 589
dernier inscrit
antoine.laumond