Sélection colonnes vide uniquement

salut a tous,

la secrétaire de mon entreprise souhaite réorganisé le planning de mon usine, car le logiciel de planification nous sort un document "intorchable".

elle m'a demandé de l'aide car elle sais que je touche un peut en informatique.

j'ai fais un script qui me permet automatiquement de passé de ça :

a ça :

Même si c'est pas mal, j'essaie de poussé un peut le truc pour qu'elle ai juste a appliqué la macro puis imprimé.

Il me reste donc la "mise en forme a faire.

Mon problème avant de faire ça c'est que j'aimerais supprimé automatiquement les colonnes qui ne comporte pas de texte ( donc E;H;I;J )

Sachant que cela sera évolutive en fonction des feuilles qu'elle sortira, donc quelquefois ce sera d'autres colonnes qui seront blanche.

avez vous une idée ?

merci

2la-macro.txt (15.02 Ko)

Bonjour,

Un exemple.

Cdlt.

Public Sub DeleteBlankColumns()
Dim lastCol As Long, lCol As Long
Const RW As Long = 2
    Application.ScreenUpdating = False
    With ActiveSheet
        lastCol = .Cells(RW, .Columns.Count).End(xlToLeft).Column
        For lCol = lastCol To 2 Step -1
            If IsEmpty(.Cells(RW, lCol)) Then .Columns(lCol).EntireColumn.Delete
        Next lCol
    End With
End Sub

j'essaie ça, je vous tient au courant

alors, je viens de faire un essaie.

cela ne fonctionne pas..

du moins, pas le code qui doit être bon, mais ma manière de l'inclure ne me fait pas disparaître et décalé les colonnes sur la gauche

une idée ?

Re,

Cela fonctionne si la ligne de référence (date) est égale = RW, soit 2.

Sinon, modifier en conséquence (5 ?).

Cdlt.

Bonjour Oneil84, Jean-Eric

Ci-dessous une possibilité.

Sub MaskCol()
With ActiveSheet
DerCol = 15     'Note pour un maximum de 15 colonnes. A modifier + -
For Col = 1 To DerCol
If .Cells(4, Col) = "" Then Cells(4, Col).Columns.Hidden = True
Next Col
End With
End Sub
Sub AffCol()
With ActiveSheet
DerCol = 15      'Note pour un maximum de 15 colonnes. A modifier + -
For Col = 1 To DerCol
If .Cells(4, Col) = "" Then Cells(4, Col).Columns.Hidden = False
Next Col
End With
End Sub

je viens de faire un essaie avec

Sub MaskCol()
With ActiveSheet
DerCol = 15     'Note pour un maximum de 15 colonnes. A modifier + -
For Col = 1 To DerCol
If .Cells(4, Col) = "" Then Cells(4, Col).Columns.Hidden = True
Next Col
End With
End Sub

cela fonctionne bien, j'ai réussis a l'inclure dans mon code existant en retirant les "Sub" "End Sub"

par contre, il faudrais que je fasse abstraction de la colonne 1 qui contient les nom, car elle me l’efface aussi alors qu'elle a des noms.

EDIT : passage en "For Col = 2" c'est good

je vais essayé le code a jean eric pour voir si j'arrive aussi a l'inclure

Re,

Attention, s'il y plusieurs colonnes vides entre 2 colonnes pleines.

Ce n'est pas pour rien que l'on commence la boucle à partir de la dernière colonne.

Cdlt.

cela risque quoi ?

j'essaie d'apprendre un peut, mais je ne fais pas de VBA ni même ce type de prog ^^

j'ai bien essayé d'inclure ton code dans ma feuille, du moins, j'ai pris ça :

    With ActiveSheet
        lastCol = .Cells(RW, .Columns.Count).End(xlToLeft).Column
        For lCol = lastCol To 2 Step -1
            If IsEmpty(.Cells(RW, lCol)) Then .Columns(lCol).EntireColumn.Delete
        Next lCol
    End With

j'avais une erreur, c'est probablement un truc que j'ai mal fais, mais du coup, le code de cellus a fonctionné sans problème ..

je risque d'avoir des problème a utilisé se code la ?

merci encore

la je suis entrain de faire la mise en page ainsi que l'aperçu avant impression

A nouveau,

Exemple fait avec ton ancien planning. Le bouton toupie en haut à gauche affiche ou masque les colonnes.

A utiliser avant toute impression ou a insérer dans une procédure d'impression. Au début d'une macro d'impression masque, à la fin affiche.

Bonne continuation.

merci l'ami

bon, tu t'est cassé la tête pour rien non ? ton 1er script fonctionne bien

a savoir que le logiciel de création de planning me génère des document excel chaque semaine, donc je compte bien gardé la macro sur le pc ( et non juste le document excel ).

