IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

[E-03] Récuperer valeurs avec des textbox dynamiques


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 3
    Points : 2
    Points
    2
    Par défaut [E-03] Récuperer valeurs avec des textbox dynamiques
    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

  2. #2
    Membre régulier Avatar de DidierLoche
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 84
    Points : 105
    Points
    105
    Par défaut
    Bonjour,

    Pas mal du tout pour un débutant !!
    Pourquoi ne pas plutôt créer des cases à cocher (CheckBox) en face de cache doublon et de n'avoir qu'un seul bouton "OK".
    Ensuite, dans ta feuille "data", pourquoi ne pas passer à la ligne suivante en mettant le n° de ligne dans la colonne B.
    Ainsi en fonction de la case cochée (ChkBoxi i allant de 1 à X), tu sauras que le doublon est à la ligne indiquée dans WorkSheets("data").cells(i,2).

    Courage,

    Didier

  3. #3
    Membre régulier Avatar de DidierLoche
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 84
    Points : 105
    Points
    105
    Par défaut
    C'est peut-être mieux avec des boutons d'option (OptionButton) si tu veux pouvoir faire un choix exclusif en utilisant GroupName

    Didier

Discussions similaires

  1. Réponses: 1
    Dernier message: 14/06/2013, 00h07
  2. DataTable avec des colonnes dynamiques
    Par PrinceDeLu dans le forum JSF
    Réponses: 5
    Dernier message: 15/04/2011, 10h54
  3. datagridview avec des textbox et btn dynamique
    Par zalalus dans le forum C#
    Réponses: 1
    Dernier message: 06/07/2010, 01h38
  4. les valeurs des textbox dynamiques
    Par casaoui dans le forum ASP.NET
    Réponses: 5
    Dernier message: 04/06/2007, 17h20
  5. [VB6] Scrollbar dans une frame avec des textbox
    Par bb62 dans le forum VB 6 et antérieur
    Réponses: 44
    Dernier message: 01/03/2006, 08h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo