supprimer les lignes ne contenant pas la valeur des Texbox

murainesouspatate

XLDnaute Occasionnel
Bonjour à tous,

j'ai encore besoin d'un coup de pouce.

Dans une base de donnée pouvant contenir plus de 3000 lignes, je cherche a supprimer les lignes ne contenant pas la valeur de deux textbox sans passer par les filtres, afin de pouvoir les copier/coller dans un autre classeur.

ex:
Tetxbox1 je rentre une date et cela me permet de supprimer les lignes ayant une date différente colonne C.

Textbox2 je rentre un nom et cela me permet de supprimer les lignes ayant les 4 premier caractères différente colonne J.

Voir fichier joint

Par la suite j'ai une macro qui fonctionne me permet de remplir un compte rendu de laboratoire.
Pour l'instant je bute la dessus et ne vois pas la solution.

Cordialement.
 

Pièces jointes

  • RESULTATS.xlsm
    22.9 KB · Affichages: 78

Papou-net

XLDnaute Barbatruc
Re : supprimer les lignes ne contenant pas la valeur des Texbox

Bonsoir murainesouspatate (ouf, t'as plus trouvé plus court comme pseudo ?),

Pas sûr d'avoir bien compris la logique que tu décris, mais voici quand-même une ébauche de solution.

Dans le doute, je me suis contenté de sélectionner la plage de cellules à supprimer pour vérification du résultat recherché. Rien de plus facile que d'exploiter cette plage pour effectuer des opérations de couper-coller ultérieures.

A +

Cordialement.
 

Pièces jointes

  • Copie de RESULTATS.xlsm
    23.8 KB · Affichages: 73

Robert

XLDnaute Barbatruc
Repose en paix
Re : supprimer les lignes ne contenant pas la valeur des Texbox

Bonsoir le fil, bonsoir le forum,

je cherche a supprimer les lignes ne contenant pas la valeur de deux textbox sans passer par les filtres, afin de pouvoir les copier/coller dans un autre classeur.

Deux questions MSP...
• si tu supprimes comment vas-tu coller dans un autre classeur ?
• pourquoi sans passer par les filtres, cela n'empêche pas de supprimer ou de faire un copier/coller ?

Le code proposé par Papou-Net ne fait que sélectionner les cellules. D'ailleurs il te le précise car, comme moi, il a eu un doute quant à la finalité : Supprimer ou copier/coller...

Attendant ta réponse pour te proposer autre chose...
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re : supprimer les lignes ne contenant pas la valeur des Texbox

Bonsoir murainesouspatate , RE_Robert, Papou_Net, le Forum


Moi je crois avoir compris !!! Mais bon je suis un Belge expatrié LOL

@+Thierry
 

Pièces jointes

  • murainesouspatate _RESULTATS_V00.xls
    90.5 KB · Affichages: 54

Robert

XLDnaute Barbatruc
Repose en paix
Re : supprimer les lignes ne contenant pas la valeur des Texbox

Bonsoir le fil, bonsoir le forum,

Arf Thierry ! J'avais développée en utilisant des filtres... Par contre, je ne sais pas si ce code fonctionne sous Excel 2007. Car pour filtrer les dates je suis obligé d'inverser le jour et le mois sinon ça marche pas...
Nos résultats sont contraires car je ne supprime pas mais renvoie les lignes à supprimer dans l'onglet Recup. J'avoue encore ne pas avoir vraiment compris la demande de MSP.
Le code :
Code:
Private pl As Range 'déclare la variable pl (PLage)


Private Sub UserForm_Initialize()
Dim dl As Integer 'déclare la variable dl (Dernière Ligne)
With Sheets("RESULTATS") 'prend en compte l'onglet "RESULTATS"
    dl = .Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée dl de la colonne 1 (=A)
    Set pl = .Range("A2:A" & dl) 'définit la plage pl (colonne A)
End With 'fin de la prise en compte de l'onglet "RESULTATS"
End Sub


Private Sub CommandButton1_Click() 'bouton "VALIDER"
Dim j As Byte 'déclare la variable j (Jour)
Dim m As Byte 'déclare la variable m (Mois)
Dim a As Integer 'déclare la variable a (Année)
Dim c As String 'déclare la variable c (Critère)
Dim test As Boolean 'déclare la variable test

Sheets("Recup").Range("A1").CurrentRegion.Clear 'efface les anciennes données de l'onglet "Recup"
If Me.TextBox1.Value <> "" Then 'condition 1 : si la TextBox1 n'est pas vide
    j = Day(Me.TextBox1.Value) 'définit le jour j
    m = Month(Me.TextBox1.Value) 'définit le mois m
    a = Year(Me.TextBox1.Value) 'définit l'année a
    c = Format(m, "00") & "/" & Format(j, "00") & "/" & a 'définit le critère c (inverse le mois et le jour de la date de la TextBox1)
    With Sheets("RESULTATS") 'prend en compte l'onglet "RESULTATS"
        .Range("A1").AutoFilter 'active le filtre automatique
        .Range("A1").AutoFilter Field:=3, Criteria1:="<>" & c 'filtre la colonne C avec "différent de c" comme critère
        If Me.TextBox2.Value <> "" Then 'condition 2 : si la TextBox2 n'est pas vide
            'filtre la colonne J avec "ne commençant pas par" la valeur de la TextBox2 comme critère
            .Range("A1").AutoFilter Field:=10, Criteria1:="<>" & Me.TextBox2.Value & "*"
            test = True 'définit la variable test
        End If 'fin de la condition 2
        'copy les lignes visibles dans A1 de l'onglet "Recup"
        pl.SpecialCells(xlCellTypeVisible).EntireRow.Copy Sheets("Recup").Range("A1")
        .Range("A1").AutoFilter 'désactive le filtre automatique
    End With 'fin de la prise en compte de l'onglet "RESULTATS"
End If 'fin de la condition 1
If test = True Then Unload Me: Exit Sub 'si la variable test est vraie, sort de la procédure
If Me.TextBox2.Value <> "" Then 'condition 3 : si la textbox2 n'est pas vide
    With Sheets("RESULTATS") 'prend en compte l'onglet "RESULTATS"
        .Range("A1").AutoFilter 'active le filtre automatique
        'filtre la colonne J avec "ne commençant pas par" la valeur de la TextBox2 comme critère
        .Range("A1").AutoFilter Field:=10, Criteria1:="<>" & Me.TextBox2.Value & "*"
        'copy les lignes visibles dans A1 de l'onglet "Recup"
        pl.SpecialCells(xlCellTypeVisible).EntireRow.Copy Sheets("Recup").Range("A1")
        .Range("A1").AutoFilter 'désactive le filtre automatique
    End With 'fin de la prise en compte de l'onglet "RESULTATS"
End If 'fin de la condition 3
Unload Me 'vide et ferme l'UserForm
End Sub
Le fichier :
 

Pièces jointes

  • MSP_v01.xlsm
    31.2 KB · Affichages: 52

murainesouspatate

XLDnaute Occasionnel
Re : supprimer les lignes ne contenant pas la valeur des Texbox

SUPER ? Merci beaucoup Thierry, c'est pil poil ce qui me convient !

comment faire si je veux passer de 4 à 11 caractères de la textbox 2 ?, je ne connais pas la bonne syntaxe pour le faire.

Encore merci pour ta rapidité !

Cordialement.
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re : supprimer les lignes ne contenant pas la valeur des Texbox

Bonjour MuraineSousPatate (sacré Pseudo !), Bonjour Robert, Papou8Net, Le Forum

Pour Robert oui ca fonctionne bien sous 2007, et oui c'est tout à fait l'inverse de ce que veut MSP ! (LoL)

Pour MSP, il y a DEUX Chose à Faire :
1) Dans les Propriétés de la TextBox2 "MaxLengh" changer de 4 à ce que tu souhaite
2) Dans le Code du UserForm :
Ligne 27 => If Len(Me.TextBox2) < 4 Then 'changer 4 Idem
Ligne 58 => If Left(Cell.Offset(0, 7), 4) = Me.TextBox2 Then 'changer 4 Idem
LIgne 84 => If Left(.Cells(x, 10), 4) <> Me.TextBox2 Then 'changer 4 Idem


