Recherche d'un mot avec affinage

Fermé
PhenlKs Messages postés 16 Date d'inscription lundi 25 avril 2016 Statut Membre Dernière intervention 6 mars 2018 - 10 juin 2016 à 15:20
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 - 13 juin 2016 à 11:44
Bonjour à tous,

Voilà en fait j'ai créé un UserForm où il y a 3 champs de sélection, une textbox et 2 listes déroulantes. Les 3 permettent de ramener des lignes d'un autre classeur en fonction de plusieurs critères.

Mon problème est le suivant : quand je met un mot dans la textbox et qu'ENSUITE je sélectionne un des éléments d'une liste, il me fait que le tri avec la liste et il perd le tri demandé par la textbox. Idem dans l'autre sens.

Voilà mon code, j'ai conscience que c'est une histoire de Call (je pense) mais je n'ai pas trouvé comment résoudre ça.. (ou j'ai mal cherché c'est possible)

Private Sub Secteur_DropButtonClick()
Dim i As Integer, k As Integer, a As Integer

Application.ScreenUpdating = False


With Secteur                        'Liste des secteurs
    .AddItem "BATTERIES"
    .AddItem "DIVERS"
    .AddItem "E/S"
    .AddItem "ELEC"
    .AddItem "FEU"
    .AddItem "GOTIS"
    .AddItem "GPU"
    .AddItem "HYDRO"
    .AddItem "MECA"
    .AddItem "MODIF"
    .AddItem "ROUES"
End With


i = 7                               'importer les lignes correspondant au secteurs de l'onglet Hist
For k = 2 To 2000

    If Secteur.Value Like Sheets("Hist").Range("K" & k).Value Then
            Sheets("Sélection").Range("A" & i & ":" & "N" & i).Value = Sheets("Hist").Range("A" & k & ":" & "N" & k).Value
            i = i + 1
    End If
    
Next

For a = 7 To 2000                   'vide les lignes qui ne correspondent pas au tracteur sélectionné

    If Not Secteur.Value Like Sheets("Sélection").Range("K" & a).Value Then
        Sheets("Sélection").Range("A" & a).Select
        Selection.EntireRow.ClearContents
    End If
    
Next
Range("A7:A2000").SpecialCells(xlCellTypeBlanks).EntireRow.Delete       'supprimer les cellules vides
End Sub

Private Sub Constat_AfterUpdate()
Dim i As Integer, k As Integer

Application.ScreenUpdating = False

If UCase(Constat.Text) Like "" Then         'si le champ est vide, ne rien afficher
    Exit Sub
End If


i = 7

Dim CelluleCible As Range, C As Range

For k = 2 To 2000                            'mettre la dernière ligne du tableur

    For Each C In Sheets("Hist").Range("I" & k & ":" & "J" & k) 'Pour toutes les cellules de la colonne concernée
    
        Set CelluleCible = C.Find(what:=UCase(Constat.Text), LookIn:=xlValues, LookAt:=xlPart)      'trouver le mot voulu dans les cellules
        
        If Not CelluleCible Is Nothing Then         'amener les lignes qui correspondent dans le classeur
            Sheets("Sélection").Range("A" & i & ":" & "N" & i).Value = Sheets("Hist").Range("A" & k & ":" & "N" & k).Value
            i = i + 1
        End If
        
    Next
    
Next
End Sub

Private Sub Tracteurs_DropButtonClick()
Dim a As Integer, k As Integer, i As Integer



With Tracteurs                  'Liste des tracteurs
    .AddItem "33901200003"
    .AddItem "3390996207"
    .AddItem "3390016286"
    .AddItem "3390036817"
    .AddItem "33900606840"
    .AddItem "33900706853"
End With

Call Constat_AfterUpdate            'appeler les deux autres programmes pour faire la selection par tracteurs après
Call Secteur_DropButtonClick
    
