Microsoft 365 VBA Excel

INIME-

XLDnaute Nouveau
Sur une base de données, j'ai une centaines de colonnes, je souhaite me débarasser de certains de ces colonnes (problème c'est que c'est une extract ==> donc travaille répétitif à chaque extraction)

Je voudrais créer un formulaire avec des cases à cocher et mettre devant chaque case l'en-tête de colonne
Dès que je coche une case, je voudrais qu'excel aille chercher la colonne ou les colonnes, les sélectionner et par la suite exporter la sélection dans un autre fichier excel.


Merci beaucoup pour votre aide
 

patricktoulon

XLDnaute Barbatruc
bonjour
ça fait 162 case a cocher dans un formulaire pour faire le choix
je pense qu'il y a de meilleures solutions
faudrait il que nous ayons un fichier avec des données non confidentielles représentant fidèlement le problème

cela dit

un bouton dans la feuille pour afficher le formulaire
X case à cocher
et enfin cliquer sur un bouton supprimer dans un formulaire

serait pas moins contraignant que de sélectionner les colonnes entière par le heading et click droite supprimer
 

INIME-

XLDnaute Nouveau
bonjour
ça fait 162 case a cocher dans un formulaire pour faire le choix
je pense qu'il y a de meilleures solutions
faudrait il que nous ayons un fichier avec des données non confidentielles représentant fidèlement le problème

cela dit

un bouton dans la feuille pour afficher le formulaire
X case à cocher
et enfin cliquer sur un bouton supprimer dans un formulaire

serait pas moins contraignant que de sélectionner les colonnes entière par le heading et click droite supprimer
Merci d'avoir pris le temps de me lire,

Je souhaite passer par le formulaire, parce que les colonnes à supprimer sont pas toujours less mêmes

Moi je peux travailler le formulaire de 162 case à cocher, mon seul souci c'est de programmer la case à cocher avec la colonne souhaitée,

et je voudrais plutôt que Excel Exporte la sélectionner vers un nouveau classeur au lieu de supprimer

Merci
 

patricktoulon

XLDnaute Barbatruc
re
comment se présente ton formulaire ???
le formulaire doit etre dans le fichier ou il y a les colonnes? parce que si c'est un import/export régulier alors il faudrait peut être faire un fichier maître qui ouvre le fichier (avec tes 162 colonnes) récupe les colonnes et les transfert sur un nouveau fichier
t'en est ou de tout ça ????

comment tu importe tes colonnes ?

bref autant de question qui auraient du être précisé dans la demande
 

vgendron

XLDnaute Barbatruc
Hello all

@INIMEGPAC Ce que @job75 essaie de te faire comprendre c'est:
comment tu décides de cocher ou pas une colonne
le travail que tu fais à la main pour parcourir les 165 colonnes et cocher celles que tu veux, peut etre fait directement par macro

tu dis que ca dépend de ce dont tu as besoin==> OK, c'est donc un premier critère qu'il faut expliquer

exemples au hasard:
Besoin n°1: je ne souhaite garder que les colonnes dont l'entete contient le mot "Total"
Besoin n°2: je ne souhaite garder que les colonnes impaires
Besoin n°3: je ne veux garder que les colonnes qui sont des dates

la macro commencerait par te demander quel est ton besoin 1 2 ou 3
et hop, la macro "coche les colonnes" (ce que tu fais à la main) puis supprime les colonnes inutiles..

il faut donc que tu expliques ton ou tes critères de décision

et evidemment, il est indispensable que tu postes ton fichier en exemple.. parce que la.. ca tient du domaine du divinatoire.. et ca.. c'est pas notre domaine
 

job75

XLDnaute Barbatruc
Bonjour INIMEGPAC, GALOUGALOU, patricktoulon, vgendron,

Bon si l'on veut conserver seulement quelques colonnes on peut utiliser le fichier joint.

Le double-clic permet d'ouvrir l'UserForm :
VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True
UserForm1.Show
End Sub
Le code de l'UserForm :
VB:
Private Sub CommandButton1_Click()
Dim chemin$, i%, n%
chemin = ThisWorkbook.Path 'dossier de destination, à adapter éventuellement
Application.ScreenUpdating = False
Application.DisplayAlerts = False
ActiveSheet.Copy 'nouveau document
With ListBox1
    For i = .ListCount To 1 Step -1
        If .Selected(i - 1) Then n = n + 1 Else Columns(i).Delete
    Next
End With
If n Then ActiveWorkbook.SaveAs chemin & "\Sauvegarde " & Format(Now, "yyyy-mm-dd hhmmss"), 51 'fichier .xlsx
ActiveWorkbook.Close 'ferme le document
Unload Me 'ferme l'UserForm
MsgBox IIf(n, "Sauvegarde créée avec " & n & " colonne" & IIf(n > 1, "s...", "..."), "Aucune sauvegarde créée...")
End Sub

Private Sub UserForm_Initialize()
Dim r As Range,
Set r = [A1].CurrentRegion.Rows(1)
With ListBox1
    If r.Columns.Count = 1 Then .AddItem r Else .List = Application.Transpose(r)
End With
End Sub
A+
 

Pièces jointes

  • Choix des colonnes(1).xlsm
    22.9 KB · Affichages: 10
Dernière édition:

INIME-

XLDnaute Nouveau
Bonjour INIMEGPAC, GALOUGALOU, patricktoulon, vgendron,

Bon si l'on veut conserver seulement quelques colonnes on peut utiliser le fichier joint.

