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 :

récupérer une valeur de combobox pour changer cellule


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 2
    Par défaut récupérer une valeur de combobox pour changer cellule
    Bonjour à tous,
    Relativement nul en VBA je suis coincé dans une macro....
    J'ai des mots dans la colonne A parfois redondants, Je cherche à récupérer une liste de mots uniques dans cette colonne les afficher dans un userform sous forme de plusieurs lignes avec en face de chaque occurrence un combobox pour proposer un changement de nom (soit tapé à la main soit piqué dans la liste des noms de la colonne A)
    L'idée est de facilement faire ensuite un remplacement des noms mal écrits (majuscule, pluriels ou autre fautes de frappe) par les bons mots.
    Je ne sais pas du tout me servir des userforms mais en visitant les forums et en essayant de bidouiller un peu j'ai imaginé un code dans le genre que j'ai placé dans un module standard...

    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
     
    Option Explicit
    Option Base 1
     
        Dim Plage As Range, Cell As Range
        Dim liste As New Collection
        Dim Usf As Object
        Dim X As Object
    Dim i As Integer
    Dim strList As String
    Dim listecount As Integer
    Dim replace() As Variant
    Dim ObjListBox As Object
    Dim ObjtextBox As Object
    Dim ObjButonBox As Object
    Dim j As Integer
    Dim k As Integer
    Dim listeitem As String
     
     
    Sub listeUnique()
     
        'Définit la plage de cellules pour la collection
        Set Plage = Worksheets("Feuil1").Range(Worksheets("feuil1").Range("A1"), Worksheets("feuil1").Range("A1").End(xlDown))
        ' Attention si la première est vide il fait toute la colonne
     
        On Error Resume Next
        'Boucle sur les cellules de la plage cible
        For Each Cell In Plage
            'Création d'une collection de données uniques (sans doublons)
            liste.Add Cell, CStr(Cell)
        Next Cell
        On Error GoTo 0
     
     
        ReDim replace(liste.Count)
     
        For i = 1 To liste.Count
        Worksheets("Feuil1").Cells(i, 2) = liste(i)
        Next i
     
        strList = "Listedesnoms"
    Set X = creationUserForm_Et_listBox_Dynamique(strList)
     
    For i = 1 To liste.Count
        X.Controls(strList & "text" & i).text = liste(i)
        X.Controls(strList & i).Value = liste(i)
        For k = 1 To liste.Count
        X.Controls(strList & i).AddItem liste(k)
    Next k
    Next i
     
    X.Show
     
    For i = 1 To liste.Count
    Worksheets("Feuil1").Cells(i, 3) = replace(i)
    Next i
     
    ThisWorkbook.VBProject.VBComponents.Remove Usf
     
    Set Usf = Nothing
     
    End Sub
     
     
     
    Function creationUserForm_Et_listBox_Dynamique(nomListe As String) As Object
      Set Usf = ThisWorkbook.VBProject.VBComponents.Add(3)
      With Usf
        .Properties("Caption") = "Mon UserForm"
        .Properties("Width") = 400
        .Properties("Height") = 10 + listecount * 20 + 80
      End With
     
     
    Set ObjButonBox = Usf.Designer.Controls.Add("Forms.CommandButton.1")
    With ObjButonBox
        .Left = 300: .Top = 30 + (liste.Count) * 20: .Width = 90: .Height = 20
        .Name = "remplacer"
        .Caption = "remplacer"
    End With
     
     
    For i = 1 To liste.Count
    Set ObjListBox = Usf.Designer.Controls.Add("Forms.ComboBox.1")
    Set ObjtextBox = Usf.Designer.Controls.Add("Forms.TextBox.1")
     
    With ObjtextBox
        .Left = 20: .Top = 10 + (i - 1) * 20: .Width = 180: .Height = 20
        .Name = nomListe & "text" & i
    End With
     
    With ObjListBox
        .Left = 200: .Top = 10 + (i - 1) * 20: .Width = 180: .Height = 20
        .Name = nomListe & i
        .Object.ColumnCount = 1
        .Object.ColumnWidths = 70
    End With
     
     
    With Usf.CodeModule
        j = .CountOfLines
        .InsertLines j + 1, "Sub " & nomListe & i & "_change()"
        .InsertLines j + 2 + liste.Count, "End Sub"
     
    End With
    Next i
     
    With Usf.CodeModule
        j = .CountOfLines
        .InsertLines j + 3, "Sub remplacer_Click()"
        For k = 1 To liste.Count
        .InsertLines j + 4 + k, "If " & nomListe & k & ".ListIndex <> -1 Then replace(" & k & ")= " & Usf.Name & "." & nomListe & k
        Next k
        .InsertLines j + liste.Count + 5, "End Sub"
     
    End With
     
    VBA.UserForms.Add (Usf.Name)
    Set creationUserForm_Et_listBox_Dynamique = UserForms(UserForms.Count - 1)
    End Function
    Je sais ... C'est ecrits avec les pieds !! ce sont des copiés collés de codes trouvés à droite a gauche avec parfois des parties que je ne comprend même pas....
    Ca marche à moitié... ça affiche bien le Userform, ça met bien les valeurs dans les combobox, je peux les modifier mais impossible de récupérer les valeurs de ces combobox pour ensuite par exemple afficher une liste modifiée dans la colonne C....

    Quelqu'un pourrait m'aider ??
    Je sais pas si je suis assez précis
    Cordialement

  2. #2
    Nouveau candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 2
    Par défaut
    Personne n'a d'idée ?

Discussions similaires

  1. [XL-2007] Condition Si pour récupérer une valeur de cellule
    Par Scatmax dans le forum Excel
    Réponses: 11
    Dernier message: 03/05/2010, 10h43
  2. Réponses: 1
    Dernier message: 31/10/2006, 11h15
  3. Réponses: 5
    Dernier message: 09/09/2005, 17h51
  4. problème pour récupérer une valeur dans ma bd (débutante)
    Par auryn111 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 26/08/2005, 17h49
  5. Réponses: 2
    Dernier message: 17/06/2005, 13h38

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