Extraire lignes selon critères

bambi

XLDnaute Occasionnel
Bonjour à tous

Un petit cas à vous soumettre pour une Macro VBA

Dans le fichier joint, j'ai un tableau sur la feuille EntreeSortie
Ce tableau contient des données et des cases cochées
( les cases cochées sont évidemment amenées à changer)

Je désire extraire les lignes pour lesquelles des cases ont été cochées
MAIS tout en gardant la structure du tableau (en tête et titres)

J'ai mis une feuille avec le résultat souhaité dans le classeur joint (feuille ES Export)

Je ne sais pas si j'ai été très claire mais normalement, le classeur est explicite ;)

Merci d'avance

PS: Il y a dans ce tableau des cellules fusionnées mais si elles posent problème pour créer la Macro, elles peuvent être défusionnées sans que cela change le projet
 

Pièces jointes

  • Classeur1.xls
    32 KB · Affichages: 205
  • Classeur1.xls
    32 KB · Affichages: 221
  • Classeur1.xls
    32 KB · Affichages: 215
Solution
Re : Extraire lignes selon critères

J'ai finalement réussi à écrire une macro satisfaisante afin de ne pas garder les lignes des titres n'ayant aucune croix de cochée.
Je mets ma solution en pièce jointe si elle peut servir à quelqu'un.
Il y a surement mieux mais je me suis débrouillée avec mes modestes connaissances et la fonction recherche donc ça vaut ce que ça vaut :)

Par contre, j'ai dans ce fichier une macro Private Sub Worksheet_SelectionChange(ByVal Target As Range)

et je voudrais créer une autre macro (un module) qui commence par désactiver cette macro mais je ne connais pas le code VBA pour ça et je ne le trouve nul part sur le net.

Idem pour réactiver cette Private Sub au lancement d'une autre macro.

Si...

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : Extraire lignes selon critères

Bonjour bambi,

tout d'abord mettre cette formule en L3: =NB.SI(B3:K3;"x")et la tirer vers le bas du tableau jusqu'en L20 dans ton fichier joint
le code testera si la cellule L contient une valeur >0 et recopiera la ligne concernée

et mettre ce code :

Sub Bouton1_Clic()
Application.ScreenUpdating = False
derligne = Range("L65535").End(xlUp).Row
' copier l'entète
Rows("1:2").Select
Selection.Copy
Rows("24:24").Select
ActiveSheet.Paste
ligne = 26
For i = 3 To derligne
If Range("A" & i).Interior.ColorIndex <> xlNone Then
Range(Cells(i, 1), Cells(i, 11)).Select
Selection.Copy
Rows(ligne).Select
ActiveSheet.Paste
ligne = ligne + 1
End If
If Range("l" & i).Value > 0 Then
Range(Cells(i, 1), Cells(i, 11)).Select
Selection.Copy
Rows(ligne).Select
ActiveSheet.Paste
ligne = ligne + 1
End If
Next i
Range("A1").Select
Application.ScreenUpdating = True
End Sub


Bon après midi
à+
Philippe
.
 

Staple1600

XLDnaute Barbatruc
Re : Extraire lignes selon critères

Bonojur


Une autre façon similaire

Code:
Sub masquesanscroix()
Dim c As Range
For Each c In Union([B4:B10], [B12:B15], [B17:B20])
If Not Application.WorksheetFunction.CountIf(c.Resize(, 7), "x") > 0 Then
c.EntireRow.Hidden = True
End If
Next
End Sub
 

gilbert_RGI

XLDnaute Barbatruc
Re : Extraire lignes selon critères

Re,


Attention Gilbert, tu devrais d'abord effacer la feuille qui reçoit les résultats car si tu lances la macro plusieurs fois ça va foutre le B........

à+
Philippe
Merci philippe

donc voilà avec la rectif
 

Pièces jointes

  • transfert_rgi.zip
    16.1 KB · Affichages: 124
  • transfert_rgi.zip
    16.1 KB · Affichages: 125
  • transfert_rgi.zip
    16.1 KB · Affichages: 123

bambi

XLDnaute Occasionnel
Re : Extraire lignes selon critères

Bonojur


Une autre façon similaire

Code:
Sub masquesanscroix()
Dim c As Range
For Each c In Union([B4:B10], [B12:B15], [B17:B20])
If Not Application.WorksheetFunction.CountIf(c.Resize(, 7), "x") > 0 Then
c.EntireRow.Hidden = True
End If
Next
End Sub

