Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Choix des colonnes à imprimer

8 réponses
Avatar
JulieH
Bonjour,

Un autre problème maintenant que je suis lancée.

J'ai en Feuil1 une sorte de base de données avec de multiples colonnes.
Je veux donner à l'utilisateur la possibilité de créer différentes
feuilles à partir de cette base :
- En sélectionnant les lignes à mettre dans ces nouvelles feuilles
(je sais faire maintenant).
- En sélectionnant les colonnes qu'il veut faire apparaître dans
ces nouvelles feuilles.

Mon idée :
- Faire apparaître un formulaire dans lequel s'afficherait la liste
des colonnes (titres en ligne 3) peut-être sous forme de cases à cocher.
- Donner la possibilité de choisir (cocher ?) les colonnes à faire
apparaître. Cliquez sur un bouton du formulaire.
- Copier dans une feuille masquée les colonnes sélectionnées.

Quelqu'un a-t-il déjà fait quelque chose comme cela ? Je suis intéressée
par vos idées.

Julie

8 réponses

Avatar
Modeste
Bonsour® JulieH avec ferveur ;o))) vous nous disiez :

Bonjour,

Un autre problème maintenant que je suis lancée.

J'ai en Feuil1 une sorte de base de données avec de multiples
colonnes. Je veux donner à l'utilisateur la possibilité de créer
différentes feuilles à partir de cette base :
- En sélectionnant les lignes à mettre dans ces nouvelles feuilles
(je sais faire maintenant).
- En sélectionnant les colonnes qu'il veut faire apparaître dans
ces nouvelles feuilles.

Mon idée :
- Faire apparaître un formulaire dans lequel s'afficherait la
liste des colonnes (titres en ligne 3) peut-être sous forme de cases
à cocher. - Donner la possibilité de choisir (cocher ?) les
colonnes à faire apparaître. Cliquez sur un bouton du formulaire.
- Copier dans une feuille masquée les colonnes sélectionnées.

Quelqu'un a-t-il déjà fait quelque chose comme cela ? Je suis
intéressée par vos idées.

Julie



voir l'utilisation du gestionnaire de vues

Menu Affichage > Affichages Personnalisés...
masquer les colonnes selon les besoins
nommer cette vue
Ajouter

on peut créer ainsi plusieures visions d'une même page
vision qu'il suffit alors de rappeler par le nom attribué

voir l'aide F1 :
Créer ou supprimer des affichages personnalisés
Afficher une vue personnalisée
Imprimer une vue personnalisée


--
--
@+
;o)))
Avatar
JulieH
Bonjour et merci pour ta réponse,

J'ai oublié de dire que je voulais le réaliser en VBA.

Julie

Modeste a écrit :
Bonsour® JulieH avec ferveur ;o))) vous nous disiez :

Bonjour,

Un autre problème maintenant que je suis lancée.

J'ai en Feuil1 une sorte de base de données avec de multiples
colonnes. Je veux donner à l'utilisateur la possibilité de créer
différentes feuilles à partir de cette base :
- En sélectionnant les lignes à mettre dans ces nouvelles feuilles
(je sais faire maintenant).
- En sélectionnant les colonnes qu'il veut faire apparaître dans
ces nouvelles feuilles.

Mon idée :
- Faire apparaître un formulaire dans lequel s'afficherait la
liste des colonnes (titres en ligne 3) peut-être sous forme de cases
à cocher. - Donner la possibilité de choisir (cocher ?) les
colonnes à faire apparaître. Cliquez sur un bouton du formulaire.
- Copier dans une feuille masquée les colonnes sélectionnées.

Quelqu'un a-t-il déjà fait quelque chose comme cela ? Je suis
intéressée par vos idées.

Julie



voir l'utilisation du gestionnaire de vues

Menu Affichage > Affichages Personnalisés...
masquer les colonnes selon les besoins
nommer cette vue
Ajouter

on peut créer ainsi plusieures visions d'une même page
vision qu'il suffit alors de rappeler par le nom attribué

voir l'aide F1 :
Créer ou supprimer des affichages personnalisés
Afficher une vue personnalisée
Imprimer une vue personnalisée




