IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Fusionner des cellules en fonction d'un résultat


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Fusionner des cellules en fonction d'un résultat
    Bonjour à tous

    Est-il possible de fusionner automatiquement deux cellules en fonction d'un résultat ?! (soit grâce à une macro ou soit grâce à une fonction conditionnelle)

    Exemple:
    Si A1 = "accepter" alors B1, C1, D1 et E1 se fusionnent en supprimant les informations contenus dans chacune de ces cellules (en effet, B1, C1, D1 et E1 contiennent déjà des valeurs)

    Merci
    Bonne journée

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    763
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2008
    Messages : 763
    Points : 576
    Points
    576
    Par défaut réponse
    Bonjour,

    Essaies ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    Sub Macro1()
    '
    ' Macro1 Macro
    '
     
    '
    If VariableA1 = "accepter" then
        Range("B1:E1").Select
        With Selection
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlBottom
            .WrapText = False
            .Orientation = 0
            .AddIndent = False
            .IndentLevel = 0
            .ShrinkToFit = False
            .ReadingOrder = xlContext
            .MergeCells = False
        End With
        Selection.Merge
        Selection.ClearContents
    End If
     
    End Sub

  3. #3
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut merge
    Bonjour,

    Les Select qui ne servent à rien! Si ce n'est qu'à alourdir le code.

    A adpter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Public Sub ESSAI2()
     
    Dim c As Range
     
    For Each c In Range("A15:A17")
            With c
                    If .Value = "accepter" Then
                             With Range(.Offset(0, 1), .Offset(0, 4))
                                     .ClearContents
                                    .Merge
                            End With
                    End If
            End With
    Next c
     
    End Sub

  4. #4
    Membre habitué Avatar de Orhleil
    Homme Profil pro
    Intégrateur fonctionnel
    Inscrit en
    Mai 2011
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Intégrateur fonctionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 81
    Points : 152
    Points
    152
    Par défaut
    Je suis d'accord avec Francky ça devrait fonctionner comme ça.
    JUste, moi je mettrais un Unmerge au début :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Sub Macro1()
    '
    ' Macro1 Macro
    '
     
    '
    If VariableA1 = "accepter" then
        Range("B1:E1").Select
        Selection.Unmerge
        With Selection
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlBottom
            .WrapText = False
            .Orientation = 0
            .AddIndent = False
            .IndentLevel = 0
            .ShrinkToFit = False
            .ReadingOrder = xlContext
            .MergeCells = False
        End With
        Selection.Merge
        Selection.ClearContents
    End If
     
    End Sub
    Juste au cas où y'aurait une fusion foireuse à un moment, tu défais le truc et tu le relances comme ça tu es sûr qu'il n'y aura pas de bug à ce niveau là.
    C'est peut-être un cas impossible pour toi j'en sais rien, je signale juste que ça peut t'éviter des embrouilles =p

  5. #5
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut merge
    Et moi, je ne suis pas d'accord avec l'utilisation de la méthode à tout va!!!

    A la rigueur, comme tu l'as justement souligné, tu peux désactiver une propriété éventuelle.

    Mais de cette façon.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Public Sub ESSAI2()
     
    Dim c As Range
     
    For Each c In Range("A15:A17")
            With c
                    If .Value = "accepter" Then
                             With Range(.Offset(0, 1), .Offset(0, 4))
                                     .MergeCells = False
                                     .ClearContents
                                    .Merge
                            End With
                    End If
            End With
    Next c
     
    End Sub
    Quant à l'enregistreur, je suis le premier à reconnaître son utilité. Mais une fois utilisé, il convient de l'épurer au maximum.

    On s'en rend vite compte avec la méthode (mise en page)

  6. #6
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonjour
    Une autre proposition en utilisant un filtre automatique (pour éviter de boucler sur chaque ligne)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim LastLig As Long
     
    Application.ScreenUpdating = False
    With Worksheets("Feuil1") 'Adapte le nom de ta feuille
        .AutoFilterMode = False
        LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
        .Range("A1:A" & LastLig).AutoFilter Field:=1, Criteria1:="accepter"
        If .Range("A1:A" & LastLig).SpecialCells(xlCellTypeVisible).Count > 1 Then
            Application.DisplayAlerts = False
            .Range("B2:E" & LastLig).SpecialCells(xlCellTypeVisible).Merge False
            Application.DisplayAlerts = True
        End If
        .AutoFilterMode = False
    End With

  7. #7
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut MERGE
    Bonjour mercatog,

    D'accord avec ta méthode.

    Mais, sauf erreur de ma part, elle ne fusionne pas les colonnes avoisinantes et n'efface pas leur contenu.

  8. #8
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonjour Marcel
    Mais, sauf erreur de ma part, elle ne fusionne pas les colonnes avoisinantes et n'efface pas leur contenu.
    je n'ai pas compris ta remarque.
    Le code proposé fusionne les cellules de B à E en gardant la valeur de B (pour chaque ligne où se trouve "accepter" en colonne A)

    Sinon, la méthode est là (se passer des boucles quand on a une méthode directe et ça reste un choix personnel)

    Pour fusionner et supprimer les contenu de B à E, c'est plus facile
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Dim LastLig As Long
     
    Application.ScreenUpdating = False
    With Worksheets("Feuil1")                        'Adapte le nom de ta feuille
        .AutoFilterMode = False
        LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
        .Range("A1:A" & LastLig).AutoFilter Field:=1, Criteria1:="accepter"
        If .Range("A1:A" & LastLig).SpecialCells(xlCellTypeVisible).Count > 1 Then
            With .Range("B2:E" & LastLig).SpecialCells(xlCellTypeVisible)
                .ClearContents
                .Merge False
            End With
        End If
        .AutoFilterMode = False
    End With

  9. #9
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Salut Mercatog,

    D'accord, autant pour moi (mauvaise compréhension de la méthode Merge)

    Une bière!

  10. #10
    Candidat au Club
    Femme Profil pro
    Comptable
    Inscrit en
    Août 2024
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Finance

    Informations forums :
    Inscription : Août 2024
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Problème similaire
    Bonjour,

    J'ai une problèmatique similaire.

    Dans un tableau Excel, j'ai plusieurs onglet (1 par mois de l'année). J'aimerais dans chaque onglet que lorsque la colonne C contient "lundi", j'ai 5 ligne de la colonne K qui fusionne.

    Par exemple : dans le cas suivant j'aimerais que les cases K1:K5 ainsi que les cases K8:k12 se fusionne du fait que la case C1 et C8 soit égale à lundi
    C K
    1 lundi
    2 mardi
    3 mercredi
    4 jeudi
    5 vendredi
    6 samedi
    7 dimanche
    8 lundi
    9 mardi
    10 mercredi
    11 jeudi
    12 vendredi
    13 samedi
    14 dimanche

    Merci de votre aide par avance
    Images attachées Images attachées  

  11. #11
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 526
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 526
    Points : 16 463
    Points
    16 463
    Par défaut
    Bonjour

    Depuis 2011 pas mal d'eau a coulé sous le pont Excel

    Avec une image où la valeur est masquée et peu d'explications données, difficile de comprendre la logique à appliquer et de ce fait la méthode à choisir

  12. #12
    Candidat au Club
    Femme Profil pro
    Comptable
    Inscrit en
    Août 2024
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Finance

    Informations forums :
    Inscription : Août 2024
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Bonjour 78chris,

    Les éléments présents dans la première ligne ne sont pas utile puisque je veux que les cases fusionne en fonction du jour tous en restant vide.

    Je cherche juste une formule permettant de fusionner les cases K correspondant à des jours de la semaine allant du Lundi au Vendredi. par exemple sur la photo que j'ai posté j'aimerais que les cases K2 à K4 fusionne ainsi que les cases K7 à K11.

    Merci d'avance

  13. #13
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 526
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 526
    Points : 16 463
    Points
    16 463
    Par défaut
    RE

    Une formule ne joue pas sur l'aspect et moins encore sur une fusion.

    Les fusions sont considérées comme un plaie dans Excel. On conseille de laisser la répétition et de régler l'affichage d'une unique mention pour n cellules via une mise en forme conditionnelle. Avec 5 jours en principe par semaine, l'info sur la ligne du mercredi seule reste affichée et le tableau garde ses possibilités de tri, filtre... que bloquerait la fusion...

    Mais si cela est vide c'est juste un problème de bordure également à régler par une MFC

  14. #14
    Membre éprouvé Avatar de Nain porte koi
    Homme Profil pro
    peu importe
    Inscrit en
    Novembre 2023
    Messages
    654
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : peu importe

    Informations forums :
    Inscription : Novembre 2023
    Messages : 654
    Points : 1 034
    Points
    1 034
    Par défaut
    Hello,

    tout a fait d'accord avec 78chris, les fusions c'est la plaie!

    Un exemple sans fusion avec juste des mises en formes conditionnelles
    Pièce jointe 657821

Discussions similaires

  1. [XL-2007] Afficher des cellules en fonction du résultat d'une liste déroulante
    Par mandrake57 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/02/2011, 18h21
  2. [XL-2003] fusionner des cellules en fonction de critères
    Par doudou8mc dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 08/08/2009, 06h36
  3. Php et Excel - Fusionner des cellules
    Par krolineeee dans le forum Langage
    Réponses: 1
    Dernier message: 08/08/2006, 11h37
  4. [JTable] Fusionner des cellules
    Par Rimk78 dans le forum Composants
    Réponses: 2
    Dernier message: 13/05/2005, 16h53
  5. [] [Excel] Fusionner des cellules
    Par SamyD dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 13/12/2002, 19h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo