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 :

Incrémenter une série d'une colonne ayant des cellules fusionnées de taille différente [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Incrémenter une série d'une colonne ayant des cellules fusionnées de taille différente
    Bonjour,

    Je ne peux pas utiliser la fonction qui permet d'incrémenter les cellules d'une colonne car elles ne sont pas de taille identique. J'imagine que je dois recourir à une macro pour le réaliser, mais je ne sais pas comment faire.

    Je suis nouveau sur le site et pas très familier avec les macros Excel.

    Quelqu'un peut m'aider?

    Guy

  2. #2
    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 et bienvenu au forum;
    je présume que tu dois être plus explicite à propos de ta question, car c'est pas clair!
    pour connaitre si une cellule appartient à une plage fusionnée tu fais ce test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim i As Integer
    For i = 1 To 20
    If Range("A" & i).MergeCells Then MsgBox "Cellule " & Range("A" & i).Address & " appartient à une plage fusionnée"
    Next i
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Futur Membre du Club
    Inscrit en
    Octobre 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Bonjour Mercatog,

    J'ai trouvé des exemples de fonction que j'ai adapté, dont voici mon code. Je fais une sélection dans une colonne ensuite j'exécute cette macro qui incrémente chaque cellule à partir de 1 en tenant compte des cellules fusionnées, s'il y en a. Qu'en penses-tu?

    Guy

    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 Incrémente()
     
        Dim cell As Range
        Dim i As Integer
     
        i = 0
        For Each cell In Selection.Cells
            If cell.MergeCells Then
                'cellule fusionnée
                If cell.Address = cell.MergeArea.Cells(1).Address Then
                    i = i + 1
                    cell.Value = i
                Else
                    ' cas où le cadre a déjà été tracé
                    GoTo nextCell
                End If
            Else
                i = i + 1
                cell.Value = i
            End If
     
    nextCell:
        Next cell
        Set cell = Nothing
    End Sub

  4. #4
    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
    Je ferai plutôt ceci (si j'ai bien compris ton problème; tu es avare en explication)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub INCREMENTE()
    Dim Cel As Range
    For Each Cel In Range("A1:A30").Cells  'A Adpater
        If Cel.MergeCells Then
            If Cel.Address = Cel.MergeArea.Cells(1).Address Then
                Cel.Value = Cel.Value + 1
            End If
        Else
            Cel.Value = Cel.Value + 1
        End If
    Next Cel
     
    End Sub
    C'était un marteau pour tuer la mouche en adaptant ton code
    Essaie ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub INCREMENTE()
    Dim Cel As Range
    For Each Cel In Range("A1:A30").Cells  'A Adpater
        Cel.Value = Cel.Value + 1
    Next Cel
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  5. #5
    Futur Membre du Club
    Inscrit en
    Octobre 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Je pensais que mes commentaires étaient assez clair. Ok je vais en mettre plus pour me faire comprendre mieux.
    Dans la colonne A, il y a des cellules simples et des cellules qui ont été fusionnées. Ex: A1, (A2 à A4 fusionnées), A5, (A6 à A10 fusionnées) et elles peuvent être vides ou déjà avoir une valeur. La fonction d'incrémentation doit donner le résultat suivant: 1,2,3,4. Soit A1=1, (A2-A4)=2, A5=3 et (A6-A10)=4.
    La fonction que j'ai réussie à écrire donne le résultat que je souhaite. Donc mission accomplie.
    Merci d'avoir pris le temps de me répondre.

  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 Optimiser
    Dans ton dernier post, enfin tu as pu bien expliquer
    Optimisation de ton code oblige:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim i As Integer
    Dim Cel As Range
     
    For Each Cel In Range("A1:A30").Cells  'A Adpater
        If Cel.MergeCells Then
            If Cel.Address = Cel.MergeArea.Cells(1).Address Then
                i = i + 1
            End If
        Else
            i = i + 1
        End If
        Cel.Value = i
    Next Cel
    ou en une seule ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim i As Integer
    Dim Cel As Range
     
    For Each Cel In Range("A1:A30").Cells  'A Adpater
        If (Cel.MergeCells And Cel.Address = Cel.MergeArea.Cells(1).Address) Or Not Cel.MergeCells Then i = i + 1
        Cel.Value = i
    Next Cel
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  2. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  3. Réponses: 1
    Dernier message: 19/03/2009, 17h38
  4. Supprimer des colonnes avec des cellules fusionnées
    Par alain74 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/03/2008, 11h07
  5. Selectionner une colonne avec des cellules fusionnées
    Par Pietro_L dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/09/2007, 07h47

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