RESOLU - Diviser le contenu d'une cellule pour alimenter une combobox

RESOLU - Diviser le contenu d'une cellule pour alimenter une combobox - VB/VBA/VBS - Programmation

Marsh Posté le 03-04-2006 à 01:38:34    

bonjour,  
 
voila le  problème !!!!
 
J'ai des données en lignes sur plusieurs colonnes
 
Dans la colonne E , j'ai soit des cellules vides, soit des cellules contenant 1 ligne, 2 lignes ou 3 lignes
 
J'aimerais pouvoir extraire 1 ligne vers 1 cellule (dans une autre feuille) et ceci pour chaque cellule de la colonne.
 
J'ai découvert que le "alt+entrée" dans une cellule correspondait au chr(10) et j'ai supposé que les fonctions left right et len me seraient utiles....
 
je pourrais ensuite trier ces données, supprimer les doublons et alimenter une combobox : il me manque juste la division de la cellule
 
Je sais que watashi pourra surement apporter son aide précieuse ainsi que galopin ou alain'tech
 
merci d'avance et bonne méditation


Message édité par mckoy25 le 08-05-2006 à 02:51:38
Reply

Marsh Posté le 03-04-2006 à 01:38:34   

Reply

Marsh Posté le 03-04-2006 à 08:41:32    

Salut Mckoy25
 
la fonction split va te permettre de faire ce que tu souhaite.
split(Machaine,chr(10))
@+


---------------
Je bidouillle c'est sur... Mais j'essaye de faire en sorte que ça marche ;-)
Reply

Marsh Posté le 03-04-2006 à 14:19:19    

je suppose que ton idée est la bonne mais je n'arrive pas a l'intégrer a ma macro alors je vais mieux la définir
 
J'ai dans la colonne E de ma feuille 1 des cellules sur 1 ligne, 2 lignes ou 3 lignes
 
Toutes les cellules de la colonne E de la feuil1 sont copiés vers la colonne D de ma feuil3
 
A partir de là, je voudrais diviser les cellules de la colonne D ligne par ligne
 
Ex :  si en D3 j'ai 1 cellule de 3 lignes je veux que la troisieme ligne se situe en F3, la 2nde en E3 et la premiere en D3
 
Ensuite je pourrais les mettre dans la meme colonne les trier et supprimer les doublons afin d'alimenter ma combobox
 
Le bout du code donne :  
 
Sheets("Feuil3" ).Select
Range("D1", Range("D1" ).End(xlDown)).Select
Selection.ClearContents
'Effacer le contenu des cellules de la feuil3 de la colonne D
 
Sheets("Feuil1" ).Select
Range("E3", Range("E65536" ).End(xlUp)).Select
Selection.Copy
'Copier le contenu des cellules de la colonne E de la feuil 1  
 
Sheets("Feuil3" ).Select
Range("D1" ).Select
ActiveSheet.Paste
'Coller le contenu des cellules dans la colonne D de la feuil3
 
...ici manque le fait de pouvoir diviser les cellules...
 
Sheets("Feuil3" ).Select
Range("E1", Range("E65536" ).End(xlUp)).Select
Selection.Copy
'Copier le contenu des cellules de la colonne E de la feuil 3  
 
Sheets("Feuil3" ).Select
Range("D1" ).End(xlDown).Offset(1, 0).Select
ActiveSheet.Paste
'Coller le contenu des cellules dans la colonne D de la feuil3
 
Sheets("Feuil3" ).Select
Range("F1", Range("F65536" ).End(xlUp)).Select
Selection.Copy
'Copier le contenu des cellules de la colonne F de la feuil 3  
 
Sheets("Feuil3" ).Select
Range("D1" ).End(xlDown).Offset(1, 0).Select
ActiveSheet.Paste
'Coller le contenu des cellules dans la colonne D de la feuil3
 
Selection.Sort Key1:=Range("D1" ), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
'Tri croissant des cellules de la colonne D
 
ancienne_valeur = ""
 
    For i = 1 To Selection.Rows.Count
        nouvelle_valeur = Cells(i, 4).Value
            If nouvelle_valeur = ancienne_valeur Then
            Cells(i, 4).Value = ""
            End If
        ancienne_valeur = nouvelle_valeur
    Next
'Boucle permettant de supprimer les doublons de la colonne D
 
Range([D1], [D65536].End(xlUp)).SpecialCells(xlCellTypeBlanks).Delete
'Suppression des cellules vides de la colonne D
 
UserForm2.ComboBox1.RowSource = "D1:D" + CStr(Sheets("Feuil3" ).Cells(Rows.Count, 4).End(xlUp).Row)
'Définition des valeurs de la combobox1  par les valeurs de la colonne D
 
Vous voyez bien qu'il manque un tout petit bout du code mais la solution réside en vous...
 
Merci. A bientot.
 
 
a+

Reply

Marsh Posté le 06-04-2006 à 17:20:14    

Salut McKoy
 
Désolée de n'avoir pas répondu plus tôt mais le boulot oblige (parfois ;))
 
