VBA : Fusion conditionnelle de cellule

fokaoner

XLDnaute Nouveau
Bonjour à tous,

J'ai besoin d'aide... :eek:
Avant toute chose, je tiens à signaler que je n'ai que de vagues notions de VBA.
Pour ce qui est des macros, je n'en crée que par le biais de l'outil d'enregistrement.

Mon cas est le suivant : j'ai un planning de cours que je donne en tant que professeur, type diagramme de Gantt (jours en colonne C de haut en bas, et heures en ligne 2 de gauche à droite).

Au sein des cellules où se croisent l'heure et le jour, se trouve le nom de l'élève (bref!).
Je souhaite que, lorsque qu'une cellule contient les mêmes informations que sa voisine de gauche, les cellules soient fusionner en conservant la valeur de la première cellule sur la gauche, avec un format centré en vertical et en horizontal. :confused:

Exemple, dans la cellule du 01/09/2010 à 8h00 (cellulle E4) j'ai strictement la même valeur qu'en cellule du 01/09/2010 à 8h15 et ce jusqu'à 9h00 puisqu'il s'agit d'un cours d'une heure avec la même personne. J'ai ainsi 4 cellules strictement identiques collées les unes aux autres, que je souhaiterais fusionner en conservant la valeur de la première cellule à fauche, format centré en vertical et en horizontal de façon automatisée puisque, comme vous devez vous en douter, le cas se présente sur tout mon planning!

Le fichier est en pièce jointe.
Vous pouvez me répondre ici ou sur mon adresse mail.


Merci beaucoup par avance.

Bonne soirée! :cool:
 

Pièces jointes

  • Fusion VBA.xls
    39 KB · Affichages: 216
  • Fusion VBA.xls
    39 KB · Affichages: 218
  • Fusion VBA.xls
    39 KB · Affichages: 226
Dernière édition:

Cousinhub

XLDnaute Barbatruc
Re : VBA : Fusion conditionnelle de cellule

Bonjour,

Et bienvenue, Guillaume

regarde le fichier joint

PS, je ne sais pas de quelle extraction provient ton fichier, mais il y a des cellules parasites (elles font semblant d'être vides, mais ce n'est pas le cas....)

le code :

Code:
Sub fusion()
Dim Cel As Range, Plg As Range
Dim DerCol As Byte, NbCol As Byte
Set Plg = Range("E4:AZ" & [A65000].End(xlUp).Row)
Application.ScreenUpdating = False
Plg.Value = Plg.Value
For Each Cel In Plg.SpecialCells(xlCellTypeConstants, 23)
    If Not Cel.MergeCells Then
        DerCol = Cel.End(xlToRight).Column + 1
        NbCol = Application.CountIf(Range(Cel, Cel.Resize(1, DerCol - Cel.Column)), Cel)
        Application.DisplayAlerts = False
        Cel.Resize(1, NbCol).Merge
    End If
Next Cel
End Sub

Bonne journée

le fichier :
 

Pièces jointes

  • Fusion VBA_v1.zip
    9.7 KB · Affichages: 240

fokaoner

XLDnaute Nouveau
Re : VBA : Fusion conditionnelle de cellule

Bonjour,

Merci tout d'abord pour cette réponse si réactive!

En effet, il se peut qu'il y ait des cellule qui paraissent vides et qui en fait ne le sont pas car le tableau est une copie valeur du même tableau rempli par le biais de formules allant chercher dans une base de données. Quand il reconnait, dans la base de données, qu'un cours est donné à cette heure là, ce jour là, il complète la cellule, sinon il renvoi "".

Les "" correspondent sûrement à ces cellule semblablement vide mais en réalité qui ne le sont pas?

En quoi cela pose-t-il problème?

Idéalement, il faudrait même que la macro aille récupérer le tableau source, le copie colle valeur dans l'onglet d'à côté, supprime les lignes 1 et 2 et la colonne A, puis fusionne toutes les cellules consécutives identiques sauf celles rester "vides".

Merci!
 
Dernière édition:

ClementMaillioux

XLDnaute Nouveau
Re : VBA : Fusion conditionnelle de cellule

Re bonjour,

Si, bien sûr! J'ai pu passer un peu de temps sur votre problème, qui est en fait un peu plus délicat que ce dont il a l'air.

Quoi qu'il en soit j'ai essayé de faire quelque chose qui soit très facile à utiliser pour vous: il vous suffira de taper vos valeurs dans les cellules.

N'hésitez pas à me dire si cela fonctionne ou pas, et j'espère avoir pu vous aider.
Veuillez trouver le fichier modifié ici

Cordialement,
 

fokaoner

XLDnaute Nouveau
Re : VBA : Fusion conditionnelle de cellule

Merci pour cette réponse.

Après téléchargement du fichier, je n'arrive pas à trouver la macro créée? ou la modification apportée?
Dans quelle cellule dois-je saisir quelles valeurs?

Merci beaucoup!
 
Dernière édition:

ClementMaillioux

XLDnaute Nouveau
Re : VBA : Fusion conditionnelle de cellule

Bonjour!

J'étais en déplacement en Italie et je n'ai pas pu vous répondre, veuillez m'en excuser!

Le code se trouve dans la feuille "Feuil2 [Table intermédiaire - Plan A]" et "Feuil3 [Plan formateur A]"
Vous pouvez accéder au code via le clic droit > Code.

Vous n'avez rien de spécial à taper si ce n'est que lorsque deux textes identiques se trouvent dans deux cellules adjacentes elles sont fusionnées. Tout fonctionne très bien chez moi; je n'ai peut-être pas compris ce que vous attendiez comme "travail"... Pouvez-vous reformuler tout cela après avoir essayé?

