VBA Concaténer Textes TextBox et Cellules

[Résolu/Fermé]
Signaler
-
 Jagwar -
Bonjour,

Débutant sur VBA (excel), j'ai créé des Useforms (conetnant des textBox, des menus déroulants et des boutons) me permettant de guider les utilisateurs, afin de récupérer les informations nécessaires, pour l'utilisation d'une "base de données". Base de données regroupel'ensemble des informations d"une Affaire de Travaux à réaliser (Type de marché, Type de prestations, Lieux d'exécution - Commune - département, etc ...).

L'une de ces TextBox définit la désignation de l'affaire, et je récupere les choix fait par les utilisateurs dans deux menus déroulant pour la Commune et le Département.


Tb_NomAff est la TextBox rempli par les utilisateurs pour définir le Nom de l'affaire
Range("NomAff") est ma plage de cellule fusionnée reprenant Tb_NomAff

Private Sub Tb_NomAff_Change()

'Va chercher la valeur du Texte Tb_NomAff
'Et remplit les cellules fusionnées Etude de Prix!E1:L4 ("NomAff")

Range("NomAff") = Tb_NomAff

End Sub


Range("CodeDépartement") me permet d'identifier le choix du département, selon ce choix (clic sur B_Dept1 = choix Val de Marne ou clic sur B_Dept2 = choix Seine et Marne), je modifie la liste des communes possible dans le menu déroulant (soit Com94 : liste des communes du Val de Marne, soit Com77 liste des communes de Seine et Marne).
Range("Département") reprend le choix du Département
Range("Commune") reprend le choix de la Commune

Private Sub B_Dept1_Change()

'Cherche la Selection du Département
'Remplit la cellule Etude de Prix!M16
'Et modifie la Liste des Communes

If Fra_Dept.B_Dept1 Then
Range("CodeDépartement") = 1
Li_Comm.RowSource = "Com94"
Else
Range("CodeDépartement") = 2
Li_Comm.RowSource = "Com77"
End If

Li_Comm.ListIndex = 0

End Sub

Private Sub B_Dept2_Change()

'Cherche la Selection du Département
'Remplit la cellule Etude de Prix!M16
'Et modifie la Liste des Communes

If Fra_Dept.B_Dept2 Then
Range("CodeDépartement") = 2
Li_Comm.RowSource = "Com77"
Else
Range("CodeDépartement") = 1
Li_Comm.RowSource = "Com94"
End If

Li_Comm.ListIndex = 0

End Sub

Private Sub Li_Comm_Click()

'Cherche la Selection de la Commune

Commune = Li_Comm.ListIndex
Range("CodeCommune") = (Commune + 1)

If Fra_Dept.B_Dept1 Then
Range("NumCom") = (Commune + 2)
Else
Range("NumCom") = (Commune + 49)
End If

NumLigne = Range("NumCom")
Range("Département") = Sheets("Base de donnée").Range("B" & NumLigne).Text
Range("Commune") = Sheets("Base de donnée").Range("A" & NumLigne).Text


Mon probleme me parrait tres simple, mais je n'arrive pas à m'en sortir ...
Je cherche à regrouper dans une seule plage de cellule fusionnée (nommée Désignation : par exemple), le nom de l'affaire, la commune de réalisation et son département.

