Boutons d'options et tri en VBA

Bonjour j'espère que vous allez bien !

Je voudrais utiliser des boutons d'option pour que je puisse sélectionner certaines informations pour les copier dans une autre feuille ( sorte de tri ).

J'ai pensé au principe suivant :

  • j'ai une feuille avec plusieurs colonnes dont une colonne catégories,
  • les boutons d'option sont les catégories : A, B, C,
  • si je choisi la catégorie A,
  • toute ligne qui a cette catégorie est sélectionnée,
  • puis copier dans une autre feuille avec les entêtes!
  • la nouvelle feuille sera nommé ensuite : A

Le but c'est de séparer les catégories dans des feuilles : feuille A ,Feuille B, Feuille C --> je sais pas si on peut utiliser uniquement un seul bouton qui fait le tri des catégories et la création des 3 feuilles en même temps!

j'espère que j'ai pu bien expliquer le principe, merci d'avance pour votre aide

Bon dimanche

Bonjour Peerl, bonjour le forum,

Seras-tu en mesures d'adapter le code à ton fichier ?!... Si non, pour me pas perdre de temps, envoie le fichier.

Salut peerl,

Donc :

- tu as un fichier de X lignes, Y colonnes dont une colonne :

* à part ? qui récapitule les types de catégories ?

* qui précise simplement la catégorie de chaque ligne ?

- tu veux créer autant de feuilles particulières que de catégories :

* mais en voulant choisir au coup par coup les catégories à trier ?

* tout en une fois ?

- dans l'onglet "Global" :

* les lignes seront mises à jour avec mise à jour dans les onglets correspondants ?

* d'autres nouvelles lignes viendront s'ajouter avec la même mise à jour ?

* mise à jour sur commande ?

Que de choses à savoir... et, surtout...

A+

Bonjour Peerl, bonjour le forum,

Seras-tu en mesures d'adapter le code à ton fichier ?!... Si non, pour me pas perdre de temps, envoie le fichier.

6exemple.xlsx (24.71 Ko)

J'ai essayé de créer un fichier exemple rapidement. j'espère que ça peut aider

Merci

Re,

Le code ci-dessous fait le job mais attention il commence par supprimer tous les onglets autres que l'onglet principal où se trouve ton tableau. Il te suffit de le modifier/adapter en définissant l'onglet source (ici = Feuil1) et le numéro de la colonne des catégories (ici = 1):

Sub Macro2()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim AO As Worksheet 'déclare la variable AO (Autre Onglet)
Dim TV As Variant 'déclare la variable TV(Tableau des Valeurs)
Dim CC As Integer 'déclare la variable CC (Colonne des Catégoeies)
Dim I As Integer 'déclare la variable I (Incrément)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
Dim OC As Worksheet 'déclare la variable OC (Onglet Copié)
Dim LI As Integer 'déclare la variable LI (LIgne)

Set OS = Worksheets("Feuil1") 'définit l'onglet source (à adapter à ton cas)
CC = 1 'définit la colonne des catégories CC (à adapter à ton cas)

'supprime tous les onglets du classeur en dehors de l'onglet source
Application.DisplayAlerts = False 'empêche les messages d'Excel
For Each AO In Worksheets 'boucle sur tous les onglets AO du classeur
If Not AO.Name = OS.Name Then AO.Delete 'si le nom de l'onglet n'est pas le nom de l'onglet source, supprime l'onglet de la boucle
Next AO 'prochain onglet de la boucle
Application.DisplayAlerts = True 'autorise les messages d'Excel

TV = OS.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs (en partant de la seconde)
    D(TV(I, CC)) = "" 'alimente le dictionnaire avec les données de la colonne des catégories CC
