Contanténer des valeurs texte à l'aide d'une expression.

Publié le par Raymond

Lorsque vous voulez concaténer les valeurs de deux ou plusieurs champs de texte, vous créez une expression qui utilise l'esperluette (&). Par exemple, supposons que vous avez un formulaire qui est appelé employés. Vous avez affiché les prénom et nom de chaque employé dans des champs séparés, mais vous souhaitez afficher le nom complet du salarié dans un contrôle texte du formulaire.

Pour afficher le nom complet, vous utilisez cette expression:

Me!FirstAndLast = Me!FirstName & " " & Me!LastName

L'expression utilise l'opérateur esperluette et concatène les valeurs des champs FirstName et LastName dans le contrôle FirstAndLast. Elle utilise également l'expression d'une paire de guillemets séparés par un espace pour insérer un espace entre le prénom et le nom.

Comme autre exemple, vous pouvez utiliser l'expression suivante pour afficher le nom et le prénom, séparés par une virgule et un espace:

Me!FirstAndLast = Me!FirstName & ", " & Me!LastName

Dans ce cas, l'expression insère une virgule et un espace entre le prénom et le nom.

Parfois, l'un des champs que vous voulez concaténer contient une valeur nulle. Lorsque vous utilisez l'opérateur & sur un champ Nom qui n’est pas renseigné le résultat attendu en concaténation ne va pas être satisfaisant.
Exemple : FirstName = ‘Raymond’
              LastName = ‘Sénèque’
              FirstAndLast sera égal à ‘Raymond, Sénèque’
 
Si         FirstName = ‘Raymond’
           LastName = Null
           FirstAndLast sera égal à ‘Raymond, ‘
Si         FirstName = Null
           LastName = ‘Sénèque’
           FirstAndLast sera égal à ‘, Sénèque’
Lorsque vous concaténez les valeurs de plusieurs champs dans une nouvelle chaîne, vous ne voulez peut-être inclure une virgule (ou autre caractères) dans la nouvelle chaîne de caractères que lorsqu'il existe des données dans le champ suivant ou précédent.
Pour inclure une valeur conditionnelle vous devez utiliser le signe + au lieu de l'esperluette.
Si nous reprenons le cas ci-dessus, nous voulons obtenir les valeurs suivantes :
‘Raymond, Sénèque’ ou ‘Raymond’ ou ‘, Sénèque’
selon que les champs seront renseignés ou non.
 
Pour obtenir ce résultat nous allons procéder à la modification de l’expression. Au lieu de

Me!FirstAndLast = Me!FirstName & ", " & Me!LastName
 
Nous indiquerons:
 
Me!FirstAndLast = Me!FirstName & (", " + Me!LastName)
 
L'opérateur + concatène le texte de la même façon que l'opérateur &. Toutefois, l'opérateur + prend également en charge ce que l'on appelle la propagation Null. La propagation Null garantit que si l'un des composants d'une expression est Null, le résultat de l'ensemble de l'expression est également Null. 
Dans l'exemple ci-dessus, l’expression qui est évaluée est : (", " + Me!LastName). 
Parce que l’opérateur utilisé est le signe + la valeur retournée par cette expression sera une virgule suivie d’une espace suivi de LastName si LastName contient une valeur. Si LastName est Null, la valeur retournée sera Null et donc sans la virgule ni l’espace.
 
Et nous obtiendrons le résultat escompté.
Vous pourriez également faire l’expression suivante :
Me!FirstAndLast = (Me!FirstName + ", ") & Me!LastName
Qui tiendrait compte de la valeur Null de FirstName et non de la valeur Null de LastName.
Si votre instruction ne contient qu’une seule expression conditionnelle, les parenthèses ne sont pas obligatoires mais si vous indiquez plusieurs expressions conditionnelles, celles-ci sont obligatoires pour toutes les expressions conditionnelles. Prenez l’habitude d’indiquer les expressions conditionnelles entre parenthèses quel que soit le nombre d’expressions.

Publié dans Astuces

Commenter cet article

JOLY 17/01/2008 06:38

Merci Raymond
Jean-Luc JOLY

Jean 16/01/2008 16:35

Merci Raymond
j'utilisais déjà cette formule. J'espérais simplifier le tout car je dois en fait concaténer une douzaine d'info sur une étiquette (en plus de l'adresse complète) :o((
Encore merci pour ton aide qui m'a déjà été souvent fort précieuse.
Jean

Raymond 16/01/2008 20:11

Si tu as plus de 5 ou 6 variables ou contrôles à concaténer, le problème n'est plus le même car dans ce cas-là on peut passer par une propagation Null sans perdre trop d'efficacité et la compléter par un test sur le résultat.si tu procèdes ainsi:Texte = ("- " + Texte1) & ("- " + Texte2) & ("- " + Texte3) & ("- " + Texte4) & ... If Len(Texte) > 2 Then    If Left(Texte, 2) = ", " Then        Texte = Mid(Texte, 3)    End IfElse    Texte = ""End IfLe     If Left(Texte, 2) = ", " Then    peut être supprimé car si la longueur est > 2 il y a obligatoirement une donnée en position 3 (il devrait y avoir ...).et là, tu retrouveras toutes tes données séparées par un signe, virgule ou tiret etc. avec à la limite une valeur de Texte étant une chaîne vide ("").Compte tenu des suppléments d'instructions, il faut que le nombre de données soit important. 

Jean.VanDamme 16/01/2008 13:31

Bonjour
pour n'avoir un tiret entre les deux zones que si les 2 zones sont différentes de NULL, comment s'y prendre ?
Affichage :
2F si uniquement 2 exemplaires fr
3N si uniquement 3 exemplaires nl
mais 2F-3N si 2 fr et 3 nl
Merci d'avance
Jean

Raymond 16/01/2008 16:22

dans ce cas il n'y a pas besoin de passer par une propagation Null d'opérateur.si on a Texte1 qui contient 2F ou Null, texte2 qui contient 3N ou null et texte3 qui contient le résultat, tu peux faire ceci dans un formulaire:Me.Texte3 = IIf(IsNull(Me.Texte1), Me.Texte2, IIf(IsNull(Me.Texte2), Me.Texte1, Me.Texte1 & "-" & Me.Texte2))ou faire ceci dans un module:Texte3 = IIf(IsNull(Texte1), Texte2, IIf(IsNull(Texte2), Texte1, Texte1 & "-" & Texte2))

JOLY 15/01/2008 14:04

Bonjour,
J'utilise la concaténation suivante:
=[Type] & " du" & Format([Date R];"\ &&\ @@@@"". An ""&&\ ") & " / "+Format([Date];"j\ mmmm\ aaaa")
Résultat:
Mariage du 04 VEND. An 12 / 27 septembre 1803
Je souhaiterais supprimer le / entre la date républicaine et la date grégorienne (je sais faire !)
Et noter la date grégorienne entre ()
Exemple
Mariage du 04 VEND. An 12 (27 septembre 1803)
Et là je patauge dans les parenthèses !!
Si vous pouvez m'aider merci
Jean-Luc

Raymond 15/01/2008 14:19

Bonjour.ceci devrait suffire: ... & " ( " & Format([Date];"j\ mmmm\ aaaa") & " ) "au lieu de:... & " / "+Format([Date];"j mmmm aaaa") dans ce cas, l'opérateur + ne sert à rien car il n'est pas dans une expression conditionelle.