Dans un premier temps je cherche "juste" à concaténer (je ne sais pas si c'est le bon terme), ces informations ...
dans un deuxième temps je souhaiterais mettre en forme automatiquement cette cellule, afin que sur la premiere ligne j'ai le nom de l'affaire et sur la deuxième ligne : "Commune de :" Choix de commune & "- Département :" Choix du Département.

Existe t il une solution à mon probleme ?

Merci d'avance ...

3 réponses

Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 175
bonjour,
peut-être avec..
Range("Désignation") = Range("NomAff") & Range("Commune") & Range("CodeCommune")
S'il daut mettre des intercamaires par ex ":"

Range("Désignation") = Range("NomAff") & ":" & Range("Commune") & ":" & Range("CodeCommune")
A+
@ lermite222 merci de ta réponse ...

C'est la première chose que j'ai essayé, mais j'obtiens un message d'erreur :

"Erreur d'exécution '13'

Incompatibilité de type"

J'ai donc essayé de déclarer des "variable" type string pour récupérer des chaines de caractere des cellules Range("NomAff"), Range("Commune") et Range("Département") ... mais cela ne marche pas non plus !!!

Le message d'erreur s'affiche quand je clic sur le bonton de choix du département ... (je précise que mon code marche tant que je garde les différents choix faits par les utilisateur dans différentes plage de cellules fusionées).

Mon erreur provient peut etre du fait de remplir des cellules différentes, y-a t il une syntaxe particulière pour remplir directement une cellule avec les textes issus d'une textbox d'un coté et de choix de bouton et de menus déroulant de l'autre ?
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 175 > Niglo
Arrrf, j'ai cru que tu avais déclaré et validé tes plages
Il n'est pas nécessaire de travaillé avec des plage, tu peu très bien le faire avec les adresses de cellules..
ex: si tu veux mettre NomAff en A1 c'est.. Range('A1")=Text1.text
ou par adresse de ligne et colonne, plus facile à indexé...
Cells(NuméroLigne,numeroColonne) = text1.text
Pour A1 ce serrait
Cells(1,1) = text1.text
Les codes ne définissant pas la feuille doivent êtres mis de préférence dans le modue de la feuille, sinon..
Ex: Sheets("Feuil1").Cells(1,1) = NomUserForme.text1.text


Dim
>
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020

Merci pour ton aide ...

Je n'ai pas de soucis pour récupérer des textes individuellement ... que ce soit par Range("Cellule").text ou Range("cellule") ... les textes repris dans les cellule Range("NomAff"), Range("Commune") et Range("Département") correspondent bien aux choix des utilisateurs ...

Mon probleme est "d'assembler" ces textes dans une seule et meme cellule (que ce soit cellule ou plage de cellule fusionnée ... il me semble que cela ne pose pas de probleme).
P.S : Je me suis permis de créer un nouveau message parce que je n'ai pas trouvé de solution dans les différentes discussions du Forum. (j'ai chercher les discussion tournant autour de "concaténer", "textbox", "mise en forme automatique", etc.)

J'ai assez "betement" repris le terme Concaténer sans réellement savoir si c'est la base de mon probleme ...

Veuillez donc, m'excuser par avance si la réponse se trouve sur le Forum (je n'ai peut etre pas cherché au bon endroit)
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 175
NIGLO...
Comment tu déclare et assigne tes "range" "Commune"," Département" et..
A+
>
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020