i = 7
If Constat.Text = "" And Secteur.Value = "" Then        'si les autres champs sont vides

    For k = 2 To 2000

        If Tracteurs.Value Like Sheets("Hist").Range("E" & k).Value Then        'importer toutes les lignes du tracteurs
            Sheets("Sélection").Range("A" & i & ":" & "N" & i).Value = Sheets("Hist").Range("A" & k & ":" & "N" & k).Value
            i = i + 1
        End If
    Next
End If
    
For a = 7 To 2000                   'vide les lignes qui ne correspondent pas au tracteur sélectionné

    If Not Tracteurs.Value Like Sheets("Sélection").Range("E" & a).Value Then
        Sheets("Sélection").Range("A" & a).Select
        Selection.EntireRow.ClearContents
    End If

Next
Range("A7:A2000").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub

Private Sub Valider_Click()
Unload UserForm1
End Sub


Et de manière générale en fait, chaque code fonctionne si il est seul mais dès que j'en combine deux tout se mélange et ça coince.

Et petite question subsidiaire, Est-ce que le passage de Excel 2010 à 2013 pourrait poser problème ?

Merci d'avance !

Cordialement, PhenlKs

1 réponse

f894009 Messages postés 17206 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 22 novembre 2024 1 710
11 juin 2016 à 14:51
Bonjour,

Le code c'est bien, mais un fichier avec l'UF et des donnees, meme bidon, c'est quand meme mieux pour chercher !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
12 juin 2016 à 00:34
Bonjour le fil, bonjour le forum,

Ail gris complètement F, mais comme je m'ennuyais particulièrement et pour la seconde fois avec Pheniks (qui semble être le comble de la feignasserie), je me suis tout farci et propose une solution où l'on peut utiliser un seul ou plusieurs contrôles de recherche et dans l'ordre que l'on veut. Code commenté.

https://www.cjoint.com/c/FFlwGOpWQ3R
0
PhenlKs Messages postés 16 Date d'inscription lundi 25 avril 2016 Statut Membre Dernière intervention 6 mars 2018
13 juin 2016 à 00:36
Alors déjà merci pour ton temps ThauTheme !

Sinon j'ai effectivement posté plusieurs fois pour ce code sans jamais montrer le fichier car j'ai signé une clause de confidentialité avec mon entreprise qui m'interdit la diffusion sur internet de leur travail.. du coup je ne peux poster que ce que j'ai fait moi-même.

Et pour mon problème de fainéantise, je sais que ça n'excuse pas tout, mais je n'ai aucune expérience en VBA, j'ai juste eu l'occasion de faire du Python et pas excessivement.. du coup je bidouille et me débrouille.

Encore merci pour le code complet, je vais l'appliquer à mon fichier dès demain.

PS: même si j'admet mon incompétence ça ne fait jamais plaisir de se sentir insulté même par un inconnu.. je comprendrai si tu ne veux plus m'aider mais c'est bof comme réaction, désolé je tenais à le souligner ^.^
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160 > PhenlKs Messages postés 16 Date d'inscription lundi 25 avril 2016 Statut Membre Dernière intervention 6 mars 2018
13 juin 2016 à 11:44
Bonjour le fil, bonjour le forum,

Arf Pheniks ! Ne le prend surtout pas comme une insulte, je ne me le permettrais pas, mais comme de l'humour un peu foutage de gueule. C'était juste une petite pique et je suis sincèrement désolé que tu le prennes mal. Je te prie de bien vouloir m'excuser.

Mais !... Parce qu'il y a un mais... Il est tellement facile avec Excel de créer un fichier bidon (ne l'ai-je pas fait moi-même, et deux fois avec toi ?), que je trouve parfois un peu facile les excuses de confidentialité ou autre. Demander de l'aide sans être foutu de fournir de quoi vous aider, avoue que c'est un comble...

Et je te rassure, ce n'est pas un problème de compétences (pff, qui je suis moi parmi les maîtres qui sévissent ici ?) mais simplement de logique. À Sète on a le verbe haut et le foutage de gueule facile mais c'est jamais méchant. Écoute BRASSENS tu comprendras mieux...
0