Concaténation de champs texte

Barrinou Messages postés 5 Date d'inscription mardi 3 juillet 2007 Statut Membre Dernière intervention 4 juillet 2007 - 3 juil. 2007 à 09:05
TeBeCo Messages postés 467 Date d'inscription lundi 24 juin 2002 Statut Membre Dernière intervention 9 mars 2011 - 4 juil. 2007 à 22:44
Salut tout le monde.
Voilà, j'aimerais réaliser une macro en vb qui me permettrait de concaténer deux champs textes d'une base de donnée afin de les avoir dans la même cellule. Ces deux champs textes doivent être séparés par un retour à la ligne, et chaque champs doit être précédé d'un texte type "remarque".
J'ai testé pas mal de commande type Chr(13) entre mes champs textes, mais l'ennui c'est que lorsqu'un champ est vide, cette commande m'afficher un petit carré à la place, ce qui est assez génant.
Quelqu'un pourrait-il m'aider svp ? Merci d'avance.

15 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
3 juil. 2007 à 09:13
VbLf, les sauts de lignes sous Excel  

activesheet.range("A1").Value = "line 1" & vbCr & "line2"

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Barrinou Messages postés 5 Date d'inscription mardi 3 juillet 2007 Statut Membre Dernière intervention 4 juillet 2007
3 juil. 2007 à 10:12
Merci je vais tester ça tout de suite :)
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
3 juil. 2007 à 12:20
J'ai testé pas mal de commande type Chr(13)



eh eh, me suis fais avoir aussi comme toi, seul le Chr(10) est connu d'excel. (Ou vbCr, comme le dit Renfield). Bref, c'est l'équivalent de Alt-Entrée, quand tu est en train d'écrire dans une cellule.

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
3 juil. 2007 à 12:23
me suis gourré dans le code collé plus haut,

chr(10) => VbLf

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

Posez votre question
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
3 juil. 2007 à 12:47
Arf, et j'ai copié bêtement ...

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
TeBeCo Messages postés 467 Date d'inscription lundi 24 juin 2002 Statut Membre Dernière intervention 9 mars 2011
3 juil. 2007 à 13:22
Environment.Newline <=== ca permet qqsoit l'OS d'avoir le "vrai" carractère donc portable sous unix, macOS, ect ...
pour ce qui est de l'affichage dans une cellule faut regarder si elle accepte le multiligne et suivant les controles utilisé tu peux "ruser" en inserant une textebox dans la cellule avec "Dock.Fill" sans bordure ni ombre ni rien en readonly et avec le multiline = true ou qqchs de similaire

TeBeCo
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
3 juil. 2007 à 14:24
1 - c'est VbNewline (VB6/VBA)

2 - ce que tu dis est faux dans le cas présent, sous Excel, les sauts de ligne c'est VbLf, VbNewline renverra VbCrLf, et tu verra un petit carré apparraitre dans ta cellule
Barrinou Messages postés 5 Date d'inscription mardi 3 juillet 2007 Statut Membre Dernière intervention 4 juillet 2007
3 juil. 2007 à 16:04
Hmm non en fait jvoudrais plutôt faire cette concaténation dans la définition des champs sous access, et non sous excell, ce qui sinon je ferai retaper toute une macro assez longue et qui m'a déjà pris une semaine à taper (jdébute, vous moquez pas :p)

Donc voilà, jvais la refaire en plus détaillé :
J'ai deux champs pour des remarques dans mes tables sur lesquelles je fais mes requêtes. L'ennui déjà, c'est que certaines remarques peuvent être vide (donc pas de texte dans la cellule).
Ce que je voudrais donc, c'est que dans ma cellule, une fois ma requête exportée sous excel, le résultat soit de ce type :

Remarque1 : [contenu de la cellule1]
Remarque2 : [contenu de la cellule2]

Et donc d'une il faut que Remarque1 ou 2 ne s'affiche pas si bien sûr le contenu est vide, mais donc aussi que cette concaténation se fasse sous access et qu'elle soit compatible avec une exportation sous excel.

J'espère que vous pourrez m'aider, j'ai expliqué au plus détaillé mon problème :p
Merci énormément d'avance.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
3 juil. 2007 à 16:28
ce genre de choses ?

SELECT 'Remarque : ' & MonChamp & Chr(10) & MonChamp2 FROM MaTable
Barrinou Messages postés 5 Date d'inscription mardi 3 juillet 2007 Statut Membre Dernière intervention 4 juillet 2007
3 juil. 2007 à 16:39
Bah oué c'est un peu le principe que je cherche comme présentation des données, sauf qu'il faut que les "remarque1 : " et "remarque2 : " ne doivent pas être écrit si la donnée n'est pas présente. Et le second problème est que chr(10) me retourne un joli petit carré quand j'exécute la requête, et il faudrait que ça ne soit pas le cas :)
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
3 juil. 2007 à 16:44
réécrit ta macro, c'est le plus propre

si tu ne veux pas certaines lignes, mets une clause WHERE pour conditionner la chose
Barrinou Messages postés 5 Date d'inscription mardi 3 juillet 2007 Statut Membre Dernière intervention 4 juillet 2007
4 juil. 2007 à 10:16
Bon, après divers test, la clause WHERE n'étant pas possible, j'ai choisi pour palier au critère d'affichage de "Remarque1" et "Remarque2" si la remarque était remplie de créer deux nouveux champs qui testaient si les remarques étaient remplie et affichaient donc "Remarque1" si la condition était vraie et rien si elle était fausse. La même pour l'autre remarque. Et finallement dans ma troisième colonne j'affiche tout.

1ère champs :
Expr1: (VraiFaux(([probleme1]<>"") Ou ([probleme1] Est Null);"Problèmes constatés : "))

2ème champs :
Expr2: (VraiFaux(([probleme2]<>"") Ou ([probleme2] Est Null);"Autres : "))

3ème champs :
(([Expr1] & [problem1] & Car(10) & [Expr2] & [probleme2]))

Ca résout au moins le premier problème.
Celui du retour à la ligne, quant à lui, persiste après avoir testé vos différentes suggestions.

Un collègue m'a fourni ce lien (http://support.microsoft.com/kb/115576/fr) du support technique Microsoft, mais j'ai un peu de mal à comprendre et savoir si finallement il y a une solution.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
4 juil. 2007 à 10:37
SELECT

IIF (Probleme1='' OR IsNull(Probleme1),'',
'Probèmes constatés : ' & Probleme1 & IIF ( Probleme2 ='' OR IsNull(Probleme2),'',Chr(10))
) &
IIF (Probleme2='' OR IsNull(Probleme2),'',
'Autres : ' & Probleme2 )

FROM Table3
WHERE Probleme1 & Probleme2 <> ''
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
4 juil. 2007 à 10:52
avec le code ci-dessus, tu aura par exemple :

Problèmes constatés : #####
Autres : ######

ou

Problèmes constatés : #####

ou

Autres : ######


enfin, si j'ai compris ta demande ^^ au pire, tu as une base que tu peux adapter
TeBeCo Messages postés 467 Date d'inscription lundi 24 juin 2002 Statut Membre Dernière intervention 9 mars 2011
4 juil. 2007 à 22:44
quote :
 1 - c'est VbNewline (VB6/VBA)

2
- ce que tu dis est faux dans le cas présent, sous Excel, les sauts de
ligne c'est VbLf, VbNewline renverra VbCrLf, et tu verra un petit carré
apparraitre dans ta cellule

Environment.Newline existe je me suis juste gourré de topic :p c'est du .net xD encore tte mes excuse pour cette erreur

TeBeCo
Rejoignez-nous