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 :

Perte du texte d'une cellule mergée après suppression de la première colonne de la cellule


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
    Data Processor
    Inscrit en
    Novembre 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Data Processor
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2009
    Messages : 37
    Par défaut Perte du texte d'une cellule mergée après suppression de la première colonne de la cellule
    Bonjour,

    J'ai créé dans le fichier ci-joint une macro pour mettre en page un tableau (résultat dans la sheet 'Action plan '11-'12').

    Ce sont les résultats d'une étude qui sont divisés par groupes (pays, département).
    Lors de la mise en page, il y a une sélection pour ne garder que les colonnes dont le chiffre dans la cellule de la ligne 5 est >=5 (voir sheet 'Copy').

    Le problème est que lorsque j'exécute la macro et que ces colonnes (<5) sont supprimées, le nom de mon groupe disparait si la première colonne du groupe est supprimée. Par-exemple, dans le groupe des pays, les colonnes 'Belux' et 'Netherlands' sont supprimées et donc l'indication 'BeNeFraLux' disparait.

    Est-il possible de trouver une solution à cela dans la macro ?

    Merci d'avance.

    Anthony

    -----------------------------------------------------------
    Fichiers joints dans les discussions

  2. #2
    Membre averti
    Homme Profil pro
    Data Processor
    Inscrit en
    Novembre 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Data Processor
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2009
    Messages : 37
    Par défaut
    J'ai encore cherché sur le net, mais je n'ai pas trouvé de réponse.
    J'ai peut-être une piste ???

    Est-il possible alors de checker si une cellule est la première cellule d'un merge et, dans le cas où il faut supprimer cette première cellule, de récupérer le texte et de le reporter dans la cellule suivante ?

    Ex:
    J'ai un merge dans les cellules A1:C1 où il est indiquer "Groupe".
    Je voudrais supprimer la colonne A sans perdre le titre "Groupe".
    Et donc vérifier si A1 fait partie d'un merge, récupérer le texte et le reporter dans la cellule B1 qui devient A1 après avoir deleter la colonne.

    Merci de votre aide.

    Anthony

  3. #3
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    vois ceci : http://www.developpez.net/forums/d91...plage-cellule/

    sinon :

    La valeur d'une plage fusionnée est spécifiée dans la cellule du coin supérieur gauche de la plage.
    cordialement,

    Didier

  4. #4
    Membre averti
    Homme Profil pro
    Data Processor
    Inscrit en
    Novembre 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Data Processor
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2009
    Messages : 37
    Par défaut
    J'ai trouvé la solution à mon problème.

    Je teste la cellule pour voir si elle fait partie d'un merge.
    Je vérifie si je dois supprimer la colonne ou pas sur base d'une condition.
    Si c'est le cas, je crée une variable qui contient les infos qui se trouve dans plusieurs cellules de cette colonne afin de copier leurs valeurs dans les cellules de la colonne suivante.

    C'est peut-être plus clair dans le code suivant :

    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
    Dim col As Integer
    Dim lig As Integer
    Dim LineSeg As Integer
    LineSeg = TotnLine + 1
     
    Dim libel(1 To 5) As String
     
    For col = FormFirstCol + 1 To FormLastCol
    If Cells(LineSeg, col).Value < 5 Then
     
    For lig = 2 To LineSeg
     
    If Cells(lig, col).Value <> "" And Cells(lig, col).MergeCells Then
        libel(lig) = Cells(lig, col).Value
    End If
    Next lig
            If Cells(LineSeg, col).Value < 5 And Cells(LineSeg - 2, col).MergeCells Then
                Columns(col).Delete
                For lig = 1 To LineSeg
                        If Cells(lig, col) = "" Then
                               Cells(lig, col).Value = libel(lig)
                        End If
                Next lig
     
                col = col - 1
            End If
     
    End If
    Next col

    Par contre, j'ai encore une question :
    Je voudrais remplacer le 5 dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim libel(1 To 5) As String
    mais je reçois le message 'Constant expression required'.
    Pouvez-vous m'aider à comprendre la raison de ce message ?

    Merci d'avance

    Anthony

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Au lieu de ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        Dim libel(1 To 5) As String
    je ferai plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        Dim libel() As String
     
        'le tableau est dimensionné aux bonnes bornes
        LineSeg = TotnLine + 1
        ReDim libel(1 To LineSeg)
    De cette façon, les dimensions du tableau correspondent bien aux nombre de boucle (For lig = 1 To LineSeg).
    Par contre, dans la boucle interne de la première, tu commence non pas à 1 mais à 2 (For lig = 2 To LineSeg) donc la première dimension de ton tableau sera vide, il est préférable de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    libel(lig - 1) = Cells(lig, col).Value
    Des variables ne sont pas déclarées dans le code que tu nous montre, je te conseille de mettre Option Explicit en tête de module ce qui oblige la déclaration de toutes variables ce qui évite beaucoup de désagréments.

    Hervé.

  6. #6
    Membre averti
    Homme Profil pro
    Data Processor
    Inscrit en
    Novembre 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Data Processor
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2009
    Messages : 37
    Par défaut
    MERCI BEAUCOUP pour ta réponse rapide.

    Ca fonctionne parfaitement !
    Il s'agit ici d'un morceau de code. J'ai effectivement indiqué 'Option Explicit' au début.

    J'espère que cela pourra aider d'autres amateurs d'excel ...

    Anthony

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 26/05/2013, 15h10
  2. Faire un reset Des Id d'une base access apres suppression
    Par Smith4400 dans le forum Débuter
    Réponses: 11
    Dernier message: 19/07/2012, 09h36
  3. Faire défiler un texte dans une cellule de tableau
    Par Furius dans le forum Général JavaScript
    Réponses: 18
    Dernier message: 01/12/2005, 17h06
  4. excel -> test lors de la perte du focus d'une cellule
    Par greg778 dans le forum Macros et VBA Excel
    Réponses: 24
    Dernier message: 26/09/2005, 17h26
  5. Cacher le texte d'une cellule MSFlexGrid
    Par jacma dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 04/09/2005, 19h03

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