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 ?
Le code c'est bien, mais un fichier avec l'UF et des donnees, meme bidon, c'est quand meme mieux pour chercher !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
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é.
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 ^.^
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...
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
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 ^.^
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...