Le double-clic permet d'ouvrir l'UserForm :
VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True
UserForm1.Show
End Sub
Le code de l'UserForm :
VB:
Private Sub CommandButton1_Click()
Dim chemin$, i%, n%
chemin = ThisWorkbook.Path 'dossier de destination, à adapter éventuellement
Application.ScreenUpdating = False
Application.DisplayAlerts = False
ActiveSheet.Copy 'nouveau document
With ListBox1
    For i = .ListCount To 1 Step -1
        If .Selected(i - 1) Then n = n + 1 Else Columns(i).Delete
    Next
End With
If n Then ActiveWorkbook.SaveAs chemin & "\Sauvegarde " & Format(Now, "yyyy-mm-dd hhmmss"), 51 'fichier .xlsx
ActiveWorkbook.Close 'ferme le document
Unload Me 'ferme l'UserForm
MsgBox IIf(n, "Sauvegarde créée avec " & n & " colonne" & IIf(n > 1, "s...", "..."), "Aucune sauvegarde créée...")
End Sub

Private Sub UserForm_Initialize()
ListBox1.List = Application.Transpose([A1].CurrentRegion.Rows("1:2")) 'au moins 2 éléments
End Sub
A+
Je vous remercie tous


comment tu décides de cocher ou pas une colonne ?
C'est en fonction de son en-tête, si je coche la case de colonne 1, Excel doit comprendre qu'il faut prendre la colonne entière de 1 et de la sélectionner
Si je coche la case Colonne 1 et la case de la Colonne 120, Excel doit comprendre qu'il sélectionner et la colonne dont l'en-tête est colonne 1 et celle de 120 et de les sélectionner

L'ensemble de la sélection doit être exportée dans un nouveau fichier.

les en-têtes est ce que moi je vais mettre devant chacun des Checkbox

Les données sont de types différents


PJ, formulaire ainsi que le fichier
Pour le fichier, il y aura un onglet central qui déclenche apparition du formulaire
Sur l'onglet Extract, moi je copie l'extract que mon système Bi me sort


Grand Merci
 

Pièces jointes

  • Formualire.JPG
    Formualire.JPG
    81.3 KB · Affichages: 15
  • Test.xlsx
    64.7 KB · Affichages: 4

INIME-

XLDnaute Nouveau
Hello all

@INIMEGPAC Ce que @job75 essaie de te faire comprendre c'est:
comment tu décides de cocher ou pas une colonne
le travail que tu fais à la main pour parcourir les 165 colonnes et cocher celles que tu veux, peut etre fait directement par macro

tu dis que ca dépend de ce dont tu as besoin==> OK, c'est donc un premier critère qu'il faut expliquer

exemples au hasard:
Besoin n°1: je ne souhaite garder que les colonnes dont l'entete contient le mot "Total"
Besoin n°2: je ne souhaite garder que les colonnes impaires
Besoin n°3: je ne veux garder que les colonnes qui sont des dates

la macro commencerait par te demander quel est ton besoin 1 2 ou 3
et hop, la macro "coche les colonnes" (ce que tu fais à la main) puis supprime les colonnes inutiles..

il faut donc que tu expliques ton ou tes critères de décision

et evidemment, il est indispensable que tu postes ton fichier en exemple.. parce que la.. ca tient du domaine du divinatoire.. et ca.. c'est pas notre domaine



Bonjour @vgendron

Plutôt besoin 1

Car quand je mets Colonnes 1 ne veut pas dire Colonne1 mais plutôt en-tête qui s'appelle colonne 1 que je vais mettre dans la colonne

Merci !
 

job75

XLDnaute Barbatruc
Vos réponses montrent que vous ne comprenez pas ce qu'est un critère :rolleyes:

Et vous n'avez pas testé mon fichier (1) du post #20, il n'y a pas de critère, c'est ce que vous voulez. !

Inversement si seulement quelques colonnes sont à supprimer utilisez ce fichier (2) avec :
VB:
Private Sub UserForm_Initialize()
Dim r As Range, i%
Set r = [A1].CurrentRegion.Rows(1)
With ListBox1
    If r.Columns.Count = 1 Then .AddItem r Else .List = Application.Transpose(r)
    For i = 0 To .ListCount - 1: .Selected(i) = True: Next
End With
End Sub
 

Pièces jointes

  • Choix des colonnes(2).xlsm
    23.8 KB · Affichages: 5
Dernière édition:

INIME-

XLDnaute Nouveau
J'ai modifié les macros UserForm_Initialize des 2 fichiers pour le cas où le tableau a une seule colonne.
Merci pour votre réactivité

Est ce que je peux séparer l'affichage du userform dans un onglet central ?
est ce que je peux rajouter des favoris de sélection ?

dès que je coche favoris 1, il sélectionne certains nombre d'en-têtes

Je vous remercie infiniment pour la template
 

yal

XLDnaute Occasionnel
Bonjour
Si j'ai bien compris :
nous avons une feuille avec 160 colonnes, des tâches à accomplir qui nécessitent certaines colonnes.
Je suppose que le nombre de taches est limité et répétitives.
Voici une première proposition qui prend le problème dans l'autre sens. Plutôt que de supprimer je transfère les colonnes utiles. La procédure se lance par un double clic dans la liste des tâches en feuille "selectCol".
C'est un premier jet à arranger si la piste vous semble intéressante.
 

Pièces jointes

  • base.xlsm
    656.8 KB · Affichages: 7

Discussions similaires

Réponses
9
Affichages
117
Réponses
10
Affichages
400

Statistiques des forums

Discussions
311 720
Messages
2 081 913
Membres
101 837
dernier inscrit
Ugo