VBA : Fusion cellules identiques sans plage

Résolu/Fermé
XLSNoob - 24 nov. 2020 à 17:37
 XLSNoob - 26 nov. 2020 à 16:40
Bonjour à tous,

J'ai besoin dans le cadre de la création d'un planning de fusionner des cellules horizontalement adjacentes lorsqu'elles sont identiques.

J'ai trouvé le script ci dessous sur le forum. Je l'ai testé, il fonctionne et correspond parfaitement à mes attentes à une exceptions près. Je souhaiterai modifier ou supprimer la plage afin qu'elle s'applique sur toute la feuille Excel.
La solution doit être simple mais après avoir tenter et rechercher de nombreuses choses pour modifier le script, je n'y parviens pas.

Quelqu'un peut il m'aider à modifier ce script afin qu'il s'applique à toute la feuille ou modifié la plage afin qu'elle s'applique à toutes les lignes d'un tableau ?

Sub fusion()
Dim co As Long
Dim nbco As Long
Dim plage As Range
Set plage = Sheets("T2").Range("B25:V25")
Application.DisplayAlerts = False
With plage
nbco = .Columns.Count
For co = nbco To 2 Step -1
If .Cells(1, co) = .Cells(1, co - 1) Then
Range(.Cells(1, co), .Cells(1, co - 1)).MergeCells = True
End If
Next co
End With
Application.DisplayAlerts = True
End Sub


Configuration: Windows / Chrome 87.0.4280.66

9 réponses

eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 238
25 nov. 2020 à 17:08
Il y a des pb...

Tu parles d'un tableau, j'en vois 4...
Ils sont tous à faire ? Seulement à partir du 2nd que tu as rempli ? Juste le 2nd ?
Il peut y en avoir plus ?

ce ne sont pas des saisies mais des formules.
Si tu veux pouvoir les restaurer il faut que les colonnes qui doivent être absolues le soient, celles qui doivent être relatives le soient.
Par exemple tu as mis en C27
=SI(B27="";"";RECHERCHEV($E$22;Données!$A$19:$U$45;2;FAUX))

B
doit être absolu,
...;2;...
désigne une colonne absolue qu'il faut rendre relative.
Ta formule doit être :
=SI($B27="";"";RECHERCHEV($E$22;Données!$A$19:$U$45;COLONNE()-1;FAUX))

Je te laisserai modifier les autres formules, sinon on peut les remplacer par leur valeur. Tu dis

Si le même texte se trouve sur plusieurs jours, il faut tout fusionner ou seulement par journée ?
eric
1
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 238
Modifié le 25 nov. 2020 à 19:28
Bon, c'est bien :-)

J'attendais tes réponses mais j'avais pas mal avancé.
Je te livre ma version des fois que ça t'intéresse.
Tu as un togglebutton pour fusionner/défusionner.
La même macro peut être appelée depuis plusieurs feuilles, juste à ajouter un bouton dessus.
Sans réponse j'ai donc laissé fusionné sur plusieurs jours.
https://www.cjoint.com/c/JKzsuRQ8IZL
eric

PS : je commence au tableau 2 car l'écartement régulier de 16 n'est pas respecté pour le 1er tableau
Si ce n'est pas possible de corriger, il faudra faire un recherche de Nom en A plutôt que la boucle pour avoir leur position

1
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 238
26 nov. 2020 à 12:12
Bonjour,

voilà, mais attention aux libellés qui devraient être identiques comme 'Modifs liés à la vie d'un contrat' et 'Modifs liées à la vie d un contrat '

dans la nouvelle version du fichier il y a un tableau en plus par rapport au fichier d’origine que je t’avais transmis.
tu peux en mettre tant que tu veux, en respectant la hauteur de 16 pour chaque bloc.
Par contre tu as ajouté une ligne avec les horaires. J'ai mis un moment à le voir pour comprendre ce qui me mettait le boxon.
Avec des macros tu ne peux plus changer la structure de fichier sans les adapter...
A tester : https://www.cjoint.com/c/JKAlmBppyUL
eric
1
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 238
24 nov. 2020 à 19:14
Bonjour,

Merci de déposer le fichier xls (réduit au nécessaire et anonymisé, avec les explications et éventuellement le résultat attendu) sur cjoint.com et coller ici le lien fourni.

eric
0

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

Posez votre question
Bonjour eriiic,

Merci pour votre réponse.

Vous trouverez le lien vers le fichier ci dessous :

JKyuj6ewdwP_PLANNING-HEBDO-Vinternet.xls

Le document se compose de deux parties :"Planning Chargés de formation" et "Planning promotion"".

Ma question porte uniquement sur la partie "planning promotion".
Je souhaite à l'aide d'une macro VBA fusionner automatiquement les cellules horizontalement adjacentes identiques.

Exemple : Ligne 27 concernant l'"apprenant 1" je souhaiterai fusionner les cellules C27 ET D27 car leur contenu est identique (Mat. RH).
Je ne souhaite pas fusionner les cellules verticalement adjacentes