Je détermine NumLigne de la "base de donnée" qui correspond au numéro de la ligne de la commune et je vais chercher dans la colonne A le nom de la commune correspondante, et dans la colonne A celui du département.
(Ainsi en faisant son choix dans le menu déroulant de la liste des commune, l'utilisateur "remplit" Range("Département") et range("Commune") ...

NumLigne = Range("NumCom")
Range("Département") = Sheets("Base de Donnée").Range("B" & NumLigne).Text
Range("Commune") = Sheets("Base de Donnée").Range("A" & NumLigne).Text


Jusque là je n'ai pas de probleme Range("Département") et Range("commune") se remplisse bien correctement.
J'ai définit Département, et Commune : les plage de cellules fusionnées ='Feuille1!$E$17:$F$17 et ='Feuille1!$K$17:$N$17, directement dans Excel : Insertion/Nom/Définir

Je ne sais pas si je répond à ta question ... Je n'ai pas déclarer de variable Commune, Département ... j'avais essayé de les déclarer en tant que String, mais j'éai été incapable de les utiliser ...

n'hesite pas à me dire si je ne suis pas clair ...

P.S : Entre temps j'ai essayé : mais j'ai un message d'erreur "erreur de compilation Erreur de syntaxe"
Désignation As String
Désignation = "= "Désignation d'Affaire : " & Range("NomAff").Value & _
& VbCrlf & "Commune de : " & Range("Commune") & "- Département : " & Range("Département").Value "
> Niglo
Re -

N'arrivant toujours pas à récupérer mes différents textes de cellule et de textbox, j'ai essayé la mise en forme de texte sur plusieurs lignes

Dim Texte As String

Texte = "Désignation" & vbCrLf & "Commune" & vbCrLf & "Département"
Range("B42:D44").Value = Replace(Texte, Chr(13), "")


J'obtiens bien :


Désignation
Commune
Département


Je ne comprends donc pas pourquoi je n'arrive pas à faire référence au texte des cellules à la place des textes que j'ai tapés dans le code.

Comment écrire le meme code en insérant le texte issus de plage de cellule nommée (dans mon cas : Range("NomAff") - Range("Commune") et Range("Département") ) ???

Ce que je n'arrive pas à faire :

Dim Texte As String

Texte = "Désignation" & Range("NomAff").Text & vbCrLf & "Commune de :" & Range("Commune").text & "Département :" & Range("Département").text

Range("B42:D44").Value = Replace(Texte, Chr(13), "")</


J'obtiens :

Désignation
Commune de :Département :


Il me manque les valeurs de mes plages de cellule
> Niglo
J'ai "presque" trouvé mon erreur ... (je n'ai plus de probleme pour concaténer deux plages de cellule fusionnée - je me sort en créant des varaibles String dont la valeur est [issue d'une recherche dans la base de donnée].text)

Il ne me manque plus que la syntaxe pour récupérer le texte d'une Textbox remplie par les utilisateurs

Quelqu'un peut il me donner la commande ?

Ma textBox s'appelle Tb_NomAff

j'ai essayé :
- Tb_NomAff (renvoie une valeur vide)
- Tb_NomAff.text (renvoie une valeur vide)
- Tb_NomAff.Value (ne marche pas)
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 175
Essaye de cette facon..
OK pour les plages.
Texte = "Désignation :" & Tb_NomAff.Text & vbCrLf & "Commune de :" & Range("Commune").text & "Département :" & Range("Département").text
Si ca ne fonctionne pas..
Vérifié dans les proproéré de ta textBox, propriété name si c'est bien Tb_NomAff
dans quel module est la macro
si le textbos est sur un UF, il faut le nommer (féjà expliquer plus haut) et ce serrait alors..

Texte = "Désignation :" & UserForme1.Tb_NomAff.Text & vbCrLf & "Commune de :" & Range("Commune").text & "Département :" & Range("Département").text
où UserForme1 doit être le nom de l'UF
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 175 > Niglo
De rien,
Petits conseils...
Quand tu est dans un module de feuille, tu peu appeller avec Range("A1") ou Cells(1,1)
quand tu est dans un module standard (Module1 par ex)
tu a intérêt à nommer les endroit où se situe le contrôle ou la cellule
Sheets("Feuil1").range("A1") ou Sheets("Feuil1").cells(1,1)
Si beaucoup d'appel à une même feuille..
With Sheets("Feuil1")
.Range("A1") = .cells(6,6)
end With
ou encore
Dim Fl as objet
set Fl=sheets("Feuil1")
et après...
Fl.cells(2,1)=Fl.range("A1")

ou encore
Sheets("Feuil1").select
Range("A1") = Sheets("Feuil2").range("A1")
A+
>
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020

Merci encore ...

Si je peux abuser de ta patience ...

Sais tu où je pourrais trouver des codes de mise en forme de UserForm, TextBox, et Texte dans cellules ...

Je cherche en fait à uniformiser mes mise en pages, pour que les utilisateurs (quelque soit leurs "config excel) travaillent sur les meme document (Affichage, Format, etc ...)

Je cherche donc toutes les mises en forme possible ... merci d'avance !!!

Amicalement

Niglo
> Niglo
Au cas où cela interresserait quelqu'un d'autre ... ma "solution" pour concatener texte de TextBox et autre texte :

Dim TexteConcatené As String, ToTo As String, TaTA As String
Dim BiBi As String, BoBo As String

ToTo = Userform.TextBox.Text
TaTa= Sheets("Feuil1").Range("PlagedeCellule1").Text
BiBi= Sheets("Feuil2").Range("PlagedeCellule2").Text
BoBo = Sheets("Feuil3").Range("PlagedeCellule3").Text

TexteConcatené = ToTo & vbCrLf & TaTa _
& " - " & BiBi & vbCrLf & BoBo
Range("PlageCelluleCible").Value = Replace(TexteConcatené, Chr(13), "")
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 175 > Niglo
pas compliqué..
Quand tu est, par exemple sur ton Userform tu tape F1 et pour avoir toutes les solutions sélectionner Voir Aussi
Idem our tout les contrôles.
A+
Merci Niglo t'as derniere solution marche tres bien ;)