Bonsoir,

Je suis nouveau sur le forum et aussi débutant en VBA sous excel 2003.
Je "développe" actuellement "une application" toute simple permettant l'insertion de données par un formulaire dans differentes colonnes d'une feuille (Nom, adresse, ... ). Avec un deuxieme formulaire je modifie les données inserées au préalable. Dans ce deuxieme userform, je réalise une recherche en fonction de la raison sociale de la société.
Je souhaite gérer les doublons et permettre l'affichage des données a mettre a jour ! ex : Pour une recherche avec le mot clé "Dupont", recherche -> une société existe -> on affiche dans le formulaire les données recupérées, plusieurs sociétés existes -> msgbox : "il y en a plusieurs" -> textbox dynamique en fonction du nombre de doublons avec un button OK pour chaque sociétés trouvées. Si le mot clé n'est pas trouvé, msgbox : "pas de société avec ce nom".

Mon probleme c'est lors de la recup des données dans les textbox dynamiques, je souhaiterais recupérer le numero de ligne de chaque doublons ainsi que la ville.

Voici le code :

le bouton rechercher :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
Private Sub rechercher_Click()
 
Dim var As String
Dim societes As Worksheet
Dim search As Range
Dim ligne As Long
Dim message As String
Dim Data As Worksheet
Dim PlageReponse As Range, zone As Range
Dim X As Integer
Dim MaPlage As Variant
Dim L As String
Dim TxtB As Control
Dim TxtB2 As Control
Dim TxtB3 As Control
Dim Aff As Control
Dim i As Integer
Dim Cl As Classe1
 
var = UCase(Trim(recherche.Value))
 
    If var = "" Then
        MsgBox "Veuillez indiquer Le nom du client !", vbInformation, "Attention"
    End If
 
    If var <> "" Then
    With ThisWorkbook.Worksheets("societes")
    Set MaPlage = .Range(.Cells(2, 4), .Cells(.Rows.Count, 4).End(xlUp))
    End With
 
    X = Application.WorksheetFunction.CountIf(MaPlage, var)
 
    If X = 1 Then
            Set search = Worksheets("societes").Columns(4).Find(var)
            If Not search Is Nothing Then
            ligne = search.Row
            Set societes = ThisWorkbook.Worksheets("societes")
            creation = societes.Cells(ligne, 1)
            modification = societes.Cells(ligne, 2)
            naturejuridique = societes.Cells(ligne, 3)
            raisonsociale = societes.Cells(ligne, 4)
            anciennement = societes.Cells(ligne, 5)
            numero = societes.Cells(ligne, 6)
            voie = societes.Cells(ligne, 7)
            adresse = societes.Cells(ligne, 8)
            complement = societes.Cells(ligne, 9)
            BP = societes.Cells(ligne, 10)
            CP = societes.Cells(ligne, 11)
            ville = societes.Cells(ligne, 12)
            telephone = societes.Cells(ligne, 13)
            siret = societes.Cells(ligne, 14)
            representants = societes.Cells(ligne, 16)
            qualite = societes.Cells(ligne, 17)
            infos = societes.Cells(ligne, 18)
            recupnumligne = ligne
            End If
    End If
 
    If X > 1 Then
 
        With ThisWorkbook.Worksheets("societes")
            Set MaPlage = .Range(.Cells(2, 4), .Cells(.Rows.Count, 4).End(xlUp))
        End With
 
        Set PlageReponse = PlageValeur(var, MaPlage)
 
        If Not PlageReponse Is Nothing Then
 
            For Each zone In PlageReponse.Areas
            message = message & var & " Ligne : " & zone.Row & vbNewLine
 
            Set Data = ThisWorkbook.Worksheets("data") 'insertion des numeros de lignes des doublons dans une autre feuille
            L = L & zone.Row & vbNewLine
            Data.Cells(2, 1).Value = L
 
            Next
        End If
 
 
       MsgBox "Ce nom est associé à plusieurs sociétés, veuillez sélectionner celle qui vous intéresse !" _
       & vbNewLine & message, vbInformation, "Information"
 
           If vbOK Then
 
            Set Collect = New Collection
 
            For i = 1 To X 'boucle pour créer les TextBox / au nombre de societes trouvees
            Set TxtB = Me.Controls.Add("forms.TextBox.1", "TxtB" & i, True)
            Set TxtB2 = Me.Controls.Add("forms.TextBox.1", "TxtB2" & i, True)
            Set TxtB3 = Me.Controls.Add("forms.TextBox.1", "TxtB3" & i, True)
            Set Aff = Me.Controls.Add("forms.CommandButton.1", "Aff", True)
 
                With TxtB
                    .Left = 320
                    .Top = 336 + ((i - 1) * 30)
                    .Width = 75
                    .Height = 15.75
                    .BackColor = &HFFFFFF
                    .BackStyle = fmBackStyleOpaque
                    .BorderColor = &H80000006
                    .BorderStyle = fmBorderStyleSingle
                    .ForeColor = &H80000008
                    .SpecialEffect = fmSpecialEffectFlat
                    TxtB = var
                End With
 
                With TxtB2
                    .Left = 408
                    .Top = 336 + ((i - 1) * 30)
                    .Width = 75
                    .Height = 15.75
                    .BackColor = &HFFFFFF
                    .BackStyle = fmBackStyleOpaque
                    .BorderColor = &H80000006
                    .BorderStyle = fmBorderStyleSingle
                    .ForeColor = &H80000008
                    .SpecialEffect = fmSpecialEffectFlat
                End With
 
                With TxtB3
                    .Left = 497
                    .Top = 336 + ((i - 1) * 30)
                    .Width = 20
                    .Height = 15.75
                End With
 
                With Aff
                    .Left = 520
                    .Top = 336 + ((i - 1) * 30)
                    .Width = 20
                    .Height = 18
                    .Name = "Aff" & i
                    .Caption = "OK"
                End With
 
                'ajout de l'objet dans la classe
                Set Cl = New Classe1
                Set Cl.TxtB = TxtB
                Set Cl.TxtB2 = TxtB2
                Set Cl.TxtB3 = TxtB3
                Set Cl.CmBn = Aff
                Collect.Add Cl
                Next i
 
            End If
