Concatener en VB

Résolu
aubioine Messages postés 19 Date d'inscription lundi 2 avril 2007 Statut Membre Dernière intervention 19 novembre 2013 - 18 juin 2012 à 17:45
aubioine Messages postés 19 Date d'inscription lundi 2 avril 2007 Statut Membre Dernière intervention 19 novembre 2013 - 20 juin 2012 à 17:23
Bonjour,
étant débutant en VB, je pose ma question sur ce forum

Je possède un tableau excel sous la forme :

valeur1
sous-valeur1 résultat1
sous-valeur2 résultat2
sous-valeur3 résultat3
sous-valeur4 résultat4
sous-valeur5 résultat5
valeur2
sous-valeur6 résultat6
sous-valeur7 résultat7
sous-valeur8 résultat8
valeur3
sous-valeur9 résultat9
sous-valeur10 résultat10
sous-valeur11 résultat11
sous-valeur12 résultat12
sous-valeur13 résultat13
sous-valeur14 résultat14
sous-valeur15 résultat15
sous-valeur16 résultat16
sous-valeur17 résultat17
sous-valeur18 résultat18

et je souhaiterai concatener les sous-valeurs dans une cellule sur la même ligne que la valeur
(le nombre de valeurs et de sous-valeurs varie)

(je suis sur Excel2007)


J'espère être assez clair et merci d'avance pour vos réponses

35 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
19 juin 2012 à 11:47
Je vais te préparer le terrain.
Je devine que tu veux permettre à l'utilisateur de choisir et traiter facilement une valeur.
Je te suggère donc, dans ton userform : une listbox et une combobox.
On commence par la listbox (on parlera ensuite du reste : alimenter la combo en fonction du choix dans la listbox)
Regarde ce que fait ceci, avec une listbox listbox1 sur ton userform :
Private Sub UserForm_Activate()
 Dim plage As Range, c as range
 Set plage = Range("A1:A" & Range("B" & Rows.Count).End(xlUp).Row).SpecialCells(xlCellTypeConstants)
 For Each c In plage
   ListBox1.AddItem c.value
 Next
End Sub

Agréable, non ?
Quand tu es prêt, dis-le et on continue


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
19 juin 2012 à 12:56
Je suis un âne (et je croyais en plus que nous étions un lundi - salut, LIBRE_MAX - preuve que je ne sais même plus quel jour nous sommes).
On va encore mieux faciliter la suite de cette manière :
Private Sub UserForm_Activate()
  Dim plage As Range, c As Range
  ListBox1.ColumnCount = 2
  Set plage = Range("A1:A" & Range("B" & Rows.Count).End(xlUp).Row).SpecialCells(xlCellTypeConstants)
  For Each c In plage
    ListBox1.AddItem c.Value
    ListBox1.List(ListBox1.ListCount - 1, 1) = c.Row
  Next
End Sub

Je rappelle (on ne sait jamais) : sur la base de ma réorganisation de la feuille, telle que déjà faite, hein ...
Tu commences à deviner pourquoi ? et ce qui viendra ensuite ?

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
19 juin 2012 à 13:17
"..je croyais en plus que nous étions un lundi"


On dirait que les "étourdissements" du lundi commencent à affecter le mardi.

[] Ce qui va sans dire. va mieux en le disant.
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
19 juin 2012 à 13:18
Figures-toi qu' en répondant, je ne me suis pas rendu compte non plus !

[] Ce qui va sans dire. va mieux en le disant.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
aubioine Messages postés 19 Date d'inscription lundi 2 avril 2007 Statut Membre Dernière intervention 19 novembre 2013
19 juin 2012 à 13:42
Dans mon userform je veux choisir la valeur (en colonne A) depuis ma comboBox puis que les sous-valeurs et resultats correspondant apparaissent dans ma listBox.

Je maitrise le "simple" rowsource de ma listbox mais je n'arrive pas a lier en fonction de la valeur.

De plus je rajouterai une TextBox qui écrira dans la colonne D sur la même ligne que la valeur correspondante (ca j'y arrive bien)
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
19 juin 2012 à 13:53
Il suffit juste de faire 2 boucles imbriquées.

De 0 à nbItems-1
Colonne B vide ==> début de valeur
On récupère la valeur et on avance de 1
Tant que B est non vide ==>on est toujours sur la même valeur.
>on récupère les sous-valeurs.

[] Ce qui va sans dire. va mieux en le disant.
0
aubioine Messages postés 19 Date d'inscription lundi 2 avril 2007 Statut Membre Dernière intervention 19 novembre 2013
19 juin 2012 à 16:22
Merci Libre_Max pour ce guidage mais je n'arrive pas a effectuer cette double boucle, un petit bout de code me serait d'une grande aide =)
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
19 juin 2012 à 18:02
D' acc , mais je ne suis pas très fort en vba.
Pardonnez mes erreurs.

Je reprend le code de Jacques:
Private Sub UserForm_Activate()
  Dim plage As Range, c As Range
  Dim cValeur As String
  ListBox1.ColumnCount = 3
  Set plage = Range("A1:A" & Range("B" & Rows.Count).End(xlUp).Row).SpecialCells(xlCellTypeConstants)
  
   'Première valeur
   cValeur=c.Cells(1,1)
   
   For Each c In plage
    i=i+1
 
    If c.Cells(i,2)="" Then 
       'ajouter les valeurs au combo
       cValeur=c.Cells(i,1)
       Combo1.AddItem cValeur
    Else   
      'ajouter la valeurs, les sousvaleurs et les resultats à la listbox.
      ListBox1.List(ListBox1.ListCount - 1, 1)= cValeur 
      ListBox1.List(ListBox1.ListCount - 1, 2)=c.Cells(i,2)
      ListBox1.List(ListBox1.ListCount - 1, 3)=c.Cells(i,3)
  End If
 
