Excel fournit une fonction de classeur et un opérateur qui ont tous deux le même objectif: combiner des chaînes en une chaîne plus longue. La fonction CONCATENER et l’opérateur esperluette (&) ont essentiellement le même objectif.

De nombreuses personnes utilisent l’opérateur esperluette de préférence à la fonction CONCATENATE, car elle nécessite moins de frappe, mais CONCATENATE deviendrait infiniment plus précieux s’il gérait une plage de cellules.

Malheureusement, ce n’est pas le cas, mais vous pouvez créer votre propre fonction définie par l’utilisateur qui concaténera très bien chaque cellule d’une plage.

Considérez la macro suivante:

Function Concat1(myRange As Range, Optional myDelimiter As String)

Dim r As Range

Application.Volatile     For Each r In myRange         Concat = Concat & r & myDelimiter     Next r     If Len(myDelimiter) > 0 Then         Concat = Left(Concat, Len(Concat) - Len(myDelimiter))

End If End Function

Cette fonction nécessite une plage et fournit un délimiteur facultatif.

La dernière instruction « If » supprime le dernier délimiteur de fin de la chaîne concaténée. Avec la fonction CONCAT1, des cellules peuvent être ajoutées et supprimées dans la plage, sans la maintenance requise par CONCATENATE ou les formules esperluette. Tout ce que vous avez à faire est d’appeler la fonction de l’une des manières suivantes:

=CONCAT1(C8:E10)

=CONCAT1(C8:E10,"|")

La deuxième méthode d’appel de la fonction utilise le délimiteur facultatif, qui est inséré entre chacune des valeurs concaténées de la plage C8: E10. Cependant, cela pose un problème: si une cellule de cette plage est vide, vous pouvez vous retrouver avec deux délimiteurs séquentiels. Si vous préférez n’avoir qu’un seul délimiteur, vous devez apporter une petite modification à la fonction:

Function Concat2(myRange As Range, Optional myDelimiter As String)

Dim r As Range

Application.Volatile     For Each r In myRange         If Len(r.Text) > 0 Then             Concat = Concat & r & myDelimiter         End If     Next r     If Len(myDelimiter) > 0 Then         Concat = Left(Concat, Len(Concat) - Len(myDelimiter))

End If End Function

_Note: _

Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites ExcelTips), j’ai préparé une page spéciale qui comprend des informations utiles.

lien: / excelribbon-ExcelTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet de navigateur].

ExcelTips est votre source pour une formation Microsoft Excel rentable.

Cette astuce (3062) s’applique à Microsoft Excel 97, 2000, 2002 et 2003. Vous pouvez trouver une version de cette astuce pour l’interface ruban d’Excel (Excel 2007 et versions ultérieures) ici:

link: / excelribbon-Concatenating_Ranges_of_Cells [Concaténation de plages de cellules].