Tri base de données et suppression de ligne

Bonjour à tous,

Je suis un utilisateur "basic" d'Excel et je ne maitrise malheuresement pas le VBA.

Je suis face à un probléme de traitement d'une base de donnée.

Je reçois un fichier excel de plusieurs milliers de ligne contenant des valeurs dans 8 catégories (colonnes).

Afin de traiter efficacement ces données, il faut extraire les lignes dont les valeurs excédent les tolérances (fourchette mini et maxi).

Je voudrai automatiser ce traitement par une macro VBA qui serait comme suit :

1- Ouverture du classeur contenant la macro, ouverture du classeur contenant les données (plusieurs milliers de ligne (variable)),

2- Démarrage de la macro (Alt + F8) sur le classeur des données

3- Ouvrir une boite de dialogue demandant les valeurs mini et maxi pour chacune des 8 catégories

4- Dupliquer la feuille 1 en feuille 2, et effectuer le travail sur la feuille 2 pour laisser la feuille 1 intact

5- Pour chacune des lignes à partir de la ligne 8, vérifier que les valeurs des 8 catégoriers sont bien comprises entre les valeurs mini et maxi :

- Si une ou plusieurs valeurs dépassent les seuils, remplissage la ou les valeurs concernées en rouge

- Si aucune valeur ne dépasse les seuils alors supprimer la ligne

Je joins un fichier type dont la feuille 1 est la base de donnée à traiter et la feuille 2 le résultat attendu.

Je vous souhaite d'excellentes fêtes de fin d'année !

Pourquoi ne pas utiliser les filtres avancés avec des MFC?

