Cacher / afficher des colonnes sous excell 2007 par une macro
Dernière réponse : dans Programmation
bonjour
ms office 2007 (fr) / spreadsheet au format 2003 (*.xlsM)
les macros sont autorisées
je n'arrive pas à cacher une colonne affichée ou faire afficher une colonne cachée
je passe bien par mon code (les text-box s'affichent)
je peux exécuter des macros (modifier la valeur d'une cellule)
les 'messages boxes' affichent bien ce qui correspond à la réalité
la colonne 'R' est cachée (fait à la main)
G72 (somme) a une valeur <>0 donc doit rester affichée
J72 (somme) a une valeur =0 donc devrait être cachée
je passe par les bonnes parties de code (je le vois grâce aux 'message boxes)
j'ai essayé plusieurs méthodes
le test sur la visibilité de la colonne 'R' affiche le bon résultat
donc il semble que je n'arrive pas à imposer une valeur à l'attribut 'hidden' (true ou false)
merci d'avance pour vos conseils
code pour faire afficher (ne fonctionne pas non plus
code pour modifier la valeur d'une cellule
(fonctionne correctement)
ms office 2007 (fr) / spreadsheet au format 2003 (*.xlsM)
les macros sont autorisées
je n'arrive pas à cacher une colonne affichée ou faire afficher une colonne cachée
je passe bien par mon code (les text-box s'affichent)
je peux exécuter des macros (modifier la valeur d'une cellule)
les 'messages boxes' affichent bien ce qui correspond à la réalité
la colonne 'R' est cachée (fait à la main)
G72 (somme) a une valeur <>0 donc doit rester affichée
J72 (somme) a une valeur =0 donc devrait être cachée
je passe par les bonnes parties de code (je le vois grâce aux 'message boxes)
j'ai essayé plusieurs méthodes
le test sur la visibilité de la colonne 'R' affiche le bon résultat
donc il semble que je n'arrive pas à imposer une valeur à l'attribut 'hidden' (true ou false)
merci d'avance pour vos conseils
Sub HideEmpty()
'
' HideEmpty Macro
' Hides Columns with no element
'
Columns("G:H").Select
If Range("G72").Value = 0 Then
Selection.EntireColumn.Hidden = True
MsgBox "G72 = 0 => hide columns"
Else
Selection.EntireColumn.Hidden = False
MsgBox "G72 <> 0 => un-hide columns"
End If
Columns("J:K").Select
If Range("J72").Value = 0 Then
Selection.EntireColumn.Hidden = True
MsgBox "J72 = 0 => hide columns"
Else
Selection.EntireColumn.Hidden = False
MsgBox "J72 <> 0 => un-hide columns"
End If
' test hide-un_hide
If Columns("G").EntireColumn.Hidden Then
MsgBox "G is hidden"
Else
MsgBox "G is seen"
End If
If Columns("J").EntireColumn.Hidden Then
MsgBox "J is hidden"
Else
MsgBox "J is seen"
End If
If Columns("R").EntireColumn.Hidden Then
MsgBox "R is hidden"
Else
MsgBox "R is seen"
End If
If Range("J72").Value = 0 Then
Columns("J:K").EntireColumn.Hidden = True
MsgBox "J72 = 0 => hide columns"
Else
Columns("J:K").EntireColumn.Hidden = False
MsgBox "J72 <> 0 => un-hide columns"
End If
If Columns("J").EntireColumn.Hidden Then
MsgBox "J is hidden"
Else
MsgBox "J is seen"
End If
If Range("J72").Value = 0 Then
Columns("J").EntireColumn.Hidden = True
Columns("K").EntireColumn.Hidden = True
MsgBox "J72 = 0 => hide columns"
Else
Columns("J").EntireColumn.Hidden = False
Columns("K").EntireColumn.Hidden = False
MsgBox "J72 <> 0 => un-hide columns"
End If
If Columns("J").EntireColumn.Hidden Then
MsgBox "J is hidden"
Else
MsgBox "J is seen"
End If
' If Range("G72").Value = 0 Then
' Columns("G:H").EntireColumn.Hidden = True
' MsgBox "G72 = 0 => hide columns"
' Else
' Columns("G:H").EntireColumn.Hidden = False
' MsgBox "G72 <> 0 => un-hide columns"
' End If
' If Range("J72").Value = 0 Then
' Columns("J:K").EntireColumn.Hidden = True
' MsgBox "J72 = 0 => hide columns"
' Else
' Columns("J:K").EntireColumn.Hidden = False
' MsgBox "J72 <> 0 => un-hide columns"
' End If
End Sub
code pour faire afficher (ne fonctionne pas non plus
Sub UnHideEmpty()
'
' Un-HideEmpty Macro
' Hides Columns with no element
'
Columns("G:H").EntireColumn.Hidden = False
Columns("J:K").EntireColumn.Hidden = False
MsgBox "un-hide columns G:H, J:K, ..."
End Sub
code pour modifier la valeur d'une cellule
(fonctionne correctement)
Sub Set_A60_1()
Range("A60").Value = "'1"
End Sub
Sub Set_A60_2()
Range("A60").Value = "'2"
End Sub
Sub Set_A60_Null()
Range("A60").Value = ""
End Sub
Autres pages sur : cacher afficher colonnes excell 2007 macro
Lassé par la pub ? Créez un compte
Meilleure solution
Rhoooo !
Tu n'as besoin de connaître que la première colonne ! Alors tu comptes sur tes doigts : A-B-C-D-E-F-G. C'est le 7ème doigt. Tu remplaces donc Range("G72") par Cells(72, 7).
Maintenant, on traite tes n colonnes :
Et voilà !
Ben tu lis l'aide sur Columns. Et tu apprends que cette fonction accepte aussi bien les adresses (chaîne de caractères) que les coordonnées (une seule pour une colonne).
Quoi encore ?
Ah, oui :
Alors compliquons un peu les choses![[:patch] [:patch]]()
Y'a trop de Cells(72, i * 3 + 7) !
Tu n'as besoin de connaître que la première colonne ! Alors tu comptes sur tes doigts : A-B-C-D-E-F-G. C'est le 7ème doigt. Tu remplaces donc Range("G72") par Cells(72, 7).
Maintenant, on traite tes n colonnes :
For i = 0 To n - 1
... = Cells(72, i * 3 + 7).Value = 0
Next
Et voilà !
Citation :
Mais euuuuuh. Comment je fais pour mes colonnes ?Ben tu lis l'aide sur Columns. Et tu apprends que cette fonction accepte aussi bien les adresses (chaîne de caractères) que les coordonnées (une seule pour une colonne).
For i = 0 To n - 1
Columns(i * 3 + 7).Hidden = Cells(72, i * 3 + 7).Value = 0
Next
Quoi encore ?
Citation :
J'ai deux colonnes
Strofacile
For i = 0 To n - 1
Columns(i * 3 + 7).Hidden = Cells(72, i * 3 + 7).Value = 0
Columns(i * 3 + 8).Hidden = Cells(72, i * 3 + 7).Value = 0
Next
Alors compliquons un peu les choses
![[:patch] [:patch]](http://m.bestofmedia.com/sfp/design/usr/fr/smilies/e5/c5/patch.gif)
Et toc, du EntireColumn
For i = 0 To n - 1
Cells(72, i * 3 + 7).EntireColumn.Hidden = Cells(72, i * 3 + 7).Value = 0
Cells(72, i * 3 + 8).EntireColumn.Hidden = Cells(72, i * 3 + 7).Value = 0
Next
Y'a trop de Cells(72, i * 3 + 7) !
Dim c As Range
For i = 0 To n - 1
Set c = Cells(72, i * 3 + 7)
c.EntireColumn.Hidden = c.Value = 0
c.Offset(,1).EntireColumn.Hidden = c.Value = 0
Next
Dim c As Range
For i = 0 To n - 1
Set c = Cells(72, i * 3 + 7)
Range(c, c.Offset(,1)).EntireColumn.Hidden = c.Value = 0
Next
Salut,
Evite les Select/Selection (Lignes 7/9, 7/12, 16/18, 16/21). D'autant que tu le fait très bien ligne 45 et suivante. Par principe, je n'aime pas les Select. Mais sélectionner une cellule dont on va cacher la colonne, ça ne me semble vraiment pas pertinent !
Concernant plus particulièrement ton problème, je me l'explique très difficilement
Y-a-t'il un message d'erreur ?
Sans plus d'explication, je pense à un problème de protection de la feuille. Est-ce ton cas ? (mais dans ce cas, il y a un message d'erreur)
Evite les Select/Selection (Lignes 7/9, 7/12, 16/18, 16/21). D'autant que tu le fait très bien ligne 45 et suivante. Par principe, je n'aime pas les Select. Mais sélectionner une cellule dont on va cacher la colonne, ça ne me semble vraiment pas pertinent !
Concernant plus particulièrement ton problème, je me l'explique très difficilement
Y-a-t'il un message d'erreur ?
Sans plus d'explication, je pense à un problème de protection de la feuille. Est-ce ton cas ? (mais dans ce cas, il y a un message d'erreur)
merci zeb
comme tu vois j'ai essayé pas mal de façons et je tourne en rond (tournicottons - enfin tu connais ...)
non, pas de message d'erreur
j'ai essayé les mêmes codes mais au lieu de hidden, j'ai essayé de jouer avec 'ColumnWidth' et ça ne passe pas non plus
ColumnWidth=0 (pour cacher)
ColumnWidth=5 ou =11 (pour montrer)
à la main, oui c'est bon, mais pas par une macro
> je pense à un problème de protection de la feuille
ça m'était aussi venu en tête
comment le vérifier (j'ai hérité de cette feuille et l'auteur initial n'est plus joignable
> (mais dans ce cas, il y a un message d'erreur)
c'est ce que je me disais aussi
j'ai droit à un tour de manège ?
comme tu vois j'ai essayé pas mal de façons et je tourne en rond (tournicottons - enfin tu connais ...)
non, pas de message d'erreur
j'ai essayé les mêmes codes mais au lieu de hidden, j'ai essayé de jouer avec 'ColumnWidth' et ça ne passe pas non plus
ColumnWidth=0 (pour cacher)
ColumnWidth=5 ou =11 (pour montrer)
à la main, oui c'est bon, mais pas par une macro
> je pense à un problème de protection de la feuille
ça m'était aussi venu en tête
comment le vérifier (j'ai hérité de cette feuille et l'auteur initial n'est plus joignable
> (mais dans ce cas, il y a un message d'erreur)
c'est ce que je me disais aussi
j'ai droit à un tour de manège ?
>> j'ai droit à un tour de manège ?
![[:rofl] [:rofl]]()
------------------------
Je ne connais pas du tout les spécificités d'O.2007, y-a-t'il là une subtilité ?
Fais-le à la main, l'enregistreur de macro démarré.
Compare ce code et le tien.
Recopie le code dans ta feuille xlsM et vois si le fonctionnement diffère.
![[:rofl] [:rofl]](http://m.bestofmedia.com/sfp/design/usr/fr/smilies/7d/f9/rofl.gif)
------------------------
Je ne connais pas du tout les spécificités d'O.2007, y-a-t'il là une subtilité ?
Fais-le à la main, l'enregistreur de macro démarré.
Compare ce code et le tien.
Recopie le code dans ta feuille xlsM et vois si le fonctionnement diffère.
à la main ça marche (cacher une colonne, changer la largeur)
puis je refais 'Ã la main' tout en enregistrant le code ... c'est bon
puis j'exécute le code enregistré .... Niet, Nada, No, Non, Nein, ...
et, oui, j'ai autorisé les macros, toutes les macros
bon, j'ai du quitter au bureau, n'ayant pas les clés et le dernier ayant les clés partant. je suis à la maison maintenant (j'aime le bureau, mais chez moi c'est bien aussi)
excel n'arrivait pas à se fermer (un coup de task_manager et c'est parti)
peut être demain après un démarrage à froid, ça ira mieux ?
demain est un autre jour
entretemps, je profite d'un tour de manège ... enchanté
merci zeb en tout cas
puis je refais 'Ã la main' tout en enregistrant le code ... c'est bon
puis j'exécute le code enregistré .... Niet, Nada, No, Non, Nein, ...
et, oui, j'ai autorisé les macros, toutes les macros
bon, j'ai du quitter au bureau, n'ayant pas les clés et le dernier ayant les clés partant. je suis à la maison maintenant (j'aime le bureau, mais chez moi c'est bien aussi)
excel n'arrivait pas à se fermer (un coup de task_manager et c'est parti)
peut être demain après un démarrage à froid, ça ira mieux ?
demain est un autre jour
entretemps, je profite d'un tour de manège ... enchanté
merci zeb en tout cas
ce matin c'est tout bon ....
je suppose qu'un 'cold-boot' pour le pc et un warm-boot pour le 'user' (tasse de café) ça a eu du bon
zeb (ou tout autre, mais honneur à zeb),
je programme déjà pas mal en vb (surtout vb6, mais je commence en vb2008 express), c, c++ et j'ai même tâté de fortran et cobol (ça date le personnage)
eh, oui, j'ai commencé en assembleur sur cp/m et apple ][ (8 bits, 1MHz de CPU, 64K ram - floppies de 120K)
(bon on ne va pas le crier sur tout les toits, mais je suis une pièce de musée, un monument classé, une espèce protégée)
j'ai nettement moins d'expérience en vba
je dois refaire la même manipulation pour un nombre important de colonnes
alors je me dis qu'écrire une boucle sera plus simple, plus lisible et plus souple
tu pourrais m'aider un peu ? (ou je crée un nouveau topic ?) - merci
du style
mode implicit ' pour contrôler le bon usage des variables
dim col as integer
for col = 7 to 31 step 3
. if cell(72, col)==0 then
. hide colonnes(col: col+1)
. else
. show colonnes(col: col+1)
. endif
next col
en attendant ta réponse, je m'y mets et je reviens ici si c'est ok
je suppose qu'un 'cold-boot' pour le pc et un warm-boot pour le 'user' (tasse de café) ça a eu du bon
zeb (ou tout autre, mais honneur à zeb),
je programme déjà pas mal en vb (surtout vb6, mais je commence en vb2008 express), c, c++ et j'ai même tâté de fortran et cobol (ça date le personnage)
eh, oui, j'ai commencé en assembleur sur cp/m et apple ][ (8 bits, 1MHz de CPU, 64K ram - floppies de 120K)
(bon on ne va pas le crier sur tout les toits, mais je suis une pièce de musée, un monument classé, une espèce protégée)
j'ai nettement moins d'expérience en vba
je dois refaire la même manipulation pour un nombre important de colonnes
alors je me dis qu'écrire une boucle sera plus simple, plus lisible et plus souple
tu pourrais m'aider un peu ? (ou je crée un nouveau topic ?) - merci
du style
mode implicit ' pour contrôler le bon usage des variables
dim col as integer
for col = 7 to 31 step 3
. if cell(72, col)==0 then
. hide colonnes(col: col+1)
. else
. show colonnes(col: col+1)
. endif
next col
en attendant ta réponse, je m'y mets et je reviens ici si c'est ok
>> cp/m
Mes premières z'amours, sur z80
-----------------------------------------
Reste sur le même topic
Dis donc, t'as pas de bol, en plus d'être un des rares à filer des coups de main en VB, je suis modo ici. Alors je remets ma casquette de méchant :
- Balise
Ce code et ridicule !
Columns renvoie déjà des colonnes entières
Ecrivons ça plus proprement :
A la place de Range(), qui accepte une adresse sous forme de chaîne de caractères et qui désigne toute une plage, intéresse-toi à Cells() qui accepte des coordonnées numériques pour désigner une seule cellule. Alors ?
Mes premières z'amours, sur z80-----------------------------------------
Reste sur le même topic
Dis donc, t'as pas de bol, en plus d'être un des rares à filer des coups de main en VB, je suis modo ici. Alors je remets ma casquette de méchant :
- Balise
!!!!
---------------------------------
[code]Columns("G:H" ).EntireColumn.Hidden = False
Ce code et ridicule !
Columns renvoie déjà des colonnes entières
Bon, ok. C'est parce que ce sont des tests.
Columns("G:H" ).Select
If Range("G72" ).Value = 0 Then
Selection.EntireColumn.Hidden = True
MsgBox "G72 = 0 => hide columns"
Else
Selection.EntireColumn.Hidden = False
MsgBox "G72 <> 0 => un-hide columns"
End If
Ecrivons ça plus proprement :
Columns("G:H" ).Hidden = Range("G72" ).Value = 0
A la place de Range(), qui accepte une adresse sous forme de chaîne de caractères et qui désigne toute une plage, intéresse-toi à Cells() qui accepte des coordonnées numériques pour désigner une seule cellule. Alors ?
en attendant, j'ai écrit un code 'spaghetti'
(c'est l'horreur mais je devais le sortir aujourd'hui)
et semblable monstre pour les colonnes avec incrément de 3
j'ai honte !
(enfin, j'ai écrit un petit vb qui m'a généré le code - moins de risques d'erreurs)
(l'honneur est presque sauf)
(c'est l'horreur mais je devais le sortir aujourd'hui)
. If cells(72, 176).Value = 0 Then
. Columns(" 176" ).EntireColumn.Hidden = True
. Else
. Columns(" 176" ).EntireColumn.Hidden = False
. End If
.
. If cells(72, 177).Value = 0 Then
. Columns(" 177" ).EntireColumn.Hidden = True
. Else
. Columns(" 177" ).EntireColumn.Hidden = False
. End If
. If cells(72, 178).Value = 0 Then
. Columns(" 178" ).EntireColumn.Hidden = True
. Else
. Columns(" 178" ).EntireColumn.Hidden = False
. End If
. If cells(72, 179).Value = 0 Then
. Columns(" 179" ).EntireColumn.Hidden = True
. Else
. Columns(" 179" ).EntireColumn.Hidden = False
. End If
. ..... pour les colonnes avec incrément de 1
et semblable monstre pour les colonnes avec incrément de 3
j'ai honte !
(enfin, j'ai écrit un petit vb qui m'a généré le code - moins de risques d'erreurs)
(l'honneur est presque sauf)
il fait beau
le boss décide de partir plus tôt
et comme j'ai pris 2 jours de congé
je continuerai vendredi
entretemps, c'est hyper laid mais ça marche !
bon, j'ai d'autres éléments à débugger ...
petit doute, c'est compatible avec office 2003 ? (le boss n'aime pas 2007 car trop différent - je suis d'accord avec lui sur ce point)
le boss décide de partir plus tôt
et comme j'ai pris 2 jours de congé
je continuerai vendredi
entretemps, c'est hyper laid mais ça marche !
bon, j'ai d'autres éléments à débugger ...
petit doute, c'est compatible avec office 2003 ? (le boss n'aime pas 2007 car trop différent - je suis d'accord avec lui sur ce point)
zeb, un grand merci
je commence 2 jours de congé ... et attrape un rhube de cerbeau ! aaaaatchaaaa !
ça m'apprendra à ne pas mettre mon antivirus à jour !
j'avais essayé un code du genre (mais nettement moins beau)
là ma petite cellule grise s'est mise en grève, mode 'mal de tête carabiné'
je cours chercher du [ censuré ] 1gr.
à plus
je commence 2 jours de congé ... et attrape un rhube de cerbeau ! aaaaatchaaaa !
ça m'apprendra à ne pas mettre mon antivirus à jour !
j'avais essayé un code du genre (mais nettement moins beau)
là ma petite cellule grise s'est mise en grève, mode 'mal de tête carabiné'
je cours chercher du [ censuré ] 1gr.
à plus
désolé, zeb mais ton code me semblait assez clair donc ce n'est pas vraiment ça qui tambourinnait dans mon crâne
même les dernières boxes de code
(ou alors je sombrais dans mes délires suite à la fièvre)
merci encore pour ta gentillesse, la clarté de ton code, ta patience et ta promptitude
je peux déposer la brosse et le cirage maintenant ou je dois en remettre une couche ?
non, je pense vraiment ce que je dis
j'ai été fort actif (avant mon travail) sur une autre partie de ce forum et ce sais ce que ça représente
j'ai implémenté le tout ce jour, modifié encore pas mal de trucs à gauche et à droite et emballé le tout dans un mail pour le boss
c'est très nettement plus propre comme code
il faudra que je m'achète (ou me fasse acheter) un bon livre sur vb2008, vba 2008 et office (surtout excel & word)
je viens de récupérer un serveur 2003 que des gens mettaient dans leur cour, sous la pluie !
à mon avis tout fonctionne (pas encore essayé, j'attends qu'il sèche bien)
si c'est bon, c'est un win 2003 (serveur évidemment) sbs donc avec sql et exchange et plein d'autres trucs
un contrôleur à première vue raid 0/1/2 qui semble hot-swap en plus
3 disques durs
bon boîtier
bonne alim
même les dernières boxes de code
(ou alors je sombrais dans mes délires suite à la fièvre)
merci encore pour ta gentillesse, la clarté de ton code, ta patience et ta promptitude
je peux déposer la brosse et le cirage maintenant ou je dois en remettre une couche ?
non, je pense vraiment ce que je dis
j'ai été fort actif (avant mon travail) sur une autre partie de ce forum et ce sais ce que ça représente
j'ai implémenté le tout ce jour, modifié encore pas mal de trucs à gauche et à droite et emballé le tout dans un mail pour le boss
c'est très nettement plus propre comme code
il faudra que je m'achète (ou me fasse acheter) un bon livre sur vb2008, vba 2008 et office (surtout excel & word)
je viens de récupérer un serveur 2003 que des gens mettaient dans leur cour, sous la pluie !
à mon avis tout fonctionne (pas encore essayé, j'attends qu'il sèche bien)
si c'est bon, c'est un win 2003 (serveur évidemment) sbs donc avec sql et exchange et plein d'autres trucs
un contrôleur à première vue raid 0/1/2 qui semble hot-swap en plus
3 disques durs
bon boîtier
bonne alim
Lassé par la pub ? Créez un compte
- Contenus similaires :
- ForumExcel macro afficher feuille
- ForumLangage macro excel 2007
- ForumExcel macro comparer colonnes
- ForumExcel 2007 retrouver macro
- ForumProgrammer macro excel 2007
- ForumDevelopper macro excel 2007
- ForumCréer une macro excel 2007
- ForumProblã me macro excel 2007
- ForumWindows 2007 excel afficher tout
- ForumTutoriel macro excel 2007
- Voir plus
!!!