J'ai réussi à le faire grâce au script transmis dans mon poste précédent, cependant je ne parviens qu'a le faire sur une seule ligne, j'aimerai que le script s'applique sur les 3 plannings promotion présent dans la feuille.

Mes plannings promotions s'alimentent automatiquement par le biais d'une liste déroulante et de recherche V.
L'objectif est donc :une fois que le planning s'est complété automatiquement à partir de la feuille "donnée" appuyer sur un bouton qui serai visible en haut de la feuille "Semaine X" afin que la macro "Fusion horizontale" s'applique afin de rendre plus lisible les plannings.

Pour information, le document est en cours d'élaboration toutes les données ne sont pas présente.

Je me tiens disponible pour tout complément d'information.
0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 238
24 nov. 2020 à 22:08
Tu as collé le texte du lien.
Il faut faire un clic-droit dessus et choisir Copier l'adresse du lien
0
https://www.cjoint.com/data/JKyuj6ewdwP_PLANNING-HEBDO-Vinternet.xls

Et voilà, merci pour la remarque c'était une erreur de manip.
0
Bonsoir Eric,

J'ai fait le même constat que toi ce matin en rebossant sur mon document. Toutes les formules ont été revues.

Et à force de chercher et de tenter des choses j'ai réussi à paramétrer ma macro ! (je suis un obstiné...)

Mon document fonctionne donc parfaitement.

Merci tout de même.
0
Woua. Je ne pensais même pas que c'était possible à faire … T'as solution est vraiment idéal (moi j'ai bricolé !). le système de pouvoir fusionner ET défusionner me fait rêver ! J'ai cherché une solution toute la journée sans succès pour pouvoir le faire.

J'ai essayé de regarder tes macros pour les utiliser dans mon nouveau document mais ça dépasse mes compétences ! Cependant je ne désespère pas un jour peut être !

Dans mon document à terme j'aurai besoin d'avoir une feuille par semaine (soit 52 feuilles). Est-il simple de transposer cela à toutes les feuilles du document ? si oui comment le faire ?

Pour répondre à ta questions idéalement je souhaitais fusionner les cellules identiques seulement dans la journée,

Je te joint mon nouveau fichier avec mon système pour fusionner les cellules. Tu as le droit de te moquer de moi quand tu verras mes macros !
Je ne veux pas abuser de ton temps, mais si cela ne te prend pas beaucoup de temps je suis preneur pour que tu transposes ta solution sur mon nouveau document. Sinon je chercherai comment le faire par moi même.

https://www.cjoint.com/c/JKztOso0SrP

Dans tous les cas un grand merci à toi pour ce super travail !
0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 238
25 nov. 2020 à 23:16
Ok mais tu ne réponds pas à mes interrogations.
Faut-il commencer au tableau 2 ou au 1 ?
Si c'est au 1, peux-tu régler cette différence entre 2 tableaux qui est 16 pour tous les autres, sauf entre 1 et 2.
Les suivants auront-ils toujours cet écart de 16 lignes ?
Sinon il faut que je change la détection des débuts des tableaux.
Contrairement à toi, j'ai un unique bouton pour toute la feuille. Il faut que je puisse m'y retrouver à coup sûr.

Dans mon document à terme j'aurai besoin d'avoir une feuille par semaine (soit 52 feuilles). Est-il simple de transposer cela à toutes les feuilles du document ? si oui comment le faire ?
Je te l'ai dit, j'ai fait la macro pour qu'elle puisse s'exécuter sur n'importe quelle feuille.
Il suffit d'y ajouter un togglebutton pointant sur la macro, et que la structure soit la même.
eric
0
Xlsnoob > eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024
25 nov. 2020 à 23:50
Concernant Le tableau 1 (planning des chargées de formation) il n’est pas nécessaire que la macro s’applique dessus. Tu peux donc commencer à partir du tableau 2 comme tu l’as fait dans la version que tu m’as fournis.

Les suivants seront toujours identiques et le nombre de tableau sera également identique peu importe la feuille dans le classeur.

Concernant l’application sur les autres feuille c’est vraiment top je ferai ça car la structure restera toujours la même. Je vais simplement dupliquer l’onglet x 52 et ajouter un togglebutton sur chaque feuille.

Merci eric.
0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 238 > Xlsnoob
Modifié le 26 nov. 2020 à 00:04
Bah, ajoute-le avant de dupliquer, il sera dessus ;-)
En résumé il n'y a que la limitation au jour qui manque. Tu confirmes ?
Elles feront toujours 4 colonnes ou il faut prévoir une éventuelle extension ?
Je verrai demain...
0
XLSNoob > eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024
26 nov. 2020 à 07:58
Oui exact je perdrai moins de temps ! Oui je te confirme il ne manque que la limitation par jour et dans la nouvelle version du fichier il y a un tableau en plus par rapport au fichier d’origine que je t’avais transmis.

Elles feront toujours 4 colonnes pas d’extension à prévoir.

Merci et bonne journée
0
Bonjour Eric,

C'est parfait, le résultat va au delà de mes espérances !

Concernant les libellés il vont être entièrement revues pour qu'ils soient homogènes.

Un grand merci à toi !
0