Next

End Sub


ça c' est pour initialiser les controles de l' userform.

Après, il suffit de choisir une valeur dans le combo et en faire la recherche dans la listbox.On compare la valeur à la colonne 1, et si trouvée, et tans que c' est la même, on récupère les colonnes 2 et 3 correspondantes.

ps:désolé pour le retard.Problème de connexion.






[] Ce qui va sans dire. va mieux en le disant.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
19 juin 2012 à 18:07
Je ne comprends pas pourquoi tu ne veux pas de la solution que je m'apprêtais (et que j'avais commencé) à te proposer et qui, à mon sens, aurait étré bien plus confortable pour l'utilisateur.
Qu'est-ce qui te gênais ? Le fait d'avoir une listbox de plus ?
Amen, donc === >> regarde ce que fais ceci, dans la mesure où tu as bien lancé mon tout premier code (celui de la réorganisation de ta feuille)
Sur ton userform, dont la propriété Showmodal doit être mise à false
Private Sub UserForm_Activate()
  With ComboBox1
    .ColumnCount  = 3
    .RowSource = "A1:C" & Range("B" & Rows.Count).End(xlUp).Row
  End With
End Sub

et ta combo contiendra toutes tes données, des trois colonnes. Voilà tout !
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
aubioine Messages postés 19 Date d'inscription lundi 2 avril 2007 Statut Membre Dernière intervention 19 novembre 2013
20 juin 2012 à 08:05
@ucfoutu : si ton code était au top mais m'indiquait le numéro de la ligne en face.
Je souhaite choisir dans ma ComboBox les valeurs et que les sous valeurs correspondantes apparaissent dans ma list box.

J'essaye de modifier un peu ton code pour y arriver mais sans trop de succès.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
20 juin 2012 à 08:55
Ce n'était pas par hasard, que j'avais mis le n° de la ligne en face, dans la listbox !
Je vais t'expliquer calmement le mécanisme que je voulauis mettre en oeuvre et qui me paraissait de loin le plus confortable pour l'utilisateur et, dans le même temps, pour alléger considérablement le traitement subséquent par code :
- 1) la listbox : elle permet à l'utilisateur d'y choisir directement l'article "valeur" qu'il veut traiter. Le choix qu'il y fait renseigne, dans la même foulée, sur la ligne de départ du "groupe" concerné.
- 2) à partir de ce choix de l'utilisateur, on remplit directement une combobox. Cette combobox (un deuxième contrôle, donc) affiche uniquement les "sous-valeurs" et "résultats" correspondant à ce groupe.

L'intérêt :
- L'utilisateur n'a ni à saisir une "valeur" (avec les risques d'erreur de frappe), ni à sélectionner sur la feuille de calcul, puisque seuless lui sont proposés dans la listbox les valeurs possibles (existantes)
- le programme sait quelle est la ligne de départ du groupe à traiter et n'aura alors pas besoin d'aller "fouiller" sur la base d'une chaîne de caractères pour savoir où commencer les modifs. Il sait déjà où exactement. ===>> allègement très significatif du code et vitesse d'exécution accrue.

Voilà ! Réfléchis et choisis. Si tu retiens ce principe, je t'écris le code qu'il faut pour remplir la combo sur la base du choix fait dans la listbox.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
aubioine Messages postés 19 Date d'inscription lundi 2 avril 2007 Statut Membre Dernière intervention 19 novembre 2013
20 juin 2012 à 09:20
En faite mon but est de pouvoir choisir la valeur (via une combo ou listbox), que les sous-valeurs soit seulement affichées (et non modifiable / sans choix possible) dans une listbox et d'avoir derriere une textbox a remplir par l'utilisateur qui viendra ecrire dans une cellule de la meme ligne que la valeur avec des checkbox, tout ça dans un userform

Ton 1) me va parfaitement mais dans le 2), je préfererai une listbox plutot qu'une combo box (pour voir toutes les sous-valeurs en même temps)

Merci encore de tes réponses
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
20 juin 2012 à 11:14
Bien.
Je te fais cela cet après-midi, donc (j'ai ma pêche sur le barbecue et ne tiens pas à risquer de rater ma grillade).


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
aubioine Messages postés 19 Date d'inscription lundi 2 avril 2007 Statut Membre Dernière intervention 19 novembre 2013
20 juin 2012 à 11:24
Pas de soucis de toute façon, mon week-end commence ce soir donc je ne serai pas dessus avant lundi prochain.
Profite de ton barbecue en ce dernier jour de printemps

(pour mettre un .xls sur le post, il faut obligatoirement passer par une url?)
0
aubioine Messages postés 19 Date d'inscription lundi 2 avril 2007 Statut Membre Dernière intervention 19 novembre 2013
20 juin 2012 à 17:23
C'est tout simplement parfait !!!
exactement ce que je cherchais.

je fais quelques modifs (sur les textbox, ajout de checkbox,...)

MERCI BEAUCOUP
0
Rejoignez-nous