Masquer certaines colonnes séparées avec une macro
Bonjour à tous,
J'ai un fichier sur lequel je souhaite masquer facilement certaines parce qu'elles ne me sont pas destinées, à l'aide d'une macro ou d'un bouton.
Précision utile, je n'y connais rien en macro, je ne sais donc pas comment en créer, m'en servir, les sauvegarder, etc
J'ai donc un fichier, avec 2 feuilles séparées où je souhaite faire la même chose :
Nom de la feuille : CCPV2 CONTENTS
Colonnes à masquer : C, D, E, F, G, H, J, K, N, Q, R, S, T, V, W, Y, Z, AA, AC, AE, AG, AH
Nom de la feuille : CCPV2 FUNCTUNALITIES
Colonnes à masquer : C, D, E, F, H, I, J, L, O, P, Q, R, T, U,W, X, Y, AA, AC, AE, AF
Comment puis-je m'y prendre ?
Merci d'avance pour votre aide.
Bonjour MadShot,
Je te propose ce fichier Excel :
À l'ouverture du fichier, tu es sur la 1ère feuille, où toutes les colonnes sont affichées.
Fais Alt F8 ➯ fenêtre "Macro", où il y en a une seule dans la liste (qui est déjà sélectionnée)
fais Entrée (ou clique sur le bouton "Exécuter") ➯ travail effectué
Va sur la 2ème feuille, où toutes les colonnes sont affichées.
Fais pareil que ci-dessus ➯ travail effectué
Alt F11 pour voir le code VBA, puis revenir sur Excel
Si tu m'envoies ton fichier (sans données confidentielles), je ferai l'adaptation nécessaire.
dhany
Bonjour dhany et merci beaucoup !
Ca fonctionne très bien sur ton fichier d'exemple et c'est plutôt simple à utiliser.
Mon fichier étant un fichier de mon entreprise (grande entreprise avec des données confidentielles), je ne peux malheureusement pas te le communiquer.
Saurais-tu comment je peux l'adapter moi-même à mon fichier existant ?
D'avance merci,
MadShot
Bonjour MadShot,
Oui, bien sûr, je peux t'aider à faire l'adaptation ; mais pour la 1ère étape, dis-moi d'abord si ce fichier de grande entreprise (avec données ultra-confidentielles sur l'invasion de l'Ukraine par des soldats russes déguisés en civils
La différence est très importante, car un fichier .xlsx ne peut pas contenir de code VBA : il faut obligatoirement le convertir en fichier .xlsm pour pouvoir y mettre des macros ; si tu sais déjà comment faire cette conversion : ok ; sinon, je t'indiquerai comment.
À te lire pour la suite.
dhany
Merci dhany.
Le fichier est en .xls (ni x ni m).
J'imagine qu'il ne gère pas les macro d'origine du coup ?
Merci.
Un fichier avec extension .xls est un classeur Excel version 2003 (ou antérieure) ; il peut contenir des macros, car la différence dont je t'ai parlé n'existait pas avant Excel 2007. D'autre part, j'ai vu à droite de ton message que tu as Excel 2016 FR ; donc ne préfères-tu pas convertir d'abord ton fichier en .xlsm ? nombreux avantages : il ne sera plus en mode compatibilité ; la taille du fichier sur disque dur sera réduite de près de 50% (➯ plus rapide à ouvrir) ; davantage de lignes (jusqu'à 1 048 576 au lieu de 65535) et davantage de colonnes (jusqu'à XFD au lieu de IV) ; possibilité d'utiliser de nouvelles fonctions (qui n'existaient donc pas dans les versions antérieures).
Mais peut-être que c'est seulement le PC de ton domicile qui est avec Excel 2016 et pas celui de ton entreprise ?
Si tu choisis de faire la conversion en .xlsm mais que tu ne sais pas comment, je te le dirai ; à te lire.
dhany
Merci dhany !
Je vais convertir le fichier dans ce cas ! En réenregistrant simplement le fichier en .xlsm j'imagine ?
J'ai eu un message d'erreur indiquant qu'un élément dans le fichier avait dû être renommé pour convenir au nouveau format donc je vais commencer par faire le reste des modifications sur un fichier de test avant d'appliquer ça au fichier original, que je ne suis pas le seul à utiliser
Et oui, j'utilise uniquement mon PC de travail avec Excel 2016 FR pour faire ces changements
Oh la ! attention : pour la conversion, ça ne marche pas d'enregistrer un fichier .xls simplement en renommant son extension ! voici comment faire : d'abord, ouvre le fichier .xls dans Excel, puis juste après, sans rien modifier, appuie sur la touche F12 ➯ fenêtre « Enregistrer sous » ; en bas et sous le nom de fichier, pour « Type : », choisis l'item « Classeur Excel (prenant en charge les macros) » ; c'est ça qui fait la conversion en vrai classeur .xlsm (car c'est un format de fichier bien spécifique).
Le fichier d'origine .xls est toujours sur le disque dur de ton PC ; normalement, la conversion a dû réussir et y'aura aucun problème, mais par précaution, vérifie d'abord que tu peux ouvrir le .xlsm et qu'il n'y manque rien avant de supprimer ton fichier .xls !
Dis-moi quand tu seras arrivé à cette étape, et je t'indiquerai la suite.
dhany
Re dhany,
Oui, je me suis sûrement mal exprimé mais c'est bien avec la manière que tu décris que j'ai fait la conversion
OK ; dans ce cas, voici la suite : ton classeur .xlsm étant ouvert, fais Alt F11 pour aller sur la fenêtre de « Microsoft Visual Basic » (qu'on appele aussi Éditeur VBA) ; fais Alt i m pour insérer un nouveau module ➯ tu as Module1, dont la page blanche est à droite ; fais dessus un copier / coller de mon code VBA, que je remets ici pour te faciliter la tâche (ça t'évite un copier / coller entre 2 classeurs Excel) :
Sub HideColumns()
Application.ScreenUpdating = 0
Select Case ActiveSheet.Name
Case "CCPV2 CONTENTS"
Columns("C:AH").Hidden = -1
Range("I:I, L:M, O:P, U:U, X:X, AB:AB, AD:AD, AF:AF").Columns.Hidden = 0
Case "CCPV2 FUNCTIONALITIES"
Columns("C:AF").Hidden = -1
Range("G:G, K:K, M:N, S:S, V:V, Z:Z, AB:AB, AD:AD").Columns.Hidden = 0
End Select
End SubTu dois alors avoir ceci :
Facultatif : pour compiler ce code VBA, fais : Alt d Entrée
Pour sauvegarder, fais Ctrl s (ou clic sur l'icône disquette)
Alt F11 pour retourner sur Excel
Si t'avais pas sauvegardé au niveau de l'Éditeur VBA, sauvegarder au niveau d'Excel
est possible aussi : ça enregistre tout ton classeur, y compris tout son code VBA.
Pour utiliser ta nouvelle macro, fais comme tu avais fait avec mon fichier, donc via Alt F8 !
(ils sont pratiques, hein, les raccourcis claviers : ça va plus vite qu'avec la souris !
Si tu as besoin de plus d'infos, n'hésite pas à me demander.
Si tout est réglé, merci de passer le sujet en résolu : tu dois cliquer sur la coche V (située près du bouton EDIT)
toi seul peut le faire, car c'est toi qui a créé ce sujet, et ça permet de clôturer le fil.
dhany
Bonjour dhany,
Alors autant ça marchait à la perfection avec ton fichier d'exercice, autant quand je le fais sur mon fichier existant rien ne se passe !
J'ai bien converti mon fichier en .xlsm, intégré le code fourni mais lorsque je fais Executer sur la macro après un Alt+F8, rien ne bouge à l'écran !
Les feuilles sont pourtant intitulées de la même façon, les colonnes sont toujours là, donc je ne vois pas d'où vient le problème !
Merci pour ton aide.
Bonjour MadShot,
Si ça ne marche toujours pas, ajoute au début de ta sub la ligne MsgBox suivante :
Sub HideColumns()
MsgBox "Hello !": Exit Sub
Application.ScreenUpdating = 0Ensuite : Alt F11 pour retourner sur ta feuille Excel ; Alt F8 puis Entrée pour exécuter la macro ; le message "Hello !" doit s'afficher ; sinon, c'est que tes macros sont désactivées !
Si le message "Hello !" s'est affiché, enlève la ligne MsgBox car c'était juste pour tester si la macro se lance bien.
Autre possibilité : contrairement à ce que tu penses, le nom des feuilles n'est peut-être pas bon : il y a peut-être un espace en trop à la fin (donc à enlever) ; car "CCPV2 CONTENTS " est différent de "CCPV2 CONTENTS" et la macro masque les colonnes voulues seulement pour une feuille dont le nom est correct.
S'il n'y a pas d'espace au bout du nom de l'onglet, peut-être que l'espace après CCPV2 est un espace insécable (code ascii 160) ?
si oui : supprime-le et met un espace normal (code ascii 32) avec la barre d'espace.
À te lire pour la suite.
dhany
Merci beaucoup dhany !
J'ai fais un copier/coller des noms de ma feuille dans la macro pour m'assurer que les noms étaient les mêmes et comme ça, ça a marché !
Merci beaucoup pour ton aide sur ce sujet !
Je vais peut-être même décliner la macro pour mes collègues afin qu'ils ne soient pas jaloux
Je passe le sujet en résolu alors !
Merci beaucoup dhany et bonne journée !
Merci pour ton retour, et pour avoir passé le sujet en résolu !
c'est sympa de ta part de penser à tes collègues !
bonne continuation, et bonne journée à toi aussi !
dhany