Avatar
Modeste
Bonsour® JulieH avec ferveur ;o))) vous nous disiez :

J'ai oublié de dire que je voulais le réaliser en VBA.



;o)))
d'abord creer les vues...(elles seront crées une fois pour toutes, VBA n'est pas nécessaire)
ensuite utiliser l'enregistreur de macro pour manipuler les vues

elaguer le code, creer des UserForm avecdes boutons ou listes déroulantes pour activer les codes précédents

--
@+
;o)))
Avatar
FFO
Salut Julie

Pourquoi utiliser un Formulaire ???
Je te propose plutôt de mettre ce bout de code dans le VBA de la feuille des
colonnes à recopier en Feuil2 :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As
Boolean)
If Target.Row = 1 Then
If Sheets("Feuil2").Range("IV1").End(xlToLeft).Address = Range("A1").Address
And Sheets("Feuil2").Range("A1") = "" Then
Target.Columns.Copy Sheets("Feuil2").Range("IV1").End(xlToLeft)
Else
Target.Columns.Copy Sheets("Feuil2").Range("IV1").End(xlToLeft).Offset(0, 1)
End If
End If
End Sub

Attention de mettre ces 2 lignes :
If Sheets("Feuil2").Range("IV1").End(xlToLeft).Address = Range("A1").Address
And Sheets("Feuil2").Range("A1") = "" Then
en une seule bout à bout

Puis il ne reste plus qu'à double cliquer sur la 1° cellule de la colonne à
recopier
En feuil2 tes colonnes choisies le seront

Il est impératif que toutes tes colonnes aient leur première cellule non
vide (présence d'une Entète par exemple)

Celà te convient-il ???

Dis moi !!!!
Avatar
JulieH
Bonsoir et merci pour ton idée,

C'est très intéressant et je n'avais pas pensé à cela. Malheureusement,
je ne peux pas utiliser cette technique car ma question concernait un
projet beaucoup plus large et la macro fera bien d'autres choses :
- De manière simplifiée, on peut imaginer un fichier "base de données"
avec des élèves et de nombreuses colonnes d'informations (classe,
téléphone, profession parents, mail, portable...) Ce fichier ne sera pas
accessible par l'utilisateur.
- Par contre, il aura accès à un fichier "Requêtes" pour générer des
listes d'élèves (par exemple ceux de la classe x). Il sélectionne sa
classe et la macro va chercher dans la base et récupérer uniquement les
élèves de la classe et les copie dans une feuille du fichier "Requêtes"
(je sais faire).
- C'est à moment que je souhaite utiliser "ma demande". Il ne voudra
pas toutes les colonnes et je veux lui donner la possibilité de choisir
celles qu'il veut utiliser.

Je ne sais pas si c'est plus clair ?

Julie

FFO a écrit :
Salut Julie

Pourquoi utiliser un Formulaire ???
Je te propose plutôt de mettre ce bout de code dans le VBA de la feuille des
colonnes à recopier en Feuil2 :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As
Boolean)
If Target.Row = 1 Then
If Sheets("Feuil2").Range("IV1").End(xlToLeft).Address = Range("A1").Address
And Sheets("Feuil2").Range("A1") = "" Then
Target.Columns.Copy Sheets("Feuil2").Range("IV1").End(xlToLeft)
Else
Target.Columns.Copy Sheets("Feuil2").Range("IV1").End(xlToLeft).Offset(0, 1)
End If
End If
End Sub

Attention de mettre ces 2 lignes :
If Sheets("Feuil2").Range("IV1").End(xlToLeft).Address = Range("A1").Address
And Sheets("Feuil2").Range("A1") = "" Then
en une seule bout à bout

Puis il ne reste plus qu'à double cliquer sur la 1° cellule de la colonne à
recopier
En feuil2 tes colonnes choisies le seront

