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 - Cellule fusionnée et Offset [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 79
    Par défaut Macro - Cellule fusionnée et Offset
    Bonjour,

    Je rencontre un petit soucis dont je ne trouve pas solution sur le forum.

    Exemple sur deux colonnes (A et B pour l'exemple) :
    En cellule A1, j'ai la valeur A
    En cellule A2, j'ai la valeur B
    En cellule A3, j'ai la valeur C

    La cellule B1 correspond à la fusion des cellules B1, B2 et B3. Cette cellule fusionnée est valorisée à D

    J'aimerai, via VBA, être en mesure d'afficher le message suivant :
    "D=A,B,C"

    Techniquement parlant, je me positionne sur la cellule B1, et je récupère la valeur de la cellule A1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ma_concat=Range("B1").Value & "=" & Range("B1").Offset(0,-1).Value
    (Où B1 est dynamique)

    Le problème est que ma variable ma_concat vaut "D=A", et non pas "D=ABC"

    Si quelqu'un a déjà solution à mon problème, son aide m'est plus que précieuse.

    Sachant que je ne connais pas à l'avance la position exacte des cellules fusionnées sur une feuille, je pense devoir dans un premier temps tester si la cellule "en cours" est une cellule fusionnée ou pas (via la propriété MergeCells).

    Cordialement

  2. #2
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    Tu peux faire quelque chose dans le genre :
    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
    Dim maCell As Range
    Dim nbLignes As Integer
    Dim i As Integer
    Dim concat As String
     
    Set maCell = Range("B1") 'Par exemple
     
    If maCell.MergeCells Then
        nbLignes = maCell.MergeArea.Rows.Count
    Else
        nbLignes = 1
    End If
     
    concat = maCell.Value & "="
     
    For i = 1 To nbLignes
        concat = concat & maCell.Offset(i - 1, -1).Value & ","
    Next i
     
    concat = Left(concat, Len(concat) - 1) 'Pour supprimer la dernière virgule

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 79
    Par défaut
    Pour info j'en suis arrivé à cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    If Range("B1").MergeCells Then
        MsgBox Range("B1").MergeArea.Rows.Count
        For i = 0 To Range("B1").MergeArea.Rows.Count - 1
            test = Range("B1").Row
            Range("B1").Select        
            ma_concat= ma_concat & Range("B1").Offset(test + i, -1).Value
        Next i
    End If
    Bonjour ZebreLoup et merci de t'être dérangé.

    Je vois que nous avons à peut prêt la même solution, en revanche le :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maCell.Offset(i - 1, -1).Value
    ne fonctionne pas chez moi...cela me renvoit du null.

    EDIT : Elle ne renvoi pas vraiment du null, car elle renvoi la valeur de la cellule A1, mais pas celle de A2 (Offset(2-1, -1), ni celle de A3 (Offset(3-1, -1)))
    Je viens d'essayer avec ta fonction, mais j'obtiens le même résultat...

  4. #4
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    Je suis assez étonné que ça ne marche pas. Essaie de faire un maCell.Offset(i - 1, -1).Address dans les espions pour chaque i pour voir.

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 79
    Par défaut
    Bonjour ZebreLoup,

    Je viens d'essayer avec les espions, et les valeurs renvoyées sont toujours nulles.
    Je viens de faire un petit test et il s'avère que dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("B1").Offset(i - 1, -1).Value
    Si "i" est = 2, le code ci-dessus renverra la valeur de la cellule "A4",
    Si "i" est = 3, le code ci-dessus renverra la valeur de la cellule "A5".

    Comme si il considérait que la fusion appliquée aux 3 lignes de la colonnes B est appliquée à la colonne A.

  6. #6
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour,

    Une solution avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     concat = concat & maCell.Offset(0, -1).Offset(i - 1, 0) & ","
    Cordialement.

  7. #7
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 79
    Par défaut
    Bon j'ai trouvé réponse à ma question sur un autre forum : http://www.access-programmers.co.uk/...d.php?t=168390

    Apparemment le seul moyen d'obtenir la valeur d'une cellule en utilisant Offset depuis une cellule fusionnée et de se déplacer en colonne, puis en ligne (ou inversement).

    Ce qui donnerait dans mon cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    If Range("B1").MergeCells Then
        For i = 1 To Range("B1").MergeArea.Rows.Count
            Range("B1").Offset(0, -1).Select 'déplacement horizontal
            ActiveCell.Offset(i - 1, 0).Select 'déplacement vertical
            ma_concat= ma_concat & ActiveCell.Value
        Next i
    End If
    Merci tout de même ZebreLoup pour le temps accordé.

    Cordialement.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/11/2008, 00h10
  2. [VBA-E] Offset et Cellule Fusionnées
    Par dev_php51 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 22/07/2008, 12h56
  3. 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, 07h09
  4. Macro pour fusionner cellules excel
    Par derech dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 29/10/2007, 11h04
  5. Macro renvoi à la ligne automatique cellules fusionnées
    Par Couettecouette dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 18/10/2007, 12h08

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