VBA Trouver un doublon dans une liste

helene51

XLDnaute Junior
Bonjour le forum,

J'ai pourtant bien cherché la solution à ma question, mais rien n'y fait je ne vois toujours pas ...
Peut-être pourriez-vous m'apporter vos lumières !

Dans un USF, j'ai 1 calendrier, 2 combobox et 1 textbox.
En fonction des valeurs renseignées dans ces éléments, je souhaite déterminer si une ligne similaire existe dans ma base de données.

Avec 2 conditions, cela fonctionne mais dès que j'en mets 3, impossible de trouver une correspondance !!!!
Je ne sais plus comment m'en sortir.

Voilà où j'en suis :

Code:
Derligne = Range("A65536").End(xlUp).Row

For i = 2 To Derligne
    If Range("A" & i).Value = DTPicker1.Value And ComboBox2.Value = Range("D" & i).Value And TextBox1.Text = Range("E" & i).Value Then
        rep = MsgBox("Les données saisies existent déjà, voulez-vous les écraser ?", vbYesNo)
                If rep = vbNo Then
                    Call ReinitMultipage
                    Exit For
                    Else:
                    Rows(i).Delete
                    Exit For
                End If
        End If
Next i

Avez-vous une suggestion sur ce qui ne marche pas ?

Merci.
 

helene51

XLDnaute Junior
Re : VBA Trouver un doublon dans une liste

Bonjour Robert,

En effet, la date du DTPicker est au même format que celle dans ma base de données.
J'ai testé cette condition seule et elle fonctionne.
Dès que je rajoute les conditions sur les combobox, ça ne passe pas.
 

Papou-net

XLDnaute Barbatruc
Re : VBA Trouver un doublon dans une liste

Bonjour helene51, Robert,

Je pencherais également pour un problème de format, et pas seulement au niveau de la date.

Et puis pourquoi intervertir les références de contrôles et de cellules ?

Je changerais la ligne suivante :

Code:
If Range("A" & i).Value = DTPicker1.Value And ComboBox2.Value = Range("D" & i).Value And TextBox1.Text = Range("E" & i).Value Then

Par :

Code:
If Range("A" & i).Value = DTPicker1.Value And  Range("D" & i).Value = ComboBox2.Value And Range("E" & i).Value = TextBox1.Text Then

bien que sans garantie de fonctionnement, mais simplement pour rester dans une même logique.

Par ailleurs, ayant une certaine expérience dans les boucles d'effacement de lignes, je modifierais la boucle pour une lecture depuis le bas, car la suppression éventuelle de lignes perturbe le déroulement de ladite boucle :

Code:
For i = Derligne To 2 Step - 1

N'ayant peut-être pas résolu mais espérant avoir contribué de manière utile.

Cordialement.

Edit : bonjour tbft
 

Pierrot93

XLDnaute Barbatruc
Re : VBA Trouver un doublon dans une liste

Bonjour à tous

peut être en comparant les propriétés "text" des objets :
Code:
If Range("A1").[B]Text [/B]= ComboBox1.[B]Text [/B]Then MsgBox "ok"
If Range("A1").[B]Text [/B]= [B]CStr[/B](DTPicker1.Value) Then MsgBox "ok"

bon après midi
@+
 

helene51

XLDnaute Junior
Re : VBA Trouver un doublon dans une liste

Bonjour tbft, Papou-net et Pierrot93,

Merci pour vos réponses.

J'ai finalement réussi à contouner mon problème. Dans une colonne de mon tableau j'ai concatené les valeurs des 4 données et j'ai fait une recherche sur toute la plage de données :

Code:
With Sheets(feuille).Range("AV:AV")
    Set c = .Find(code, LookIn:=xlValues)
    
    If Not c Is Nothing Then
        m = MsgBox("Un enregistrement est déjà présent pour la date du " & Me.DTPicker1.Value & ", le " & Me.ComboBox6.Value & Chr(13) _
        & "l'équipe " & Me.ComboBox1.Value & " et la ligne " & Me.ComboBox2.Value & " !" & Chr(13) & Chr(13) & "Voulez-vous l'écraser ?", vbYesNo + vbExclamation)
        
        If m = vbYes Then
            ActiveSheet.Rows(c.Row).Delete 
            Frame1.Enabled = True
        Else
            ReinitMultipage 
        End If
    Else
        Frame1.Enabled = True 
    End If
End With

Ca fonctionne.

Merci à vous.
 

tototiti2008

XLDnaute Barbatruc
Re : VBA Trouver un doublon dans une liste

Bonjour à tous,

Bonne idée la propriété Text mais j'ai déjà eu des surprises, alors j'en fait part :
si la colonne n'est pas assez large pour afficher la date, vous n'ignorez pas qu'Excel affiche #####
eh bien la propriété Text renverra également une série de "#", bref ça peut être génant :(
 

Pierrot93

XLDnaute Barbatruc
Re : VBA Trouver un doublon dans une liste

Re,

pour la difference avec value2, mets une date en A1 et exécute les codes ci-dessous :

Code:
MsgBox Range("A1").Value
MsgBox Range("A1").Value2

sinon, extrait de l'aide vba :
Note
La seule différence existant entre cette propriété et la propriété Value réside dans le fait que la propriété Value2 n'utilise pas les types de données aux formats Monétaire et Date. Vous pouvez renvoyer des données de ce type sous forme de nombres à virgule flottante en utilisant le type de données Double.
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 294
Messages
2 086 895
Membres
103 404
dernier inscrit
sultan87