Je te propose ci-dessous un code que j'avais fait pour un de mes fichier et que j'ai adapté (un peu - tu devra sans doute y revenir) à ton cas.
 
Ce code je l'ai placer dans userform_initialize et dans cet userform j'ai une combobox (combobox1). Il repli la combobox1 avec des données des cellules d'une feuille (multi et mono lignes). Il ne tien pas compte des doublons. et tri les données dans la combobox.
 
Le code est commenté tu devrais pouvoir t'y retrouver.

Code :
  1. Private Sub UserForm_Initialize()
  2. 'Variables de feuilles
  3. Dim WsO As Worksheet       'Feuille contenant les données
  4. Set WsO = Worksheets("Feuil1" )
  5. 'Variables de colonnes
  6. Dim ColO As Integer         'Colonne traitée dans la feuille de données
  7. ColO = 4
  8. 'Variables de lignes
  9. Dim LigO As Long            'Ligne en traitement dans la feuille d'origine
  10. Dim LigFin As Long          'Dernière ligne à traiter de la feuille d'origine
  11. LigO = 3
  12. LigFin = WsO.Cells(65536, 5).End(xlUp).Row
  13. 'Variables pour le split
  14. Dim MonSplit As Variant
  15. 'Variable d'incrémentation
  16. Dim i As Integer
  17. Dim a As Integer
  18. 'variable pour le positionement de l'item
  19. Dim g As Integer
  20. 'Test pour l'écriture
  21. Dim test As Boolean
  22. 'Boucle de traitement
  23. Do While LigO <= LigFin
  24.     'vider le split
  25.     Set MonSplit = Nothing
  26.     'remplir le split
  27.     MonSplit = Split(WsO.Cells(LigO, 5).Value, Chr(10))
  28.    
  29.     'Boucle pour l'écriture
  30.     For i = 0 To UBound(MonSplit)
  31.    
  32.         'Test de vérification de la présence de la valeur
  33.         'Pour ne pas avoir de doublons
  34.         'Renvois test = False si l'item n'est pas dans la liste
  35.         'Si listcount = 0 il n'y a pas d'item dans la liste
  36.         If ComboBox1.ListCount <> 0 Then
  37.             test = False
  38.             For a = 0 To ComboBox1.ListCount - 1
  39.                 'Comparaison sur des strings si c'est du numérique c'est plus simple
  40.                 If StrComp(CStr(MonSplit(i)), CStr(ComboBox1.List(a)), vbTextCompare) = 0 Then test = True
  41.             Next a
  42.         End If
  43.        
  44.         'Ecriture
  45.         'Je n'écris que si l'item n'est pas dans la liste
  46.         If test = False Then
  47.             'Calcul de la position d'écriture pour tri alpha des strings
  48.             g = 0
  49.             If ComboBox1.ListCount <> 0 Then
  50.                 For a = 0 To ComboBox1.ListCount - 1
  51.                     'Comparaison sur des strings si c'est du numérique c'est plus simple
  52.                     If StrComp(CStr(MonSplit(i)), CStr(ComboBox1.List(g)), vbTextCompare) > 0 Then g = g + 1
  53.                 Next a
  54.             End If
  55. '        j'écris l'item
  56.             ComboBox1.AddItem MonSplit(i), g
  57.         End If
  58.     Next i
  59.     LigO = LigO + 1
  60. Loop
  61. End Sub

@+


---------------
Je bidouillle c'est sur... Mais j'essaye de faire en sorte que ça marche ;-)
Reply

Marsh Posté le 11-04-2006 à 10:22:00    

Merci pour ton code watashi mais depuis j'avais trouvé comment faire autrement.
le contenu de ma colonne avec les cellules de plusieurs lignes est divisé en deux sur la colonne a droite avec les fonctions left et right
et celle colonne de droite est encorée divisée en deux vers la droite de la meme maniere
 
Ensuite j'ai supprimé les cellules vides des 2 nouvelles colonnes et j'ai collé leur contenu dans la plage maitresse.
Cette plage est alors triée et j'alimente ma combobox....
 
Oufff !!! enfin
 
 
 

Reply

Marsh Posté le 11-04-2006 à 12:08:25    

Ok super que tu aies réussi à t'arranger.
 
Rien ne t'empêche tout de même de regarder comment le code fonction.
 
C'est une bonne machinerie pour mettre en place et trier les données pour une combobox sans passer par une écruiture sur une feuille.
 
@+
P.S. : le code que tu as utilisé pour résoudre ton schmilblick peut en interesser d'autres ;) Un petit résolu dans le titre de ton post aussi ;)


---------------
Je bidouillle c'est sur... Mais j'essaye de faire en sorte que ça marche ;-)
Reply

Marsh Posté le 03-05-2006 à 01:28:48    

j' ai résolu mais comment faire pour changer le titre de mon post

Reply

Marsh Posté le 03-05-2006 à 09:30:28    

Salut  mckoy
tu cliques sur l'icone qui représente un papier avec une gomme au bout d'un crayon et tu changes juste le titre du post :)
@+

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed