XL 2016 VBA Tri de données

Serge6926

XLDnaute Nouveau
Bonjour à tous !

J'aurais besoin de votre aide concernant un de mes projets VBA en cours! Car après avoir fouillé une grande partie du net, je ne trouve pas tout à fait ce que je souhaite faire !

Le but de ce fichier est de faire du tri de donnée.
Il y a deux macro dans le fichier, la première "Macro1" qui est rattaché au bouton "traitement texte", tri converti les caractères spéciaux en lettre normale, celle-ci fonctionne très bien !

La deuxième, "Macro2" qui est rattaché au bouton "Veirf Postes" est plus complexe : le but est de supprimer des lignes en fonctions de critères. Le critère ici étant des mots qui seraient présent dans la cellule. Ma problématique étant que j'ai une liste de plusieurs mots que je voudrais définir comme critère pour la suppression de la ligne.
J'ai essayé une première méthode en faisant plusieurs ligne de code manuellement de la manière suivante :

VB:
Dim I As Integer
For I = 30000 To 1 Step -1
If Not Cells(I, 1).Resize(1, 6).Find("gestionnaire") Is Nothing Then Rows(I).Delete
    If Not Cells(I, 1).Resize(1, 6).Find("secteur") Is Nothing Then Rows(I).Delete
    If Not Cells(I, 1).Resize(1, 6).Find("SIRH") Is Nothing Then Rows(I).Delete
    If Not Cells(I, 1).Resize(1, 6).Find("S2I") Is Nothing Then Rows(I).Delete
    Etc...

Le code fonctionne, mais je cherche à faire deux choses par rapport à cela si possible :

- La première, qui est la plus importante : à connecter ma macro à la feuille suivante pour que tout soit automatisé ! Je m'explique : au lieu de devoir rentrer les critères un par un à la mano dans le code, ce qui fait certes passer le temps mais qui n'est pas très efficace 😅, je voudrais que la macro supprime les lignes en fonction des critères que je rentre directement dans la feuille "SETTINGS", en colonne B.
En clair, j'aimerais que la macro fasse ceci : si dans la colonne D de la feuille "TRI LIGNE & SYMBOLE" (appelons cette case A), on trouve un des mots de la colonne B de la feuille SETTINGS (appelons cette case B), on supprime la ligne, sinon on passe à la suivante.
Et la petite subtilité, ce que à aucun moment A=B ^^, je cherche donc à vérifier si A contient B.

- La deuxième : A simplifier le code, car une fois que je lance la macro, excel plante et réfléchi longtemps avant de donner résultat ^^, je pense donc qu'il doit avoir une méthode plus efficace que checker 30000 lignes fois le nombre de critères ^^.

Je pense avoir été assez complet mais je reste bien sûre disponible si vous avez besoins d'infos supplémentaires !!

Et mon fichier ci-joint qui vous donnera plus d'infos !

Je vous remercie d'avance pour votre aide et vos conseils !!
 

Pièces jointes

  • 2022-03-21_Traitement de Texte & Postes (V1).xlsm
    32.4 KB · Affichages: 9

Serge6926

XLDnaute Nouveau
Bonjour Phil69970 !

Je te remercie pour ton retour rapide !

Oui en effet pas très clair, pour être plus précis :

Dans ma colonne B feuille "SETTINGS", j'ai par exemple le mot "gestionnaire".
Sauf que dans ma colonne D feuille "TRI LIGNE & SYMBOLE", le cas où je n'ai que le mot "gestionnaire" est loin d'être majoritaire, la plus part du temps, je vais avoir par contre :
  1. Gestionnaire responsable
  2. Directeur gestionnaire
  3. gestionnaire de bases de donnée
  4. gestionnaire de comptes
  5. etc ....
Et bien le but de la manoeuvre est que l'ensemble de ces lignes soit supprimé ! Donc que à chaque fois que la cellule "contient" le mot "gestionnaire", elle soit supprimé. Et que ce soit appliqué à l'ensemble des critères que je définis en colonne B feuille "SETTINGS".
D'où le "à aucun moment A=B" car le cas où je vais avoir le mot exact "gestionnaire" n'existe quasiment pas, il faut le trouver dans un groupe de mot.

J'espère que c'est plus clair pour toi mais je suis d'accord que ce que j'essaye de faire est pas hyper simple 😅
 

Serge6926

XLDnaute Nouveau
Bonjour Phil69970 !

J'ai pu tester ton fichier, il est top !!! C'est exactement ce que je voulais faire !! 🤩 Merci beaucoup 👍

Et oui pour les données en 807 et 829, ça a du s'échapper en bas de page 😅

Je crois que j'arrive à comprendre ce que tu as fait niveau code VBA, j'ai cependant une question afin d'optimiser encore une chose, car je vois pas forcement comment intégrer ça 😅

Pour faire simple, ce que j'aimerais faire en plus, une fois la Macro1 et Macro2 lancé :

( Sachant que j'ai juste modifié une chose dans le fichier, au niveau de la colonne F, Feuille "Tri Ligne et Symbole" (Feuil1), intitulé "Location", on a maintenant des "Lyon" et des "Marseille").

- Je souhaiterais que, chaque ligne ayant "Lyon", en colonne F, soit "coupé" et "coller" dans la feuille "TRI" (Feuil3), en démarrant de la ligne 2. Donc si Lyon en F : on copie la ligne, on la supprime de la feuil1, puis on la colle dans la feuil2, en partant de la ligne 2.

J'avais dans l'idée de reprendre ma macro initial et de la modifier comme ceci :

VB:
Sub Macro3()
Dim I As Integer
For I = 30000 To 1 Step -1
If Not Cells(I, 1).Resize(1, 6).Find("Lyon") Is Nothing Then Rows(I).Cut Worksheets("Feuil3").Range("A2")
Next I
End Sub

Mais ça ne marche pas super bien 😅 (pour pas dire pas du tout).

Une idée ?

Je te remercie d'avance !!

PS : Et non mais pas très loin ! C'est de l'autre côté de Lyon, vers Charbonnière/Marcy l'étoile ! T'es du coin aussi ?
 

Pièces jointes

  • 2022-03-21_Traitement de Texte & Postes V3.xlsm
    34.2 KB · Affichages: 7

Discussions similaires

Réponses
5
Affichages
203

Statistiques des forums

Discussions
311 723
Messages
2 081 934
Membres
101 844
dernier inscrit
pktla