Comment (dé) fusionner rapidement les cellules identiques dans Excel
Dans ce tutoriel, nous allons découvrir comment fusionner rapidement des cellules lorsque celle-ci ont des valeurs identiques.
Pour cela, nous mettrons en place une méthode qui nous permettra d’automatiser cette action, afin de pouvoir la reproduire facilement sur toutes sortes de données.
Téléchargement
Vous pouvez télécharger le fichier d'exemple de cet article en cliquant sur le lien suivant :
Tutoriel Vidéo
Partie 1 : Comment fusionner rapidement des cellules identiques
Partie 2 : Comment défusionner rapidement des cellules
1. Présentation de l'exemple de table de fusion
Pour illustrer cet exemple, nous allons utiliser la base de données suivante :
Dans celle-ci, nous retrouvons le montant des ventes réalisées par les vendeurs d’un magasin, par mois et par rayon.
Si nous regardons les différentes colonnes, nous pouvons constater que des colonnes successives ont des valeurs identiques (les années, les mois,…).
Ce sont justement ces cellules que nous allons souhaiter fusionner.
En effet, l'intérêt de fusionner les cellules avec les mêmes valeurs est que cela permet de simplifier et de faciliter la lecture de grandes quantités de données dans Excel.
À l’inverse, si ces doublons ne sont pas fusionnés, cela peut rendre la lecture des données difficile et fastidieuse.
2. Comment fusionner les cellules identiques manuellement
Maintenant, imaginons que nous souhaitions réaliser ces opérations manuellement.
Nous devrons alors suivre les étapes suivantes :
- Tout d'abord, nous sélectionnons les cellules à fusionner. Cela peut être fait en cliquant sur la première cellule, en maintenant le bouton de la souris enfoncé et en faisant glisser la sélection jusqu'à la dernière cellule.
- Ensuite, rendons dans le menu « Accueil » du ruban afin de cliquer sur le bouton « Fusionner et centrer »
- Étant donné que les cellules contiennent déjà du contenu, Excel va nous afficher une boîte de dialogue pour que nous puissions confirmer la fusion des cellules, laquelle ne permettra de conserver que le contenu de la première cellule
- Les cellules sélectionnées sont maintenant fusionnées
Puis, nous devrons répéter ces mêmes opérations autant de fois que nécessaire.
Cette méthode peut ainsi s'avérer fastidieuse et chronophage, surtout lorsque l'on a de grandes bases de données contenant de nombreuses cellules identiques à fusionner.
Il peut également être difficile de repérer rapidement les cellules identiques, ce qui peut entraîner des erreurs.
C’est pourquoi, nous allons préférer mettre en place une méthode de fusion des cellules totalement automatisée, que nous pourrons ensuite réutiliser facilement en l’appelant dès que cela sera nécessaire.
3. Comment créer une macro pour fusionner les cellules avec les mêmes valeurs
Si vous connaissez un petit peu le fonctionnement d’Excel, vous devez vous douter que pour automatiser cette action, nous allons devoir développer une petite macro commande en VBA.
Bien entendu, pour que ce tutoriel soit accessible à tous, nous allons détailler chaque ligne de code et chaque notion dans le détail.
Voici les étapes nécessaires pour créer une macro commande VBA dans Excel :
- Pour commencer, nous allons lancer VBE (Visual Basic Editor) qui est l’éditeur de macro commandes en VBA des applications de la suite Microsoft Office. Pour cela, nous pouvons utiliser le raccourci clavier [Alt]+[F11].
- Dans l'éditeur VBA, cliquez sur « Insertion » puis « Module » pour créer un nouveau module.
- Pour insérer une macro dans ce module, nous saisissons la commande de démarrage de la macro en utilisant le mot-clé « Sub », suivi du nom de la macro. Le mot-clé « Sub » est utilisé pour définir le début de la procédure, puis lorsque nous validons la création de cette procédure en appuyant sur la touche [Entrée], Excel ajoute la fin de procédure avec la ligne « End Sub » :
Sub fusionnerSelection ()
End Sub
Nous viendrons ensuite entre les deux lignes de code, pour saisir les instructions VBA nécessaires pour effectuer les actions de la macro.
Attention, pour pouvoir enregistrer la macro que nous allons développer, nous devrons enregistrer le fichier Excel en utilisant une extension « .xlsm ».
4. Fusionner automatiquement les cellules identiques
Nous en arrivons maintenant au développement de la macro à proprement parler.
Pour commencer, nous allons déclarer une première variable et que nous appelons « c ». Celle-ci est typée en tant que « Range », ce qui va nous permettre de lui affecter des cellules de la feuille Excel.
Cette cellule « c » sera utilisée pour parcourir chaque cellule de la sélection.
Dim c As Range
Ensuite, nous allons mettre en place une boucle « For Each » pour passer en revue chaque cellule « c » de la sélection.
Il s’agit en effet d’une instruction VBA qui permet de parcourir chaque élément d'un ensemble de données, un à la fois, et effectuer une action sur chaque élément en cours de parcours. La boucle « For Each » est souvent utilisée dans les macros Excel pour parcourir les cellules d'une plage de données. Ici, la plage qui va nous servir de base est la plage correspondant aux cellules sélectionnées, que nous obtenons grâce à la variable « Selection » :
For Each c In Selection
À l’intérieur de cette boucle, nous allons pouvoir utiliser une instruction « If » pour vérifier si la cellule « c » n'est pas déjà fusionnée en regardant si la propriété « MergeCells » est égale à « False ».
Nous allons également effectuer un second test pour regarder si la cellule située juste en dessous a la même valeur que la cellule « c ». Si ces deux conditions sont remplies, alors nous allons pouvoir fusionner les cellules.
If c.MergeCells = False And c = c.Offset(1, 0) Then
Pour cela, nous allons déclarer une nouvelle variable que nous appelons « p » (pour « plage de cellules ») de type « Range », à laquelle nous allons commencer par affecter la cellule « c ».
Cette variable « p » pour permettra de stocker les cellules à fusionner.
Dim p As Range
Set p = c
Comme vous pouvez le constater, la variable « p » étant un objet VBA, nous devons utiliser le mot-clé « Set » pour lui affecter une donnée.
Cela étant fait, nous allons déclarer une nouvelle variable « c2 » de type « Range » et lui attribuer la valeur de la cellule située juste en dessous de la cellule « c ».
Nous utiliserons cette variable pour parcourir les cellules en dessous de la cellule « c » et vérifier si celles-ci doivent être incluses dans la fusion :
Dim c2 As Range
Set c2 = c.Offset(1, 0)
Maintenant, nous allons mettre en place une boucle « Do While » afin d’ajouter les cellules à fusionner à la variable « p ».
Cette boucle va donc continuer à s'exécuter tant que la cellule « c2 » est identique à la cellule « c ».
Do While c2 = c
À l’instar de la boucle « For Each » que nous avons utilisée un peu plus tôt, la boucle « Do While » est également une structure de contrôle de flux en VBA qui permet d'exécuter un bloc de code tant qu'une certaine condition est vraie.
La différence principale entre la boucle « For Each » et la boucle « Do While » est que la première itère à travers chaque élément d'une collection, tandis que la seconde répète le bloc de code tant que la condition est vraie.
Dans notre macro, nous avons utilisé la boucle « For Each » pour parcourir chaque cellule de la sélection, tandis que nous avons utilisé la boucle « Do While » pour parcourir les cellules identiques adjacentes à la cellule « c ».
Ensuite, à l’intérieur de cette boucle, nous allons souhaiter vérifier si la cellule « c2 » fait toujours partie de la sélection, afin de ne pas fusionner des cellules qui serait en dehors de cellules sélectionnées par l’utilisateur.
Si la cellule « c2 » n'est pas dans la sélection, nous sortons de la boucle « Do While » en utilisant l'instruction « Exit Do » :
If Intersect(c2, Selection) Is Nothing Then
Exit Do
End If
À partir de cette ligne, nous savons que la cellule « c2 » est identique à la cellule « c » et que celle-ci appartient bien à la sélection, nous pouvons donc utiliser la méthode « Union » pour ajouter la cellule « c2 » à la variable « p ».
Set p = Union(p, c2)
Pour finir avec la boucle, nous affectons à la variable « c2 » la cellule située juste en dessous de celle-ci, afin de pouvoir continuer l’analyse des cellules :
Set c2 = c2.Offset(1, 0)
Nous fermons enfin la boucle « Do While » avec l’instruction « Loop » :
Loop
Maintenant que nous disposons de la variable « p » qui contient une plage de cellules adjacentes situées les unes en dessous des autres et contenant des valeurs identiques, nous pouvons fusionner les cellules stockées dans celle-ci en utilisant la méthode « Merge » :
p.Merge
Si jamais nous lancions la macro à ce moment-là, nous pourrions constater que chaque fusion ferait l’objet d’une demande de confirmation à l’utilisateur, comme nous avons pu le voir un peu plus tôt.
Si nous souhaitons éviter ces interruptions, nous devrons désactiver temporairement les alertes Excel en utilisant la propriété « Application.DisplayAlerts » à laquelle nous commencerons par donner la valeur « False » pour désactiver les notifications, puis nous n’oublierons par de la réactiver après la fusion en affectant cette fois-ci la valeur « True » :
Application.DisplayAlerts = False
p.Merge
Application.DisplayAlerts = True
Pour finir, si nous souhaitons répliquer le comportement du bouton de fusion que nous avions utilisé un plus tôt depuis le menu Accueil du Ruban, il ne nous restera plus qu’à centrer les textes verticalement et horizontalement à l’intérieur des cellules fusionnées, en utilisant les propriétés « HorizontalAlignment » et « VerticalAlignment » de la plage « p » maintenant fusionnée :
p.HorizontalAlignment = xlCenter
p.VerticalAlignment = xlCenter
Nous pouvons maintenant tester notre macro sur une plage de cellules contenant des valeurs identiques, pour constater le bon fonctionnement de celle-ci.
Pour cela, nous sélectionnons les cellules correspondantes, puis nous appuyons sur les touches [Alt]+[F8] pour afficher la boîte de dialogue de lancement de macro :
Nous sélectionnons la macro « fusionnerSelection », puis nous appuyons sur le bouton « Exécuter » pour lancer la fusion automatique des cellules.
Avant :
Après :
5. Comment défusionner des cellules
Maintenant, je vous propose de découvrir comment effectuer l’opération inverse, c’est-à-dire que nous allons partir d’une base de données dans lesquelles nous retrouverons déjà des cellules fusionnées, que nous souhaiterons défusionner afin de nettoyer la base de données.
5.1. Pourquoi il ne faut pas fusionner les cellules Excel
En effet, il est souvent tentant de fusionner des cellules dans Excel pour créer une présentation plus propre et plus facile à lire. Cependant, et comme je vous l’expliquais dans un tutoriel précédent, je vous déconseille fortement le recours aux fusions de cellules, notamment pour les raisons suivantes :
- Difficulté de tri et de filtrage : lorsque nous fusionnons des cellules, nous créons une cellule unique qui ne peut pas être triée ou filtrée correctement. Cela peut rendre difficile la manipulation des données pour l'analyse.
- Perte de données : lors de la fusion de cellules, les données qui ne rentrent pas dans la nouvelle cellule fusionnée sont perdues. Si ces données sont importantes dans le cadre de l’analyse, cela peut entraîner des erreurs ou des résultats incorrects. C’est d’ailleurs pour cela que dans le tutoriel dédié à la fusion automatique de cellule, nous ne fusionnons que des cellules dont les valeurs sont exactement identiques.
- Problèmes de formatage : lorsque nous fusionnons des cellules, il peut être difficile de conserver un formatage cohérent. Cela peut entraîner des problèmes de mise en page et de lisibilité.
- Limitations de calcul : les formules et les tableaux croisés dynamiques peuvent également être affectés négativement par la fusion de cellules, car ils ne peuvent pas calculer correctement les données dans les cellules fusionnées.
Pour toutes ces raisons, la fusion de cellules peut sembler utile pour une présentation soignée, mais elle peut entraîner des problèmes lors de l'analyse des données. Il sera ainsi plus intéressant de rechercher d'autres moyens pour améliorer la présentation des données, comme la mise en forme conditionnelle ou l'utilisation de graphiques.
C’est d’ailleurs pour cela que lorsque l’on me transmet des données contenant des cellules fusionnées, mon premier réflexe est toujours de désactiver celles-ci. Alors, autant automatiser le processus pour effectuer cette opération en un seul clic !
5.2. Défusionner les cellules manuellement
Pour commencer, voyons comment défusionner des cellules manuellement.
Pour cela, nous devrons suivre les étapes suivantes :
- Pour commencer, nous sélectionnons la plage de cellules fusionnées que nous souhaitons défusionner,
- Puis, nous effectuons un clic avec le bouton droit de la souris afin de sélectionner l’option « Format de cellule »
- Dans la boîte de dialogue « Format de cellule », nous choisissons l'onglet « Alignement »
- Pour finir, nous décochons la case « Fusionner les cellules », et nous validons en cliquant sur le bouton « OK ».
Une fois que les cellules sont défusionnées, la valeur de la cellule précédemment fusionnée sera affectée sur la première d’entre elles.
Il nous restera alors à affecter cette valeur sur toutes les cellules maintenant vides.
Pour cela, si le nombre de cellules n’est pas très important, nous pouvons utiliser la poignée de recopie avec le bouton droit de la souris pour ne dupliquer que la valeur de la cellule.
En revanche, si le nombre de cellules est plus important et que cela demanderait trop de temps, nous pouvons utiliser la méthode suivante :
- Nous commençons par sélectionner la plage de cellules dans laquelle nous souhaitons remplir les cellules vides avec les valeurs des cellules situées au-dessus,
- Puis, nous nous rendons dans le menu « Accueil » du ruban, afin de dérouler « Rechercher et sélectionner » située tout à droite et nous choisissons l’option « Atteindre » (ou alors pour aller plus vite, nous pouvons également appuyer la touche [F5])
- Dans la boîte de dialogue « Atteindre », nous cliquons sur le bouton « Cellules vides » pour réduire la sélection uniquement aux cellules vides de la plage sélectionnée,
- Dans la première cellule vide de la plage sélectionnée, tapons la formule « =A2 » (les coordonnées de la cellule correspondent à celle située juste au-dessus de la cellule active,
- Enfin, nous validons la formule avec la combinaison de touches [Ctrl]+[Entrée] pour valider la formule sur toutes les cellules sélectionnées
La formule sera ainsi copiée dans toutes les cellules vides de la plage sélectionnée, ce qui remplira ces cellules avec la valeur de la cellule située juste au-dessus.
Pour remplacer la formule par les valeurs correspondantes, nous sélectionnons à nouveau la plage de cellules afin de les copier en utilisant la combinaison de touches [Ctrl]+[C].
Ensuite, pour coller les valeurs dans la même plage de cellules, nous utiliserons le menu « Accueil » > « Collage spécial » > « Valeurs ».
Comme vous pouvez alors le constater, cette méthode permet de gagner un temps précieux lorsque nous souhaitons défusionner rapidement des cellules, mais celle-ci nécessite encore toute une suite d’instructions. Nous pourrons alors gagner encore beaucoup de temps en automatisant le processus dans une macro VBA que nous pourrons ensuite exécuter d’un seul clic !
5.3. Création de la macro de défusionnement des cellules
Ici nous ne reviendrons pas sur les étapes de création d’une macro VBA, que nous avions déjà bien détaillées dans la partie précédente.
D’ailleurs, vous allez pouvoir constater que celle-ci sera bien plus simple à mettre en place et à comprendre.
Pour commencer, nous allons donc nous rendre dans un nouveau Module dans lequel nous allons créer une nous la macro VBA nommée « defusionnerSelection ». Cela signifie que lorsque nous appellerons cette macro, le code les instructions que nous allons saisir serons appelées automatiquement :
Sub defusionnerSelection()
Puis, nous déclarons une variable de type « Range » appelée « c ».
Cette variable nous permettra de parcourir chaque cellule de la sélection.
Dim c As Range
Pour parcourir chaque cellule de la sélection, nous utilisons une boucle « For Each » en utilisant la variable « c » que nous pourrons ensuite utiliser pour la suite de la macro :
For Each c In Selection
Maintenant que nous avons une variable nommée « c » qui correspond à la cellule actuelle, nous pouvons regarder si celle-ci est fusionnée, en analysant sa propriété « MergeCells ».
Cette propriété sera en effet égale à « True » si la cellule est bien fusionnée, elle sera donc égale à « False » dans le cas contraire.
Et donc, si c'est le cas, le code dans la boucle sera exécuté :
If c.MergeCells = True Then
Nous déclarons ensuite une variable de type « Range » appelée « p ». Nous utilisons cette variable pour stocker l'aire de fusion de la cellule actuelle, c’est-à-dire les coordonnées des cellules incluses dans la fusion :
Dim p As Range
Set p = c.MergeArea
Une fois que l’aire de la fusion est stockée dans la variable « p », nous pouvons annuler la fusion de la cellule actuelle avec la méthode « UnMerge », qui réalise l’opération inverse de la méthode « Merge » que nous avions découverte dans la partie précédente :
c.UnMerge
Maintenant que les cellules sont défusionnées, il ne restera plus qu’à affecter la valeur de la cellule actuelle à toutes les cellules situées dans l'ancienne aire de fusion de la cellule et que nous avions stockées dans la variable « p » :
p.Value = c.Value
Pour finir, nous pouvons fermer la boucle « For Each » avec un « Next » :
Next
La macro étant maintenant terminée, nous pouvons maintenant la tester sur une plage de cellules contenant des cellules fusionnées pour constater le bon fonctionnement de celle-ci.
Pour cela, nous sélectionnons les cellules correspondantes, puis nous appuyons sur les touches [Alt]+[F8] pour afficher la boîte de dialogue de lancement de macro :
Nous sélectionnons la macro « defusionnerSelection », puis nous appuyons sur le bouton « Exécuter » pour lancer la défusion automatique des cellules :