Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/08/2011, 13h48   #1
Invité régulier
 
Anthony
Inscription : novembre 2009
Messages : 29
Détails du profil
Informations personnelles :
Nom : Anthony

Informations forums :
Inscription : novembre 2009
Messages : 29
Points : 9
Points : 9
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
ab1to est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 09h59   #2
Invité régulier
 
Anthony
Inscription : novembre 2009
Messages : 29
Détails du profil
Informations personnelles :
Nom : Anthony

Informations forums :
Inscription : novembre 2009
Messages : 29
Points : 9
Points : 9
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
ab1to est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 11h36   #3
Rédacteur
 
Avatar de Ormonth
 
Homme Didier GONARD
Formateur Développeur Office - indépendant
Inscription : février 2008
Messages : 2 353
Détails du profil
Informations personnelles :
Nom : Homme Didier GONARD
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Formateur Développeur Office - indépendant

Informations forums :
Inscription : février 2008
Messages : 2 353
Points : 4 685
Points : 4 685
Bonjour,

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

sinon :

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

Didier
__________________
Didier Gonard

Ps :
Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite !
Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP
N'oubliez pas de mettre : ..quand c'est le cas !
Ormonth est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2011, 09h09   #4
Invité régulier
 
Anthony
Inscription : novembre 2009
Messages : 29
Détails du profil
Informations personnelles :
Nom : Anthony

Informations forums :
Inscription : novembre 2009
Messages : 29
Points : 9
Points : 9
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 :
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 :
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
ab1to est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2011, 09h39   #5
Membre Expert
 
Homme Hervé Silve
Inscription : août 2010
Messages : 773
Détails du profil
Informations personnelles :
Nom : Homme Hervé Silve
Localisation : France

Informations forums :
Inscription : août 2010
Messages : 773
Points : 2 093
Points : 2 093
Bonjour,

Au lieu de ceci :
Code :
1
2
 
    Dim libel(1 To 5) As String
je ferai plutôt :
Code :
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 :
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é.
Theze est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 07/09/2011, 10h36   #6
Invité régulier
 
Anthony
Inscription : novembre 2009
Messages : 29
Détails du profil
Informations personnelles :
Nom : Anthony

Informations forums :
Inscription : novembre 2009
Messages : 29
Points : 9
Points : 9
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
ab1to est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h40.


 
 
 
 
Partenaires

Hébergement Web