Il est impératif que toutes tes colonnes aient leur première cellule non
vide (présence d'une Entète par exemple)

Celà te convient-il ???

Dis moi !!!!




Avatar
FFO
Rebonjour Julie

Je propose donc de saisir dans une boîte de dialogue les lettres des
colonnes à recopier séparées d'une virgule avec ce code (Recopie en Feuil2):

Colonne = InputBox("Saisissez la lettre des colonnes séparée d'une virgule",
"Colonnes à recopier", "A,B,...")
On Error Resume Next
For i = 0 To UBound(Split(Colonne, ","))
If Sheets("Feuil2").Range("IV1").End(xlToLeft).Address = Range("A1").Address
And Sheets("Feuil2").Range("A1") = "" Then
Columns(Split(Colonne, ",")(i)).Copy
Sheets("Feuil2").Range("IV1").End(xlToLeft)
Else
Columns(Split(Colonne, ",")(i)).Copy
Sheets("Feuil2").Range("IV1").End(xlToLeft).Offset(0, 1)
End If
Next

Ces lignes sont à mettre bout à bout :

Colonne = InputBox("Saisissez la lettre des colonnes séparée d'une virgule",
"Colonnes à recopier", "A,B,...")

If Sheets("Feuil2").Range("IV1").End(xlToLeft).Address = Range("A1").Address
And Sheets("Feuil2").Range("A1") = "" Then


Celà te convient-il ???

Dis moi ???
Avatar
JulieH
Bonjour,

Je m'excuse pour ma réponse tardive mais j'étais absente du bureau
aujourd'hui.
La solution proposée fonctionne très bien et je suis vraiment épatée
par votre imagination et les solutions proposées. Même si j'envisageais
autre chose, je pense que je vais l'utiliser en attendant de trouver.

Merci beaucoup

Julie

FFO a écrit :
Rebonjour Julie

Je propose donc de saisir dans une boîte de dialogue les lettres des
colonnes à recopier séparées d'une virgule avec ce code (Recopie en Feuil2):

Colonne = InputBox("Saisissez la lettre des colonnes séparée d'une virgule",
"Colonnes à recopier", "A,B,...")
On Error Resume Next
For i = 0 To UBound(Split(Colonne, ","))
If Sheets("Feuil2").Range("IV1").End(xlToLeft).Address = Range("A1").Address
And Sheets("Feuil2").Range("A1") = "" Then
Columns(Split(Colonne, ",")(i)).Copy
Sheets("Feuil2").Range("IV1").End(xlToLeft)
Else
Columns(Split(Colonne, ",")(i)).Copy
Sheets("Feuil2").Range("IV1").End(xlToLeft).Offset(0, 1)
End If
Next

Ces lignes sont à mettre bout à bout :

Colonne = InputBox("Saisissez la lettre des colonnes séparée d'une virgule",
"Colonnes à recopier", "A,B,...")

If Sheets("Feuil2").Range("IV1").End(xlToLeft).Address = Range("A1").Address
And Sheets("Feuil2").Range("A1") = "" Then


Celà te convient-il ???

Dis moi ???



Avatar
FFO
Rebonjour Julie

J'ai étudié ta solution du formulaire
Je te propose dans cette optique ce code que tu mets dans le code d'un
bouton d'un formulaire :

Private Sub CommandButton1_Click()
For i = 1 To 26
If UserForm1("CheckBox" & i).Object.Value = "Vrai" Then
If Sheets("Feuil2").Range("IV1").End(xlToLeft).Address = Range("A1").Address
And Sheets("Feuil2").Range("A1") = "" Then
Sheets("Feuil1").Cells(1, i).EntireColumn.Copy
Sheets("Feuil2").Range("IV1").End(xlToLeft)
Else
Sheets("Feuil1").Cells(1, i).EntireColumn.Copy
Sheets("Feuil2").Range("IV1").End(xlToLeft).Offset(0, 1)
End If
End If
Next
End Sub

Tu mets 26 cases à cocher (26 lettres de l'alphabet) dans ce formulaire
avec en regard la lettre de chaque colonne (bien respecter le même indice de
chaque CheckBok avec celui de la colonne)
Puis tu mets cette ligne dans une macro :

UserForm1.Show

Tu actives la macro
Dans le formulaire tu coches les colonnes à recopier
Puis tu actives le Bouton de recopie

Tu dois obtenir les colonnes cochées de la Feuil1 dans la Feuil2

Sur ce lien un exemple :

http://www.cijoint.fr/cjlink.php?file=cj200810/cijECa9Jt5.xls


Fais des essais et dis moi !!!!