(c'est mieux avec une pj)

Salut Alex,

Salut Rrradassse,

une solution VBA.

  • d'abord ouvrir le fichier à traiter en postulant que les données se trouvent dans la feuille 1 et commençant, comme dans ton fichier-exemple, en ligne 7 (en-têtes) ;
  • ouvrir 'Extraction.xlsm' qui détecte le fichier à traiter, pompe les données en feuille 'Origine' et le referme ;
  • compléter les valeurs MIN-MAX ;
  • double-clic pour traitement ;
    For x = 8 To UBound(tTab, 1)
        iOK = 0
        For y = 2 To UBound(tTab, 2)
            If CInt(tTab(x, y)) > CInt(tTab(2, y)) Or CInt(tTab(x, y)) < CInt(tTab(3, y)) Then
                iOK = 1
                Exit For
            End If
        Next
        If iOK = 0 Then tTab(x, 1) = ""
    Next

- affichage en feuille 'Extraction' avec MFC.

Merci à MFerrand pour cette syntaxe trouvée dans un sujet de 2017.

            With .Range(sCol & "2:" & sCol & iRow).FormatConditions
                With .Add(xlExpression, , "=OU(" & sCol & "2>Origine!$" & sCol & "$2;" & sCol & "2<Origine!$" & sCol & "$3)")
                    .Interior.ColorIndex = 3
                End With
            End With

A+

23extraction.xlsm (27.11 Ko)

Bonjour Rrradassse,

Merci pour ta réponse.

Cette solution via les MFC est effectuvement un moyen "facile" obtenir le résultat escompté.

C'est d'ailleurs par ce biais que j'ai fait le fichier test pour ce post.

Je suis un utilisateur basic d'excel, et certain de mes collégues sont encore moins doués que moi ! De ce fait il sera difficile de leur faire faire toute la manipi$ulation. C'est en ce sens que je voulais passé par une macro.

Je te remercie encore !

Passe un bon réveillon et une excellente année 2020 !

Bonjour curulis57,

Merci pour ton post.

Ton fichier semble pouvoir me convenir, mais j'ai un bug sur la ligne 40 lorsque j'essaye de l'exploiter...

J'ouvre mon fichier de données en premier, j'ouvre ensuite le fichier extraction.xlsm, je renseigne toutes les valeurs maxi et mini, je double clique sur une cellule quelconque de la feuille et la macro plante...

Merci de ton aide !

Passe un bon réveillon et excellente année 2020 !

bug

Salut Alex,

Salut Rrradassse,

tu penses bien que j'ai essayé plusieurs fois avant de te l'envoyer : pas de souci!

Comment t'aider ? A part en recevant ton fichier à traiter pour refaire les manip' de mon côté...

A+

Bonjour Curulis57,

Le fichier semble bien fonctionner sur mon ordinateur "travail" avec Excel 2010 contrairement à mon ordinateur perso avec Excel 2007.

Voici le fichier de travail original.

Comme tu pourras le constater la premier ligne du tableau à traiter est en A18 et s’étend jusqu'à la colonne T (avec des colonnes vides !). Les colonnes vides peuvent être traitées comme les autres colonnes où on indique la valeur 0.

Peut-on placer le tableau des MAX et MIN sur les lignes 14/15/16 comme inscrit en jaune sur le nouveau fichier ? Cela permet de ne pas effacer l'entête du fichier.

Enfin le nom de l'onglet à traiter est variable, mais il s'agit toujours de la feuille n°1 du classeur.

Merci encore de ton aide.

Alex

9test.xlsm (378.69 Ko)

Salut Alex,

déso, je t'avais perdu de vue...

Teste ceci et dis-moi ce que tu souhaites : plus facile de suivre des instructions claires que d'en inventer!

Questions :

  • ta cellule [A18] "PK" est-elle toujours ainsi nommée et sur la même ligne ?
  • renseigne-moi quoi faire avec les colonnes vides (pas tout compris) et celles contenant des lettres (V1, C7).

A+

8extraction.xlsm (21.53 Ko)

Bonjour Curulis57,

Pour te répondre, oui le tableau débutera toujours en [A18] et se nomme toujours "PK".

Pour les colonnes "vide" (D, F, H, J, L, O, P, Q, S), elles resteront vides et de ce fait il n'y a aucune vérification des valeurs à faire dedans.

En testant ton dernier fichier sur mon PC de travail, la macro fonctionne sans bug. En revanche, alors que j'indique dans le tableau mini/maxi des valeurs, il me semble que la macro n'en tient pas compte et colore tous les valeurs en rouge (comme si elles étaient inférieur à la valeur mini, ou supérieur à la valeur maxi), voir capture.jpg où seules les valeur 0 ne sont pas en rouge ?!

A l'inverse, lorsque je saisie les valeurs telles que dans capture2.jpg, l'extraction me donne aucun résultat alors qu'il y a bien des lignes où une des valeurs dépasse les tolérances !

J'ai l'impression que la macro prend fait les test de comparaison mais avec de mauvaise valeur mini maxi...

Les valeurs de la colonne ECARTEMENT doit être comparées au mini maxi ECARTEMENT,

les valeurs de la colonne FLECHE G.1 doit être comparées au mini maxi FLECHE G.1, etc...

Seule les valeurs plus petite que mini et plus grande que maxi, dans leur colonne respective, doivent être colorées en rouge. Et si il n'y a aucun dépassement des seuils dans la ligne alors suppression de la ligne, voir capture3.jpg réalisé avec les MFC (les lignes 43 à 49, 51 à 58 peuvent être supprimées car intégralement dans les tolérances).

Si tu le désires je peux te donner mon numéro de portable en MP afin d'en discuter de vive voix...

Merci encore de ton aide.

Alex

capture capture2 capture3

Salut Alex,

j'avais oublié de modifier la formule...

"=OU(" & sCol & "2>Origine!$" & sCol & "$15;" & sCol & "2<Origine!$" & sCol & "$16)"

A+

8extraction.xlsm (25.59 Ko)

Bonjour Curulis57,

Un grand merci pour ton aide.

La macro de tri fonctionne parfaitement ! C'est génial !

Ca me donne envie de travailler mon VBA car sincèrement malgré mes petites notion, lorsque je vois ton code j'y pige rien du tout !

Merci de m'avoir dépanné

Alex

Rechercher des sujets similaires à "tri base donnees suppression ligne"