Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Insertion de plusieurs mots dans une même cellule

8 réponses
Avatar
Apitos
Bonjour =E0 tous,

J'aimerais ins=E9rer plusieurs mots s=E9par=E9s par le signe << + >> dans l=
es cellules des colonnes C et D depuis un formulaire.

Les mots seront choisis depuis une liste dans un UserForm.

J'en ai une plage nomm=E9e << Destination >> pour les valeurs =E0 ins=E9rer=
dans la colonne D et une autre nomm=E9e << Motif >> pour les valeurs =E0 i=
ns=E9rer dans la colonne D.

Si une fois dans le formulaire, le mot (une destination ou un motif) =E0 in=
s=E9rer est inexistant, alors un champ TextBox est l=E0 pour me permettre d=
e saisir un mot (ou une phrase) pour l'ajouter dans la liste convenable dan=
s la ListBox et en m=EAme temps l'ajouter dans les plages nomm=E9es dans Fe=
uil2.

Merci d'avance.


http://www.cjoint.com/c/FAiu70K3vIe

8 réponses

Avatar
MichD
Bonjour,

Pour insérer ces mots :

Range("C1") = Range("D1") & " + " & Range("D7") & " + " & Range("D8")

Ai-je mal compris?
Avatar
Apitos
Bonjoue MichD,

Non, les D1...Dx représentent des destinations (noms de villes)

les M1...Mx représentent le motif de la mission (Relève dérangement, Transport personnels, Transport Matériels ....)

Le formulaire joint avec l'exemple est une idée qui venue dans la tète. Peut être qu'il y aura d'autres meilleures idées que cela.
Je devrais renseigner les colonnes C et D avant d'envoyer les enregistremen ts choisies pour un publipostage.
Avatar
Apitos
Bonjour,

Voila un nouvelle version ou j'ai essayé d'utiliser le même formulaire pour renseigner les colonne C et D.

Si un double clique est détecté sur les deux colonne, le formulaire est affiché et la listeBox est remplit selon la colonne dans laquelle on a c liqué :

- Si clique dans la colonne C, ListBox1.Rowsource=[Destination].Value

- Si clique dans la colonne D, ListBox1.Rowsource=[Motif].Value

Mais ça me génère une erreur sur ces deux lignes !

http://www.cjoint.com/c/FAjjLlpp0SL
Avatar
MichD
Comme je ne sais vraiment pas ce que tu veux faire, je te suggère cette
petite explication.

'--------------------------------------------
Private Sub UserForm_Initialize()
If Target.Column = 3 Then
ListBox1.RowSource = [Destination].Value
ElseIf Target.Column = 4 Then
ListBox1.RowSource = [Motif].Value
End If
End Sub

'--------------------------------------------

A ) Cette procédure ne peut pas fonctionner car tu utilises une variable
"Objet" de type "Range" que tu n'as pas définie. Dans les différentes
procédures événementielles d'Excel à titre d'exemple :
rivate Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As
Boolean), Observe dans la ligne de déclaration le paramètre "Target" est
défini comme étant un "Range".

Voici une manière de procéder pour charger un contrôle ListBox dans un
formulaire :
'---------------------------------------------
Private Sub UserForm_Initialize()
Call Charger_ListBox
End Sub
'---------------------------------------------

Sub Charger_ListBox()
Dim NomFeuille As String
Dim Adr As String

With [Destination]
Adr = .Address
NomFeuille = .Parent.Name
'La propriété RowSource fait référence à l'adresse
'de la plage de cellules
UserForm1.ListBox1.RowSource = NomFeuille & "!" & Adr
End With
End Sub
'---------------------------------------------


Tu peux aussi utiliser la propriété "List" pour charger le
contrôle Listbox

Exemple :

Le ListBox contient un tableau (array à une dimension de base 0)
Par défaut, lorsqu'un tableau a seulement une dimension,
cela fait référence à des valeurs en ligne. Comme ce que tu
veux obtenir est un affichage en colonne, on doit utiliser
la fonction "Transpose".
'-----------------------------
Sub Charger_ListBox()
UserForm1.ListBox1.List = Application.Transpose([Destination].Value)
End Sub
'-----------------------------
Avatar
Apitos
Bonjour,

Donc impossible d'appeler le même UserForm pour remplir la ListBox1 selon la colonne cliqué soit pour la colonne C ou la colonne D.

As-tu une autre manière de procéder ? Ou devrais-je faire appeler un se ul formulaire et renseigner depuis toutes les lignes que j'en ai besoin pou r le publipostage ?

Comme je ne sais vraiment pas ce que tu veux faire



Avant de lancer le publipostage des enregistrements voulus, je devrais rens eignés dans la colonne C toutes les destinations ou l'agent en mission de vra intervenir et dans la colonne D le(s) motif(s) de cette mission.

Pour cela, je devrais choisir depuis la plage "Destinations" les villes ou se rendra l'agent et depuis la plage "Motif" les raisons pour lesquels cett e agent est envoyé pour mission.

A la fin, pour choisir les données à envoyer pour un publipostage, je devrais mettre une croix "X" dans la colonne "Etiquette" devant les noms de s agents concernés par cette mission.

J'espère avoir été clair.
Avatar
MichD
Dans le module de la feuille où l'action doit
se dérouler, copie ce code. Ce dernier remplit
le listbox du formulaire dès que tu cliques dans
une cellule de la colonne C ou D de la feuille.

'---------------------------------------------------
Private Sub Worksheet_SelectionChange(ByVal _
Target As Range)
Dim Col As Range

If Target.Columns.Count = 1 Then
If Target.Column = 3 Or Target.Column = 4 Then
Set Col = Target.EntireColumn
With UserForm1
.ListBox1.List = Range(Col.Cells(2, 1), _
Col.Cells(Rows.Count, 1).End(xlUp)).Value
.Show 0
End With
End If
End If
End Sub
'---------------------------------------------------

Pour ce qui est du reste, j'ai toujours pas compris.
Excel, ce n'est pas de la littérature.

Les plages de cellules ont des adresses et des noms
d'onglet de feuille.
Si tu veux travailler avec le contenu d'une plage de
cellules, tu dois expliquer la manière dont tu veux
travailler et surtout définir les conditions qui doivent
être remplies et le résultat attendu.

Désolé, il y a peut-être d'autres répondeurs
en mesure de t'apporter une solution...
Avatar
Apitos
Bonjour MichD,

Excel, ce n'est pas de la littérature.



C'est pour cela que je cherche de l'aide pour une proposition d'une idée qui facilite de résoudre mon problème
Avatar
Apitos
Le code proposé modifié :

'---------------------------------------------------
Private Sub Worksheet_SelectionChange(ByVal _
Target As Range)
Dim Col As Range

If Target.Columns.Count = 1 Then
If Target.Column = 3 Then
With UserForm1
.ListBox1.RowSource = "Feuil2" & "!" & [Destination].Addr ess
End With
ElseIf Target.Column = 4 Then
With UserForm1
.ListBox1.RowSource = "Feuil2" & "!" & [Motif].Address
End With
End If
UserForm1.Show '0
End If
End Sub
'---------------------------------------------------