Bonjour à tous !
Ceci est mon premier post, j'espère pouvoir bénéficier de votre aide et trouver une solution à mon problème avec vous !
Dans mon entreprise, l'extraction de toute les références des produits vendu se fait sur un fichier excel basique, mais le nombre de références est bien trop volumineux.
Je cherche donc à faire une macro qui, en se basant sur un fichier "base de donnée", recherche dans le fichier extrait toute les lignes contenant ces références et ne montre qu'elles (ou masque toutes les autres au choix).
Pour cela, j'ai créé un fichier dans lequel j'ai indiqué chaque référence existante rangées par produits, puis j'ai nommé chaque plage de donnée pour avoir une plage de recherche contenant chacune des références pour chaque produit.
J'ai ensuite créé un onglet dans lequel je propose à l'utilisateur de choisir le modèle recherché, et affiche un bouton po
A partir de là, j'ai écrit le code que vous pouvez voir ici :
La macro est donc censé rechercher dans le fichier tout les lignes ne contenant aucune des données de la plage de recherche et les masquer.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 Sub Extraction() ' ' Recherche Macro ' Application.ScreenUpdating = False Dim fichier As Variant Dim recherche As Range Dim model As String Dim i As Integer Dim DerCol As Integer 'La case C6 contient le modèle choisi par l'utilisateur model = Sheets("Extraction").Range("C6").Text 'Va chercher la plage qui correspond au modèle choisi dans les onglets corespondant recherche = Range("M_" & model) 'Ouvre le fichier extrait fichier = Application.GetOpenFilename("Tous les fichiers (*.*),*.*") Workbooks.Open (fichier) 'Montre toute les lignes Call Tout_montrer 'Recherche les lignes ne contenant aucune des données de la plage de recherche et les masque DerCol = Cells(1, Columns.Count).End(xlToLeft).Column For i = Range("A" & Rows.Count).End(xlUp).Row To 2 Step -1 If WorksheetFunction.CountIf(Range(Cells(i, 2), Cells(i, DerCol)), recherche) <= 0 Then Rows(i).EntireRow.Hidden = True End If Next Application.ScreenUpdating = True End Sub Sub Tout_cacher() Cells.EntireRow.Hidden = True End Sub Sub Tout_montrer() Cells.EntireRow.Hidden = False End Sub
Cependant au lancement de la macro, un code d'erreur s'affiche :
Et me montre la ligne qui nomme la variable "recherche" (ligne 17) en la coloriant en jaune.Erreur d'exécution '91'
Variable objet ou variable With non définie
Je pense que c'est probablement pour deux raison :
- Je n'utilise pas les bonnes variables
- La fonction de recherche ne fonctionne pas avec une plage de donnée mais uniquement avec une seule valeur (variable en bleu)
Je ne sais pas du tout comment trouver une solution, je suis resté sur le code jusqu'à 2:30 ce matin sans succès... J'espère que vous en saurez plus que moi !
Merci d'avance !!
Ps : Je n'ai pas mis les fichiers en pièce jointe parce que le règlement du forum demande de ne pas le faire au premier post. Si vous en avez besoin je vous les mettrai a disposition.
Partager