Cordialement,
 

fokaoner

XLDnaute Nouveau
Re : VBA : Fusion conditionnelle de cellule

Bonjour et merci de cette réponse Clément.

J'ai enfin réussi à faire fonctionner le code.
En revanche, je constate que certaines cellules adjacentes non identiques se fusionnent à tord.
Exemple : les cellules de la feuil3 du vendredi 1er janvier 2010 de 8h à 9h ne sont pas identiques à celles de 9h à 10h, mais elles se fusionnent pour ne faire qu'une seule et même cellule de 8h à 10h...

De plus, je constate que pour que les cellules se fusionnent, je dois aller double cliquer dans chaque cellule et taper entrer...
N'y a-t-il pas moyen que cela se fasse automatiquement ou par le biais d'un bouton d'activation d'une macro? D'autant plus que je souhaite ajouter une macro qui récupère le tableau de la feuille 2 et le copie colle valeur en feuil 3, supprime la colonne A et les lignes 1 et 2 et venir coller dans la macro le code que vous avez réalisé (fusion des cellules identiques). En effet, je ne souhaite pas que la fusion se fasse directement dans la feuil2 car après, toutes mes formules qui récupères les infos dans l'onglet BDD ne fonctionneraient plus car seraient dans des cellules fusionnées...

Enfin, mon fichier n'étant pour le moment qu'une maquette, je vais l'étendre pour toute l'année et pour autant de formateurs (A ; B ; C ; D ; E) qu'il y aura. Du coup, la macro prévoit-elle de descendre jusqu'en bas de la feuille (65000 lignes) ou bien s'arrête-elle au tableau présent dans le fichier que je vous ai fournis?

En tout cas, un grand merci pour ce beau travail qui est sur la bonne voie!!
 
Dernière édition:

ClementMaillioux

XLDnaute Nouveau
Re : VBA : Fusion conditionnelle de cellule

Bonsoir,

Entendu, je comprends mieux pourquoi ma solution n'était pas adaptée à votre demande.
Je vais me pencher sur la question pour permettre de satisfaire les fonctions que vous avez exposées dans votre dernier message.
En ce qui concerne les délais en revanche, je ne m'engage pas car j'ai du travail à réaliser pour mes clients.

Je vous tiens informé rapidement!
 

fokaoner

XLDnaute Nouveau
Re : VBA : Fusion conditionnelle de cellule

Super!

Avant de commencer à apporter les modifications nécessaires, je vous envoie demain soir la maquette finalisées, car quelques modifications de formats ont été faites.
Avez vous une adresse mail perso à me communiquer en mp?
Merci beaucoup pour votre aide, qui m'est très utile car personne ne voyait solution à mon ambition de réaliser un planning automatisé sur Excel.

Bonne soirée.
 
Dernière édition:

fokaoner

XLDnaute Nouveau
Re : VBA : Fusion conditionnelle de cellule

Bonsoir Clément,

Désolé pour le retard, voici la maquette finalisée :

Cijoint.fr - Service gratuit de dépôt de fichiers

L'objectif de la macro :


1 - Copier la feuille 'Planning formateur A inter' - la coller dans la feuille 'Planning formateur A' - la recoller par dessus en collage spécial valeur (toujours dans la feuille 'Planning formateur A'. but : ne coller que les valeur des cellules tout en conservant la mise en forme de la feuille)


2 - Dans la feuille 'Planning formateur A', où vient d'être collé la copier de la feuille 'Planning formateur A inter', supprimer la colonne A et les lignes 1 et 2


3 - Toujours dans la feuille 'Planning formateur A', à partir de la cellule G3, correspondant au créneau 8h - 8h15 du vendredi 1er janvier 2010 (première cellule du planning après suppression des lignes 1 et 2 et de la colonne A), fusionner les cellules adjacentes (comportant du texte) qui comportent les mêmes valeurs (= ne pas supprimer les cellules vides entre elles) et ce jusqu'en bas de la feuille (prévoir jusqu'à la ligne 2000 au cas où le planning viendrait à s'agrandir (pour y mettre deux-trois années par exemple).

Précision 1 : dans la macro précédente, certaines cellules adjacente non identiques se fusionnaient... exemple : les cellule de G3 à N3 se fusionnaient.

Précision 2 : les fusions de cellules ne doivent se faire que dans la feuille 'Planning formateur A'. La feuille 'Planning formateur A inter' doit rester telle qu'elle est, elle ne sert que de source pour la copier en feuille 'Planning formateur A'.

4 - L'activation de la macro se ferait par le biais du bouton intitulé "Mise à jour des plannings" disposé dans la feuille 'BDD planning'

Clément, merci beaucoup par avance.

Je reste à ton entière disposition pour te donner plus de détails si besoin.

Bon courage!
 
Dernière édition:

ClementMaillioux

XLDnaute Nouveau
Re : VBA : Fusion conditionnelle de cellule

Re bonjour au Forum,

@Fokaoner,

J'ai terminé. La macro satisfait le "cahier des charges" que vous m'avez demandé.
En revanche, si tout fonctionne, vous verrez que le temps d'exécution est tout de même très long car rien que le copier/coller de la feuille de classeur fait paniquer Excel.

Vous trouverez ici Votre fichier modifié.

En espérant que tout fonctionne parfaitement cette fois!
Cordialement,
 

Discussions similaires

Statistiques des forums

Discussions
312 504
Messages
2 089 073
Membres
104 019
dernier inscrit
pascal la