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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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
    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 éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    764
    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 : 764
    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 confirmé
    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 : 68
    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
    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
    Expert éminent 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
    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

  5. #5
    Expert confirmé
    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 : 68
    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
    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.

  6. #6
    Expert éminent 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
    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

  7. #7
    Membre éclairé 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
    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

  8. #8
    Expert confirmé
    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 : 68
    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
    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)

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, 17h21
  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, 05h36
  3. Php et Excel - Fusionner des cellules
    Par krolineeee dans le forum Langage
    Réponses: 1
    Dernier message: 08/08/2006, 10h37
  4. [JTable] Fusionner des cellules
    Par Rimk78 dans le forum Composants
    Réponses: 2
    Dernier message: 13/05/2005, 15h53
  5. [] [Excel] Fusionner des cellules
    Par SamyD dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 13/12/2002, 18h37

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