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 :

Comment fusionner 3 cellules par macro ? [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 611
    Points : 359
    Points
    359
    Par défaut Comment fusionner 3 cellules par macro ?
    Bonjour,

    Je souhaite renseigner une feuille depuis une autre feuille. Les colonnes D à G de ma feuille cible doivent être fusionnées par ligne.

    Pour celà, j'ai codé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    With Worksheets("Feuil1").Range("E" & k & ":G" & k)
                      .MergeCells = False
                      .MergeCells = True
                      .HorizontalAlignment = xlCenter
                      .VerticalAlignment = xlCenter
               End With
    Après exécution, mes cellules ne sont pas fusionnées. Pourquoi ?

  2. #2
    Invité
    Invité(e)
    Par défaut
    bonjour,
    test avec .MergeCells =true

  3. #3
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 417
    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 417
    Points : 16 260
    Points
    16 260
    Par défaut
    Bonjour

    Sachant que la fusion de cellules est une des plaies d'Excel, ne serait-il pas plus judicieux de centrer sur les trois colonnes (centrer sur plusieurs colonnes), : résultat visuel identique sans les inconvénients des fusions ?
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  4. #4
    Membre éprouvé
    Homme Profil pro
    Programmeur analyste
    Inscrit en
    Février 2009
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur analyste
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 546
    Points : 1 116
    Points
    1 116
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("Feuil1").Range("E" & k & ":G" & k).Merge

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 611
    Points : 359
    Points
    359
    Par défaut
    Le centrage sur plusieurs colonnes me paraît être une bonne idée mais l'instruction que j'ai trouvé sur le web ne fonctionne pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With Worksheets("Feuil1").Range("E" & k & ":G" & k)
                    .HorizontalAlignment = xlCenterAcrossSelection
                    .VerticalAlignment = xlCenter
               End With

  6. #6
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 417
    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 417
    Points : 16 260
    Points
    16 260
    Par défaut
    Re


    Il faut adresser les cellules pas le range
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        With Worksheets("Feuil1").Range("E" & k & ":G" & k).Cells
                    .VerticalAlignment = xlCenter
                    .HorizontalAlignment = xlCenterAcrossSelection
        End With
    J'ai inversé les 2 lignes car il arrive, très occasionnellement, que le centrage vertical impacte l'autre (en général sur des fichiers issus d'une ancienne version)
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 611
    Points : 359
    Points
    359
    Par défaut
    Adresser les cellules ne change rien. Lorsque je regarde le format de cellule dans l'onglet alignement, je l'ai toujours centré.

    Je ne sais plus quoi faire

  8. #8
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 417
    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 417
    Points : 16 260
    Points
    16 260
    Par défaut
    RE

    Chez moi cela fonctionne avec le code que j'ai posté mais mes cellules n'étaient pas fusionnées au préalable...
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  9. #9
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 611
    Points : 359
    Points
    359
    Par défaut
    Le classeur est enregistré sous Excel 1997-2003.

  10. #10
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 417
    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 417
    Points : 16 260
    Points
    16 260
    Par défaut
    Re

    Cela fonctionne aussi sur un xls : as-tu bien recopier mon code ?
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  11. #11
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 611
    Points : 359
    Points
    359
    Par défaut
    Oui, voici l'intégralité de mon code :

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
       Dim tabCellules(), compteur As Integer
       Dim cellule As Range
       Dim b As Integer
       Dim i As Integer, j As Integer, k As Integer
       Dim rfound As Range
       Dim nb_lignes As Long
     
     
     
       ' stockage des lignes sélectionnées par clic-droit
       compteur = 0
     
       For Each cellule In Selection
           ReDim Preserve tabCellules(compteur)
           tabCellules(compteur) = cellule.Row
           compteur = compteur + 1
       Next cellule
     
       If compteur = 0 Then
          MsgBox "Aucune ligne n'a été sélectionnée. Veuillez sélectionner une ligne."
          Exit Sub
       End If
     
       Application.ScreenUpdating = False
     
     
       Application.DisplayAlerts = False
       Workbooks.Open Filename:="C:\Users\JULIEN\Desktop\remise de prix type.xls"
       Application.DisplayAlerts = True    
     
       Workbooks("remise de prix type.xls").Worksheets("Feuil1").Activate
     
       nb_lignes = Worksheets("Feuil1").Range("D65536").End(xlUp).Row
     
       ' Recherche de "Référence" dans la colonne 'D'
       With Worksheets("Feuil1")
           Set rfound = .Range("D1:D" & nb_lignes).Find("Référence", LookIn:=xlValues)
       End With
       ' Si trouvé
       If Not rfound Is Nothing Then
           i = rfound.Row
           i = i + 1
       End If
     
       j = i + 1
     
       Do Until Cells(j, 4).Value = "xxxx"
           Worksheets("Feuil1").Rows(j).Delete Shift:=xlUp
       Loop
     
       k = i
     
       For j = 0 To UBound(tabCellules)
               k = k + 1
               Worksheets("Feuil1").Rows(k).Insert
     
               'Rows(k).Interior.ColorIndex = xlNone
     
               With Worksheets("Feuil1")
                   .Range("D" & k).Value = Workbooks("CLASSEUR CALCUL DE PRIX  2015.xls").Worksheets("PRIX").Cells(tabCellules(j), 2)
                   .Range("F" & k).Value = Workbooks("CLASSEUR CALCUL DE PRIX  2015.xls").Worksheets("PRIX").Cells(tabCellules(j), 3)
                   .Range("H" & k).Value = Mid(Workbooks("CLASSEUR CALCUL DE PRIX  2015.xls").Worksheets("PRIX").Cells(tabCellules(j), 8), 1, 4)
                   .Range("I" & k).Value = Workbooks("CLASSEUR CALCUL DE PRIX  2015.xls").Worksheets("PRIX").Cells(tabCellules(j), 7)
                   .Range("Q" & k).Value = Workbooks("CLASSEUR CALCUL DE PRIX  2015.xls").Worksheets("PRIX").Cells(tabCellules(j), 31)
                   .Range("R" & k).FormulaR1C1 = "=RC[-1]*RC[-3]"
               End With
     
               With Worksheets("Feuil1").Range("E" & k & ":G" & k).Cells
                    .VerticalAlignment = xlCenter
                    .HorizontalAlignment = xlCenterAcrossSelection
               End With
     
               'Worksheets("Feuil1").Range("E" & k & ":G" & k).MergeCells = True
     
     
               If Workbooks("CLASSEUR CALCUL DE PRIX  2015.xls").Worksheets("PRIX").Cells(tabCellules(j), 4) = "OXY_" Then
                 With Worksheets("Feuil1")
                     .Range("J" & k).Value = "Ox"
                     .Range("N" & k).Value = "Gr/Eb"
                 End With
               End If
       Next j
     
       Worksheets("Feuil1").Range("R" & k + 1).FormulaLocal = "=somme(R" & i + 1 & ":R" & k & ")"
     
       Worksheets("Feuil1").Range("D" & i & ":R" & i).Copy
       Worksheets("Feuil1").Range("D" & i + 1 & ":R" & k).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=False
       Application.CutCopyMode = False
     
       Worksheets("Feuil1").Range("D" & i - 1 & ":R" & k).Columns.AutoFit
     
       With Worksheets("Feuil1").Range("D" & i + 1 & ":R" & k)
            .Font.Bold = False
            .Interior.ColorIndex = xlNone
       End With
     
       Worksheets("Feuil1").Range("Q:R").NumberFormat = "#,##0.00 $"
     
       Application.ScreenUpdating = True

  12. #12
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 417
    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 417
    Points : 16 260
    Points
    16 260
    Par défaut
    Re

    As-tu vérifié en pas à pas ?

    La ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("Feuil1").Range("D" & i + 1 & ":R" & k).PasteSpecial Paste:=xlPasteFormats...
    n'écrase-t-elle pas le format ?

    Avec des noms de feuille comme Feuil1, dans 2 classeurs difficile de vérifier pour ma part...
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  13. #13
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 611
    Points : 359
    Points
    359
    Par défaut
    Le recopie de la forme écrasait la fusion.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [2.0 DataGridView] comment sélectionner une cellule par le code
    Par juniorAl dans le forum Windows Forms
    Réponses: 5
    Dernier message: 01/07/2008, 19h46
  2. copie de cellule par macro
    Par ptitepo dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 09/06/2008, 11h49
  3. Comment supprimer un module par macro ?
    Par Unknow28 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 03/01/2008, 19h48
  4. [C# 1.1] Comment fusionner des cellules dans un datagrid ?
    Par absolute_beginner dans le forum ASP.NET
    Réponses: 5
    Dernier message: 09/11/2006, 16h45

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