Je remonte mon message. Staple, j'ai finalement conservée et adaptée ta macro à ma feuille
de cette manière (peu de modif, juste une sélection plus importante, susceptible de changer d'ailleurs)

Code:
Sub masquesanscroix()
Dim c As Range
Dim k As Long, y As Long, Tablo()
For Each c In Union([B4:B10], [B12:B15], [B17:B20], [B22:B25], [B27:B30], [B32:B35], [B37:B44], [B46:B49], [B51:B54], [B56:B63], [B27:B30], [B65:B71])
If Not Application.WorksheetFunction.CountIf(c.Resize(, 7), "x") > 0 Then
c.EntireRow.Hidden = True
End If
Next

End Sub

Mais dans ma demande initiale, j'aurais dû préciser de ne pas garder les titres ci aucune ligne n'a été conservée.
Car évidemment, je me retrouve avec des titres sans aucune données.

Je pensais cumuler les macros avec ma demande ici mais ça ne fonctionne pas
https://www.excel-downloads.com/threads/comparaison-couleur-puis-suppression.133531/
Je précise que ce n'est pas la même demande car la réponse de bqtr m'est nécessaire pour un autre projet.
Un peu compliqué, je m'en excuse.
En résumé, des fois j'utilise une macro et pas l'autre (d'où mes deux demandes sur le forum), et des fois (comme ici) j'aurais besoin de les cumuler.

J'espère que je suis claire.
Je remets mon fichier initiale avec ma demande un tout petit peu modifiée pour une meilleure compréhension.

Merci d'avance aux patients ;)
 

Pièces jointes

  • Classeur2.xls
    25.5 KB · Affichages: 129
  • Classeur2.xls
    25.5 KB · Affichages: 136
  • Classeur2.xls
    25.5 KB · Affichages: 142
Dernière édition:

bambi

XLDnaute Occasionnel
Re : Extraire lignes selon critères

Un petit up sur mon message.

Je remet un fichier sur lequel je détaille ma demande et la macro que j'ai conservée.
Il s'agit donc d'adapter cette macro pour obtenir le résultat souhaité.

Je m'y attache depuis ce matin avec des choses du genre

If Range("x:y").EntireRow.Hidden = True Then Rows(x-1).EntireRow.Hidden = True

et

If Range("x:y").EntireRow.Hidden = False Then Cells("x-1").Interior.ColorIndex = 8

mais ça ne donne pas grand chose une fois tout rassemblé :(

Merci de votre aide ;)
 

Pièces jointes

  • SupLignes.zip
    24.9 KB · Affichages: 71
  • SupLignes.zip
    24.9 KB · Affichages: 71
  • SupLignes.zip
    24.9 KB · Affichages: 78

bambi

XLDnaute Occasionnel
Re : Extraire lignes selon critères

If Range("x:y").EntireRow.Hidden = True Then Rows(x-1).EntireRow.Hidden = True

et

If Range("x:y").EntireRow.Hidden = False Then Cells("x-1").Interior.ColorIndex = 8

J'essaie d'avancer toute seule mais je bloque un peu :(

En fait, comment lui faire comprendre avec les commandes ci-dessus que la macro ne doit effectuer la commande "then" que si TOUTES les lignes sans exception dans le Range("x:y") sont masquées.

Car avec la commande ci-dessus, il suffit d'une seule ligne masquée dans le range, pour que le "then" soit éxécuté.

J'ai beau chercher sur tous les sites que je connais, je ne trouve pas comment définir cette condition en VBA.

Merci ;)
 

bambi

XLDnaute Occasionnel
Re : Extraire lignes selon critères

J'ai retravaillé mon tableau et rajouter des macro mais je bloque toujours sur cette histoire de tri qui me tient vraiment à cœur et me serait très utile.
Je vous le soumets dans sa dernière version.
Toutes les explications sont dans le fichier
Merci d'avance de vos suggestions ;)
 

Pièces jointes

  • TriTableau.zip
    33.9 KB · Affichages: 67
Dernière édition:

bambi

XLDnaute Occasionnel
Re : Extraire lignes selon critères

J'ai finalement réussi à écrire une macro satisfaisante afin de ne pas garder les lignes des titres n'ayant aucune croix de cochée.
Je mets ma solution en pièce jointe si elle peut servir à quelqu'un.
Il y a surement mieux mais je me suis débrouillée avec mes modestes connaissances et la fonction recherche donc ça vaut ce que ça vaut :)

Par contre, j'ai dans ce fichier une macro Private Sub Worksheet_SelectionChange(ByVal Target As Range)

et je voudrais créer une autre macro (un module) qui commence par désactiver cette macro mais je ne connais pas le code VBA pour ça et je ne le trouve nul part sur le net.

Idem pour réactiver cette Private Sub au lancement d'une autre macro.

Si quelqu'un peut me dire le code à écrire en début et fin de macro pour cela, je pourrais continuer seule pour le reste.

Merci d'avance ;)
 

Pièces jointes

  • TriTableau2.zip
    28.8 KB · Affichages: 96

Discussions similaires

Réponses
5
Affichages
341

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 493
Messages
2 088 956
Membres
103 990
dernier inscrit
lamiadebz