Tri des données Excel sous userforme
Bonjour
dans un fichier Excel , j'ai plusieurs onglets , et chaque onglet contient un Tableau avec plusieurs colonnes ....
je veux faire un Userform , qui me donne le choix de l'onglet ( ListBox1) en premier et après :
- le choix de la 1ere colonne à trier par (ComboBox1) avec un choix d'ordre : croissant (OptionButton1) au décroissant (OptionButton2)
- Puis la 2éme colonne(ComboBox2) avec un choix d'ordre : croissant (OptionButton3) au décroissant (OptionButton4)
- et en fin la 3éme colonne(ComboBox3) , avec un choix d'ordre : croissant (OptionButton5) au décroissant (OptionButton6)
et après, j'ai un bouton Trier, quand je vais cliquer la dessous : Le trier se fait ( en arrière plan avec un msgbox " Le Trie est fait"). , après si un autre Trie à faire sur d'autres onglets , je peux refaire l'opération ....ainsi de suite
Et j'ai un autre bouton : Générer mon fichier final : qui copie les onglets triés dans un nouveau fichier , et après je veux que le le fichier de base se ferme sans enregistrement.
merci pour votre aide.
Bonjour Ahmedhamed, bonjour le forum,
Deuxième post sans fichier exemple !... Il faut que tu comprennes que si on veut tester une solution il nous faut recréer ton environnement. c'est parfois plus long à faire que de trouver la solution...
C'est donc à toi de nous fournir un fichier exemple basé sur ton fichier original avec la même structure. Ou directement le fichier original s'il ne contient que des données anonymes. Ça nous simplifiera grandement la tâche et te permettra d'obtenir de l'aide beaucoup plus rapidement.
Ça donnerait en gros ça :
Private OT As Worksheet 'déclare la variable OT (Onglet de Travail)
Private TT As XlOrder 'déclare la variable TT (Type de Tri)
Private Sub UserForm_Initialize() 'à l'initialisation de l'userform
Dim O As Worksheet 'déclare la variable O (Onglet)
For Each O In Sheets 'boucle sur tous les onglets O du classeur
Me.ComboBox1.AddItem O.Name 'ajoute le nom de l'onglet O à la ComboBox1
Next O 'prochain onglet de la boucle
End Sub
Private Sub ComboBox1_Change() 'au changement dans la ComboBox1
Dim DC As Integer 'déclare la variable DC (Dernière Colonne)
Me.ComboBox2.Clear 'vide la ComboBox2
Set OT = Worksheets(Me.ComboBox1.Value) 'définit l'onglet de travail OT
DC = OT.Cells(1, Application.Columns.Count).End(xlToLeft).Column 'définit la dernière colonne éditée DC de la ligne 1 de l'onglet OT
Me.ComboBox2.List = Application.Transpose(OT.Range(OT.Cells(1, 1), OT.Cells(1, DC))) 'alimente la ComboBox2
End Sub
Private Sub OptionButton1_Click() 'au clic dans le bouton d'option 1
TT = xlAscending 'définit le type de tri
End Sub
Private Sub OptionButton2_Click() 'au clic dans le bouton d'option 1
TT = xlDescending 'définit le type de tri
End Sub
Private Sub CommandButton1_Click() 'bouton "OK"
If Me.ComboBox1.Value = "" Then 'condition : si la combobox1 est vide
MsgBox "Vous devez choisir un onglet !" 'message
Me.ComboBox1.SetFocus 'place le curseur dans la ComboBox1
Exit Sub 'sort de la procédure
End If 'fin de la condition
If Me.ComboBox2.Value = "" Then 'condition : si la combobox2 est vide
MsgBox "Vous devez choisir une colonne !" 'message
Me.ComboBox2.SetFocus 'place le curseur dans la ComboBox2
Exit Sub 'sort de la procédure
End If 'fin de la condition
If CInt(Me.OptionButton1.Value) * CInt(Me.OptionButton1.Value) = 0 Then 'condition : si aucun bouton d'option n'est coché
MsgBox "Vous devez choisir un type de tri !" 'message
Me.OptionButton1.SetFocus 'place le curseur dans le bouton d'option 1
Exit Sub 'sort de la procédure
End If 'fin de la condition
OT.Range("A1").CurrentRegion.Sort OT.Cells(1, Me.ComboBox2.ListIndex + 1), TT, Header:=xlYes 'trie le tableau de l'onglet OT par rapport à la colonne de la ComboBox2 par ordre de type TT
Unload Me 'vide et ferme l'UserForm
End Sub
Private Sub CommandButton2_Click() 'bouton "Annuler"
Unload Me 'vide et ferme l'UserForm
End SubBonjour ,
je reviens vers vous car je suis vraiment bloqué
mercii
Re,
Les photos ne servent à rien (de même que les mails perso). Si tu te décides à envoyer le fichier je me ferai un plaisir de t'aider.
Bonjour ,
J'ai mis en pièce joint la BDD de base et le fichier qui contient les Userform
Tu trouves mes problèmes en bas.
l'objectif , et à partir d'une BDD Excel , on génère un nouveau fichier Excel qui contient les onglets et le colonnes souhaités ( avec un Tri et suppression des doublons ) et après on les copier dans un fichier Word vierge.
Merci de m'aider à résoudre ces problèmes ( car je suis vraiment bloqué )
Mes problèmes :
Userform : UVW
- Quand j'importe la BDD , l Userform devient en arrière plan.
Userform : SelectionDesonglets
- Bouton supprimer :
- Quand je choisi l'item à supprimer dans la listbox2, il ne retourne pas à sa première place dans la listbox1
- Bouton Confirmer
- Quand je clique sur le bouton confirmer : je veux d'ouvrir un nouveau classeur vierge et de coller les onglets sélectionnée.
Userform : SelectionDescolonnes
Je veux afficher dans la LISTBOX2 tous les onglets en 1er colonne , avec ces colonnes en 2éme colonne.
- Bouton Ajouter :
- je veux d'ajouter les noms d'onglets ( sélectionnées en Listbox3) en première colonne de la listbox2 et les nom de colonnes sélectionnées ( dans la listbox1) sur chaque onglet dans le 2eme colonne de la Listbox2
- Bouton supprimer :
- je veux quand je supprime un colonne , il revient à sa place initial dans la LISTBOX1 , et quand il ne reste aucun colonne d'un onglet dans la LISTBOX2 , le nom d'onglet revient à sa place initial dans la LISTBOX3.
- Bouton confirmer la sélection :
- je veux que la Listbox2 = la Listbox1 de l'Userform UVW
- Garder juste les colonnes sélectionnées sur le nouveau classeur crée dans l'étape de choix d'onglets.
Userform : FairunTri
afficher les onglets du nouveau classeur dans ComboBox1
afficher les colonnes du nouveau classeur dans ComboBox2 (premier Tri ) , ComboBox3 (2éme Tri ) , ComboBox4 (3éme Tri )
- Bouton Trier :
- Faire un Tri sur le nouveau classeur en respectant les niveaux de tri ((premier Tri ) , (2éme Tri ) , (3éme Tri ) ) et l'ordre de tri ( croissant ou décroissant ) et un Msgbox dit que le tri est fait et après on peut faire un nouveau Tri su un nouveau onglet.
- Bouton terminer : afficher l' Userform UVW
Userform : SupprimerDoublons
afficher les onglets du nouveau classeur dans ComboBox1.
afficher les colonnes du nouveau classeur dans ComboBox2.
- Bouton supprimer les doublons:
- je veux supprimer les doublons dans un chaque colonne sélectionnée et un Msgbox dit que la suppression est faite et après on peut faire une nouvelle suppression sur un nouveau onglet/colonne
- Bouton Terminer : afficher l' Userform UVW
Userform : UVW
- Bouton "Générer la nouvelle BDD "
- je veux d'enregistrer le nouveau classeur dans le même Path du fichier de base.
- bouton : Générer le rapport Word
- je veux copier les tableaux des onglets du nouveau classeur dans un document word vierge e les noms des onglets représenteront les parties ( Ex : 1.nom 1er onglet , 2. nom 2eme onglet.....)
- Il faudra positionner les largeurs de colonne au minima de la longueur du texte contenu dans la colonne. Si le nombre de colonnes sélectionné est trop grand où le contenu des données trop importantes, il faudra choisir par onglet le mode paysage ou portrait. En premier lieu on affichera toutes les colonnes de mode portrait puis les colonnes de mode paysage. Le l’ordre d’affichage pour chaque mode sera celui de l’affichage des onglets dans le fichier Excel.
Merci beaucoup,
salut Tauthéme ,
as-tu peux résoudre l'un des problèmes en haut ?
Merci
Bonjour,
Pouvez-vous m'aider svp ? , merci
Bonjour Ahmedhamed, bonjour le forum,
Je n'ai pas du tout aimé ton harcèlement (sans compter les mails persos) !... Nous sommes des bénévoles et pas des personnes à ton service. Comme je me suis engagé vis à vis de toi, je suis allé jusqu'au bout mais sache que je n'y reviendrai pas. Je t'ai mis désormais dans ma liste rouge des personnes à qui je ne répondrai plus...
En pièce jointe ton fichier modifié :
bonjour,
Je suis vraiment désolé , je savais pas que ça va vous déranger ,Je ne voulais rien dire de mal. Prières de m'excuser , je suis nouveau dans ce forum et je suis en cours d'apprentissage.
merci,
