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 :

Macro vba pour fusionner des cellules


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2015
    Messages : 29
    Par défaut Macro vba pour fusionner des cellules
    Bonjour,

    Je ne connais pas du tout le vba et je cherche à créer une macro qui fusionne les cellules de valeurs identiques dans une même colonne.
    J'ai donc écrit cette macro :
    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
    Sub Macro1()
    '
    ' Macro1 Macro
    '
    '******************************************************
    '*          Déclarations des variables                *
    '******************************************************
    Dim Sheet As Worksheet, NoCol As Integer
    Dim LineNum1 As Long, LineNum2 As Long
    Dim LastLine As Long, LastColumn As Long
    Dim Var1 As String, Var2 As String
     
        Set Sheet = Worksheets("Feuil2")
        Sheet.Columns("A:Z").AutoFit ' AutoFit des colonnes
        NoCol = 1
        LastLine = Range("A" & Rows.Count).End(xlUp).Row
        For LineNum1 = 1 To LastLine
            Var1 = Sheet.Cells(LineNum1, NoCol).Value
            LineNum2 = LineNum1 + 1
     
            For LineNum2 = LineNum2 To LastLine
                Var2 = Sheet.Cells(LineNum2, NoCol).Value
     
                If [Var1 = Var2] Then
                    Application.DisplayAlerts = False
                    Range(Cells(LineNum1, NoCol), Cells(LineNum2, NoCol)).Merge
                End If
            Next
        Next
    End Sub
    Evidemment, ça ne fonctionne pas ^^

    Déjà, je ne comprend pas pourquoi mais ma condition if est toujours vraie. Du coup je me retrouve avec toutes les cellules de ma colonne qui fusionnent....
    Et avant, ça fonctionnait à peu près, sauf que si j'avais les lignes suivantes :
    Bateau
    Voiture
    Voiture
    Voiture
    Moto
    Moto
    Voiture

    La macro fusionnait de la première valeur "voiture" à la dernière...

    Donc là je rame un peu et je fais donc appel à la communauté pour m'aider

    Merci

  2. #2
    Membre éclairé
    Homme Profil pro
    Constructeur ossature bois
    Inscrit en
    Mars 2014
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Constructeur ossature bois
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2014
    Messages : 897
    Par défaut
    Salut Ioro,

    Regarde cette discussion elle pourrait t'intéresser ----- ICI -----

    Elle peut correspondre à ta demande
    Seb

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2015
    Messages : 29
    Par défaut
    Salut!

    Merci pour l'info, ça a effectivement l'air de correspondre.

    Je vous tiens au courant!

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2015
    Messages : 29
    Par défaut
    Alors, ça fonctionne plutôt pas mal sauf que je bloque sur un point.
    Je calcule la dernière ligne d'une colonne avec le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LastLine = Range("A" & Rows.Count).End(xlUp).Row
    J'effectue ma macro sur 3 colonnes (boucle for) et j'aimerai pouvoir calculer la dernière ligne en fonction de la colonne.
    Sauf que dans ma boucle, les colonnes sont déterminées par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim ColumnNumber As Long
    Je pourrais éventuellement faire une succession de If mais je me dis qu'il doit exister quelque chose de plus simple et plus rapide pour calculer la dernière ligne en fonction du numéro de la colonne?

    Merci

  5. #5
    Membre éclairé
    Homme Profil pro
    Constructeur ossature bois
    Inscrit en
    Mars 2014
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Constructeur ossature bois
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2014
    Messages : 897
    Par défaut
    Re,

    Présent un classeur en pj, sans données confidentiel...pour que l'on regarde...
    Poste ton code en entier, stp

    Seb

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2015
    Messages : 29
    Par défaut
    Finalement, je me suis affranchi de mon problème. Toutes les colonnes auront le même nombre de ligne.

  7. #7
    Membre éclairé
    Homme Profil pro
    Constructeur ossature bois
    Inscrit en
    Mars 2014
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Constructeur ossature bois
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2014
    Messages : 897
    Par défaut
    Tiens essais çà, çà doit correspondre à ta demande
    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
    Sub FusionCellules()
    Dim i As Long, j As Long, h As Long, k As Long
    DerColNum = Range(Split(Worksheets("Feuil1").UsedRange.Address, "$")(3) & 1).Column
    DerCol = Split(Worksheets("Feuil1").UsedRange.Address, "$")(3)
    Application.DisplayAlerts = False
    For i = 1 To Range("A65536").End(xlUp).Row - 1 'étude colonne A
        j = i + 1
        While Cells(j, 1) = Cells(i, 1)
          Range(Cells(i, 1), Cells(j, 1)).MergeCells = True
          j = j + 1
        Wend
      i = j - 1
    Next i
    For h = 1 To Range("B65536").End(xlUp).Row - 1 'j - 2 'étude colonne B
            k = h + 1
            While Cells(k, 2) = Cells(h, 2) 'And k < j
              Range(Cells(h, 2), Cells(k, 2)).MergeCells = True
              k = k + 1
            Wend
            h = k - 1
    Next h
    For Z = 1 To Range("C65536").End(xlUp).Row - 1
        w = Z + 1
        While Cells(w, 3) = Cells(Z, 3)
        Range(Cells(Z, 3), Cells(w, 3)).MergeCells = True
        w = w + 1
      Wend
      Z = w - 1
    Next Z
    Application.DisplayAlerts = True
    End Sub
    Là c'est pour la colonne A,B,etC...mais si plus tu peux utiliser un offset sur les colonnes jusqu'à colonne vide

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

Discussions similaires

  1. [XL-2007] Réalisation d'un macro pour fusionner des cellules sous conditions
    Par yannickcochard dans le forum Excel
    Réponses: 9
    Dernier message: 19/05/2015, 01h31
  2. [XL-2007] Boucle pour fusionner des cellules
    Par Runsh63 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/10/2014, 15h31
  3. [XL-2002] Code VBA pour colorier des cellules à partir de plusieurs critères
    Par NoodleDS dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 04/11/2013, 22h05
  4. [XL-2010] Macro VBA pour supprimer des caractère situés après une valeur
    Par Guillaume_PMO dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 17/03/2011, 17h06
  5. Macro VBA pour mettre colonne en ligne avec cellule fusionnée
    Par dany13 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 15/01/2008, 06h09

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