Si tu dois changer souvent j'ai mis ce paramètre en Constante dans la V01 ci-jointe

Bon Dimanche
@+Thierry
 

Pièces jointes

  • murainesouspatate _RESULTATS_V01.xls
    93.5 KB · Affichages: 44

murainesouspatate

XLDnaute Occasionnel
Re : supprimer les lignes ne contenant pas la valeur des Texbox

Hé bien encore merci de ta réactivité,
je vois qu'il me manque encore pas mal de formation en VBA et je remercie par la même occasion toutes les personnes qui participent aux forums excellente solidarité .

j'ai du mal a trouver une formation sur Lempdes en cours du soir, si quelqu’un connait des stages sur la région de Clermont-Ferrand , je suis preneur.

à très bientôt sur le forum !

Cordialement .
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re : supprimer les lignes ne contenant pas la valeur des Texbox

Bonjour Laetitia90, Re MSP, le Fil

Oui tout à fait d'accord avec toi Leatitia, bien plus ergonomique et certaimenet plus rapide aussi :rolleyes:

Moi je n'ai fait qu'appliquer "à la lettre" la demande de MSP juste en me permettant d'ajouter des contrôles d'intégrité, car le "Client" est Roi LoL

Bon Dimanche
@+Thierry
 

Discussions similaires

Réponses
26
Affichages
986

Statistiques des forums

Discussions
312 497
Messages
2 088 994
Membres
104 000
dernier inscrit
dinelcia