End If
 
    If X = 0 Then
    MsgBox ("Le client n'existe pas ou celui-ci est mal orthographié"), vbInformation, "Attention"
    End If
    Exit Sub
 
End If
End Sub
La fonction pour la recherche des doublons :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
Public Function PlageValeur(ByVal var As String, ByVal PlageRecherche As Range) As Range
Dim TrouveCell As Range, PremAdresse As String
If Application.WorksheetFunction.CountIf(PlageRecherche, var) = 0 Then Exit Function
Set TrouveCell = PlageRecherche.Find(what:=var, lookat:=xlWhole, MatchCase:=False)
PremAdresse = TrouveCell.Address
Set PlageValeur = TrouveCell
Do
Set TrouveCell = PlageRecherche.FindNext(TrouveCell)
Set PlageValeur = Application.Union(PlageValeur, TrouveCell)
Loop Until TrouveCell.Address = PremAdresse
 
End Function
Le bouton OK cliquable :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Public WithEvents CmBn As MSForms.CommandButton
Public TxtB, TxtB2, TxtB3 As MSForms.TextBox
 
'Gestion de l'évènement clic sur les objets dynamiques CommandButton de UserForm2
Private Sub CmBn_Click()
Dim ligne As Integer
Dim societes As Worksheet
'ce commentaire affiche le nom et la valeur de l'objet cliqué
MsgBox TxtB.Name & ": " & TxtB2.Name & ": " & TxtB3.Name & vbNewLine & CmBn.Name & ": " & CmBn.Value
    ligne = TxtB3.Value
    Set societes = ThisWorkbook.Worksheets("societes")
    UserForm2.creation.Value = societes.Cells(ligne, 1)
    UserForm2.modification.Value = societes.Cells(ligne, 2)
    UserForm2.naturejuridique.Value = societes.Cells(ligne, 3)
    UserForm2.raisonsociale.Value = societes.Cells(ligne, 4)
    UserForm2.anciennement.Value = societes.Cells(ligne, 5)
    UserForm2.numero.Value = societes.Cells(ligne, 6)
    UserForm2.voie.Value = societes.Cells(ligne, 7)
    UserForm2.adresse.Value = societes.Cells(ligne, 8)
    UserForm2.complement.Value = societes.Cells(ligne, 9)
    UserForm2.BP.Value = societes.Cells(ligne, 10)
    UserForm2.CP.Value = societes.Cells(ligne, 11)
    UserForm2.ville.Value = societes.Cells(ligne, 12)
    UserForm2.telephone.Value = societes.Cells(ligne, 13)
    UserForm2.siret.Value = societes.Cells(ligne, 14)
    UserForm2.representants.Value = societes.Cells(ligne, 16)
    UserForm2.qualite.Value = societes.Cells(ligne, 17)
    UserForm2.infos.Value = societes.Cells(ligne, 18)
    UserForm2.recupnumligne.Value = ligne
End Sub
J'ai pensé recuperer les numero de ligne des doublons dans une autre feuille et faire un boucle dessus pour les recuperer dans les textbox dynamique mais j'avoue que je seche en fait.

Désolé pour le pavé !!

Merci pour votre aide