la personne qui s'occupe du planning devras uniquement faire l’exécution via un raccourcie qu'elle apprendra

par contre, j'ai fais des modifs et je voudrais s'avoir si cela fonctionne chez vous, notamment sur les paramètre d'impression car elle doit tiré sur du A3, et vu que mon pc n'avais pas ce format de dispo, j'ai fait en sorte de l'avoir.

mais si vous vous utilisé juste du A4 chez vous, que fait l’exécution du code avec le format de feuille A3 ?

merci ( je joint le document avec la macro a l’intérieur )

pour la lancer, ctrl shift W

2pour-test.xlsm (37.80 Ko)

A nouveau,

Les fichiers postés peuvent aussi servir pour les besoins d'autres utilisateurs. Quand ceux-ci sont généraux et donc utilise un code "passe-partout".

Je télécharge ton fichier pour voir le code (paramètres d'impression). Une sortie A4 peut passer sur du A3 (bien qu'il vaut mieux ne pas gâcher une feuille A3). L'inverse l'est moins. L'aperçu avant impression te permet de vérifier.

Le code ajouté n'a aucune incidence sur la sortie. Puisqu'il prend en compte la dernière colonne remplie et les colonnes masquées ne ressortiront pas. J'ai fait le test sous impression paysage (aperçu) avant et après masquage.

A suivre...

Les fichiers postés peuvent aussi servir pour les besoins d'autres utilisateurs. Quand ceux-ci sont généraux et donc utilise un code "passe-partout".

élas le problème c'est que très peut de personnes utilisent le logiciel de base :

mais en mettent les bon mots clé sur le topic, peut être un jour, ce fichier servira a une personnes voulant arrangé le planning immonde que ce logiciel sort.

pour la sortie en A3, je le fais car c'est affiché en grand dans le couloir près de la pointeuse.

a terme, si c'est validé, j'ai entendu qu'ils voulaient le sortir sur 2 semaines. je pense que la macro et prête pour assuré ça.

Suite,

Voilà après lancement de la macro la sortie d'impression, image ci dessous.

captapercuimp

J'ai ajouté en début de macro la ligne de code suivante:

Application.ScreenUpdating = False

et en fin avant le code de l'aperçu d'impression:

Application.ScreenUpdating = True

Ceci uniquement pour éviter le "rafraichissement" continuel de l'écran pendant l'exécution de la macro.

Cela ne concerne pas l'impression.

Bonne continuation.

merci bien

j'ai ajouté cela au code.

après je pense que ce code n'est pas très optimisé, et qu'il y a surement des chose a supprimé

j'ai utilisé l'enregistreur de macro pour faire une grande partie du code.

il faudrait que je me penche sur les fonction utile, et inutile

exemple :

Cells.Replace what:="05h - 13h", Replacement:="1-MATIN", LookAt:= _
        xlWhole, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False

j'ai essayé de gardé uniquement

Cells.Replace what:="05h - 13h", Replacement:="1-MATIN"

cela ne fonctionne pas

mais il y a surement parmi ça :

LookAt:= _
        xlWhole, SearchOrder:=xlByRows
        MatchCase:=False
        SearchFormat:=False, _
        ReplaceFormat:=False

des choses qui sont inutile... mais bon, tout fonctionne pour la création du document, et c'est plutôt rapide moins de 3 sc

Bonsoir,

Effectivement le programme est long. En gardant l'original et en travaillant sur une copie tu verras les points à optimiser sans conséquence sur l'utilisation habituelle.

Mais juste pour la programmation car rien ne sera vraiment gagné sur le temps d'exécution.

je vais regarder pour le compressé un peut, mais c'est tellement tentant d'ajouter des chose au fur est a mesure ( envoie des mails en automatique par exemple )

je viens de bougé un peut le code pour qu'il prennent jusqu’à la colonne S, ce qui permet au script d’être opérationnel si la secrétaire veux faire le planning sur 2 semaines

Il y a des choses qui sont regrettable sur le VBA, ou alors je ne sais pas comment cela fonctionne, mais par exemple

- pas de palette de couleurs dispo ( pour choisir quelle couleur utilisé, j'ai enregistré une macro en coloriant moi même les cases pour avoir leurs code )

-impossible de revenir en arrière une fois le code exécuté ( ce qui oblige a fermé le document puis le relancer )

finalement, je suis a 0.83s de temps d’exécution sur un planning a 15 colonnes ( 2 semaines )

je vais arrêté la, il y a trop de possibilité a faire, j'ai nettoyé un peut le code, je l'ai réarranger aussi.

merci a tous pour votre aide

Rechercher des sujets similaires à "selection colonnes vide uniquement"