Next I 'prochaine ligne de la boucle
TMP = D.Keys 'récupère dans le tableau temporaire TMP la liste des éléments du dictionnaire D sans doublon
For J = 0 To UBound(TMP) 'boucle 1 : sur tous les éléments du tableau temporaire TMP (les catégories)
    Worksheets.Add after:=Sheets(Sheets.Count) 'ajourte un nouvel onglet vierge
    ActiveSheet.Name = TMP(J) 'renomme l'onglet avec la catégories TMP(J)
    Set OC = ActiveSheet 'définit l'onglet copié OC
    OC.Range("A1").Resize(1, UBound(TV, 2)) = Application.Index(TV, 1) 'renvoie les entêtes dans la cellule A1 redimensionnée de l'onglet OC
    LI = 2 'définit la ligne LI
    For I = 2 To UBound(TV, 1) 'boucle 1 : sur toutes les lignes I du tableau des valeurs (en partant de la seconde)
        'si la donnée en ligne I colonne CC de TV est égale à la catégorie TMP(J),
        'renvoie la ligne I de l'onglet source dans la cellule ligne LI colonne 1 redimensionnée de l'onglet OC
        If TV(I, CC) = TMP(J) Then OC.Cells(LI, 1).Resize(1, UBound(TV, 2)) = Application.Index(TV, I): LI = LI + 1
    Next I 'prochaine ligne de la boucle 2
Next J 'prochaine catégorie de la boucle 1
End Sub

Re,

Nos posts se sont croisés. Ton fichier adapté.

7peerl-ep-v01.xlsm (23.02 Ko)

Salut peerl,

Donc :

- tu as un fichier de X lignes, Y colonnes dont une colonne :

* qui précise simplement la catégorie de chaque ligne ?

- tu veux créer autant de feuilles particulières que de catégories :

* mais en voulant choisir au coup par coup les catégories à trier ?

* tout en une fois ?

les deux solutions peuvent répondre à mon besoin

- dans l'onglet "Global" :

* les lignes seront mises à jour avec mise à jour dans les onglets correspondants ?

* d'autres nouvelles lignes viendront s'ajouter avec la même mise à jour ?

* mise à jour sur commande ?

--> tu veux dire que les feuilles catégories créer seront mise à jour si de nouveaux données s'ajoutent à la feuille global? si oui, j'avoue j'y ai pas pensées ! ça peut éviter de refaire la procédure à chaque fois?!!

Que de choses à savoir... et, surtout...

A+

Re,

Nos posts se sont croisés. Ton fichier adapté.

Peerl_EP_v01.xlsm

Merci beaucoup pour ta réponse rapide!

mais j'ai cette erreur :

[*]Erreur 429

un composant ActiveX ne peut pas créer d'objet

qui pointe sur :

Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D

aujourd'hui je suis sur mac avec Excel version 16.16.18

Re,

C'est parce qu'il doit te manquer une référence dans VBA. Je ne sais pas laquelle c'est mais comme je n' en ai que 4 cochées je vais te donner la liste il il faudra que tu les coches aussi.

1. Ouvre VBE l'éditeur Visual Basic ([Alt]=[F11])

2. menu Outils / Références...

3. coche au moins les 4 références ci-dessous :

[b]• Visual Basic For Applications

• Microsoft Excel 14.0 Object Library

• Ole Automation

•Microsoft Office 14.0 Object Library[/b]

4. ferme VBE ([Alt]=[F11])

Ça devrait fonctionner...

re,

J'ai essayé mais ça fonctionne pas ... j'ai changé de version à plusieurs reprise mais en vain!!

Sinon j'ai essayé sur un windows et cette fois-ci j'ai une erreur :

Erreur 13: incompatibilité de type

sur la ligne :

For I = 2 To UBound(TV, 1) 'boucle 1 : sur toutes les lignes I du tableau des valeurs (en partant de la seconde)••

••ˇˇˇˇ

bonjour,

Merci Thauthème ça a fonctionné, fallait juste que je change le range en fonction de mon tableau officiel !

merci beaucoup

Rechercher des sujets similaires à "boutons options tri vba"