Problèmes Excel avec VBA

Fermé
Carthman - 13 mai 2008 à 15:50
 Carthman - 14 mai 2008 à 09:35
Bonjour,
Je suis actuellement en stage pour créer une base de données.
Le seul logiciel qui s'offre à moi est Excel.

J'ai donc bien commencer, j'ai créer la base, un formulaire de consultation et un formulaire de création d'entrées qui utilisent des listes de choix dans une autre feuille.
Le formulaire de création marche très bien, aucun problème !
Le problème est en fait pour la consultation !!!
Je voudrais faire en sorte que quand on rentre les critères de consultation dans la feuille du même nom, on puisse arriver dans la base de données triée.

Le problème est que ça bug pas mal, déjà quand je met un premier critère, si je met un autre critère qui n'est jamais associé au premier dans la base de données, le tri de la BDD se met en "personnalisée" et on ne voit plus rien.
Il faudrait donc faire en sorte que cela ne se passe pas ou qu'il y ai une indication pour dire quel critère ne va pas.
De plus, quand je fai une nouvelle consultation, j'ai beau effacé le critère utilisé avant, il le "garde en mémoire" et du coups la nouvelle consultation est inefficace.
C'est encore plus gênant car du coups "ça récupère" les bugs d'avant avec les critères qui ne correspondent pas !
Il y a cette solution qui existerait http://www.polykromy.com/blog/excel-base-de-donnees.htm le problème est que dans la liste de consultation figure tous les critères, même ceux se répétant, et je dois entrer environ 1000 entrées !
C'est pour ça que j'ai essayé de faire ma méthode plus haut, mais je n'y arrive pas.

J'ai passé des heures à chercher, je ne m'y connait pas trop en VBA excel.
Pour le moment, j'ai un bouton enregistrement qui marche bien (je met pas le code vu que c'est nickel) et un de consultation qui utilise la macro "test" en bas du module 2.
C'est incomplet, mais vu que dès le départ je n'y arrive pas, j'ai pas envie d'avancer pour rien.

Je ne vous demande pas de me taper tout le code, bien sûr, mais si vous pouvez m'aider en me donnant des pistes à explorer, je vous en serai reconnaissant.
Merci
Je vous mets le code que j'ai tapé jusqu'ici :

Module 1

Sub Macro_ana()
Sheets("Base de données").Select
Selection.AutoFilter Field:=1, Criteria1:="Analyseur"
Sheets("Consultation").Select
End Sub

Sub Macro_chauff()
Sheets("Base de données").Select
Selection.AutoFilter Field:=1, Criteria1:="Chauffage, AC"
Sheets("Consultation").Select
End Sub

Sub Macro_elec()
Sheets("Base de données").Select
Selection.AutoFilter Field:=1, Criteria1:="Electricité"
Sheets("Consultation").Select
End Sub

Sub Macro_equi()
Sheets("Base de données").Select
Selection.AutoFilter Field:=1, Criteria1:="Equipements sous pression"
Sheets("Consultation").Select
End Sub

Sub Macro_gen()
Sheets("Base de données").Select
Selection.AutoFilter Field:=1, Criteria1:="Général"
Sheets("Consultation").Select
End Sub

Sub Macro_gc()
Sheets("Base de données").Select
Selection.AutoFilter Field:=1, Criteria1:="Génie Civil"
Sheets("Consultation").Select
End Sub

Sub Macro_hse()
Sheets("Base de données").Select
Selection.AutoFilter Field:=1, Criteria1:="HSE"
Sheets("Consultation").Select
End Sub

Sub Macro_ing()
Sheets("Base de données").Select
Selection.AutoFilter Field:=1, Criteria1:="Ingénierie"
Sheets("Consultation").Select
End Sub

Sub Macro_ins()
Sheets("Base de données").Select
Selection.AutoFilter Field:=1, Criteria1:="Instrumentation - Automatisation"
Sheets("Consultation").Select
End Sub

Sub Macro_isol()
Sheets("Base de données").Select
Selection.AutoFilter Field:=1, Criteria1:="Isolation"
Sheets("Consultation").Select
End Sub

Sub Macro_mach()
Sheets("Base de données").Select
Selection.AutoFilter Field:=1, Criteria1:="Machines tournantes"
Sheets("Consultation").Select
End Sub

Sub Macro_maint()
Sheets("Base de données").Select
Selection.AutoFilter Field:=1, Criteria1:="Maintenance - Inspection - Technique"
Sheets("Consultation").Select
End Sub

Sub Macro_cor()
Sheets("Base de données").Select
Selection.AutoFilter Field:=1, Criteria1:="Maîtrise de la corrosion"
Sheets("Consultation").Select
End Sub

Sub Macro_soud()
Sheets("Base de données").Select
Selection.AutoFilter Field:=1, Criteria1:="Soudage - Matériaux"
Sheets("Consultation").Select
End Sub

Sub Macro_stru()
Sheets("Base de données").Select
Selection.AutoFilter Field:=1, Criteria1:="Structures"
Sheets("Consultation").Select
End Sub

Sub Macro_tel()
Sheets("Base de données").Select
Selection.AutoFilter Field:=1, Criteria1:="Télécommunications"
Sheets("Consultation").Select
End Sub

Sub Macro_the()
Sheets("Base de données").Select
Selection.AutoFilter Field:=1, Criteria1:="Thermique"
Sheets("Consultation").Select
End Sub

Sub Macro_tuy()
Sheets("Base de données").Select
Selection.AutoFilter Field:=1, Criteria1:="Tuyauterie - Robinetterie"
Sheets("Consultation").Select
End Sub

Sub Macro_videbr()
Sheets("Base de données").Select
Selection.AutoFilter Field:=1, Criteria1:="All"
Sheets("Consultation").Select
End Sub


Module 2

Sub test_br()
Sheets("Consultation").Select
Range("C4").Select
Nom = ActiveCell.Value
Select Case Nom

Case "Analyseur"
Call Module1.Macro_ana

Case "Chauffage, AC"
Call Module1.Macro_chauff

Case "Electricité"
Call Module1.Macro_elec

Case "Equipements sous pression"
Call Module1.Macro_equi

Case "Général"
Call Module1.Macro_gen

Case "Génie Civil"
Call Module1.Macro_gc

Case "HSE"
Call Module1.Macro_hse

Case "Ingénierie"
Call Module1.Macro_ing

Case "Instrumentation - Automatisation"
Call Module1.Macro_ins

Case "Isolation"
Call Module1.Macro_isol

Case "Machines tournantes"
Call Module1.Macro_mach

Case "Maintenance - Inspection - Technique"
Call Module1.Macro_maint

Case "Maîtrise de la corrosion"
Call Module1.Macro_cor

Case "Soudage - Matériaux"
Call Module1.Macro_soud

Case "Structures"
Call Module1.Macro_stru

Case "Télécommunications"
Call Module1.Macro_tel

Case "Thermique"
Call Module1.Macro_the

Case "Tuyauterie - Robinetterie"
Call Module1.Macro_tuy

Case ActiveCell.Value = 0
Call Module1.Macro_videbr


End Select
End Sub

Sub test_elec()
Sheets("Consultation").Select
Range("C5").Select
If ActiveCell.Value = "R" Then
Sheets("Base de données").Select
Selection.AutoFilter Field:=2, Criteria1:="R"
Sheets("Consultation").Select
Else
Sheets("Base de données").Select
Selection.AutoFilter Field:=2, Criteria1:="All"
Sheets("Consultation").Select
End If

End Sub

Sub test()
Range("C4").Select
If ActiveCell.Value = 0 Then Call test_elec
Call test_br
Call test_elec
End Sub
A voir également:

4 réponses

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 716
13 mai 2008 à 23:24
bonjour

J'ai pas tout compris ce que tu nous as fait car il me semble que tes modules ne servent pas beaucoup...

Avec ceci tu obtiens ce que tu cherches
Sub filtre()
Sheets("Base de données").Range("a1:c1").AutoFilter Field:=1, _
    Criteria1:=Sheets("Consultation").Range("C4").Value
Sheets("Base de données").Activate
End Sub
0
OK merci j'ai écrit alors que je n'avait pas vu ta réponse !!!
Je vais essayer ça demain, j'espère que c'est ce qu'il me faut.
Est-ce que ce que tu m'a donné je peux l'appliquer à plusieurs critères de tri, par exemple si je veux trier avec 2 critères, avec un seul, avec 3 autres ?
J'essaye d'être le plus clair possible désolé !!!

;)
0
Bonjour,

Pensez vous qu'il y aurait une technique permettant de créer des noms dynamiques dans une liste déroulante, ces noms dynamiques serait faits à partir de la base de données, mais est-il possible pas exemple d'éviter les doublons, car dans mon cas, vu que en entrée il y aura certaines catégories, j'ai pas envie de trouver un menu déroulant avec 200 fois la même catégorie dedans !!!

Merci ;)
0
Bonjour !
Merci ça a l'air de marcher, du moins un peu mieux qu'avant.
Seulement quand dans coonsultation je mets aucun critères, le tri se fait sur personnalisé donc il n'y a rien qui s'affiche,
alors que je voudrais quand quand un critère de sélection est vide, le tri se fasse sur "All" pour tout voir !!!
De plus j'ai peur que si un critère n'est pas associé à un autre dans la BDD, ça bug un peu et ça mette aussi sur "personnaliser" !

Pour le tri sur "All", j'ai rajouté :

If Sheets("Consultation").Range("C4").Value = 0 Then Sheets("Base de données").Range("a1").AutoFilter Field:=1, _
Criteria1:="All"


Faut-il que je mette Criteria2 pour le "All" ?
FRaut-il que je répète ton code pour chaque critère et après faire un sub qui les appelles tous à la suite ou faut-il les faire tous en 1 ?

Merci ;)
0
J'ai parlé trop vite !
J'ai appliqué mon truc à tous les filtres, les cases vides ne posent plus de probs !!!
Le seul problème qui reste, et là je ne vois vraiment pas quoi faire, c'est pour quand les critères ne correspondent pas, soit mettre un message d'erreur en disant qu'il y a une erreur (certains critères ne correspondent pas), soit laisser les filtres sur "All" avec pourquoi pas un message quand même !
Je bloque là dessus !!!

En tous cas merci beaucoup pour ton aide c'est très bien ça marche nickel mise à part ce problème ;)
Mais au pire je pourrais réussir à bidouiller en disant que si un filtre se met sur personnaliser (le bug récurrent), alors faut réessayer la saisie.

Voici mon code actuel. C'est peut être lourd mais je ne sais pas si je pouvait condenser en 1 en faisant style Sheets("Base de données").Range("a1:c1").AutoFilter Field:=1, _
Criteria1:=Sheets("Consultation").Range("C4:c6").Value







Mon code :

Sub filtre1()
Sheets("Base de données").Range("a1").AutoFilter Field:=1, _
Criteria1:=Sheets("Consultation").Range("C4").Value
If Sheets("Consultation").Range("C4").Value = 0 Then Sheets("Base de données").Range("a1").AutoFilter Field:=1, _
Criteria2:="All"
Sheets("Base de données").Activate
End Sub

Sub filtre2()
Sheets("Base de données").Range("a2").AutoFilter Field:=2, _
Criteria1:=Sheets("Consultation").Range("C5").Value
If Sheets("Consultation").Range("C5").Value = 0 Then Sheets("Base de données").Range("a2").AutoFilter Field:=2, _
Criteria2:="All"
Sheets("Base de données").Activate
End Sub

Sub filtre3()
Sheets("Base de données").Range("a3").AutoFilter Field:=3, _
Criteria1:=Sheets("Consultation").Range("C6").Value
If Sheets("Consultation").Range("C6").Value = 0 Then Sheets("Base de données").Range("a3").AutoFilter Field:=3, _
Criteria2:="All"
Sheets("Base de données").Activate
End Sub

Sub filtre4()
Sheets("Base de données").Range("a4").AutoFilter Field:=4, _
Criteria1:=Sheets("Consultation").Range("C7").Value
If Sheets("Consultation").Range("C7").Value = 0 Then Sheets("Base de données").Range("a4").AutoFilter Field:=4, _
Criteria2:="All"
Sheets("Base de données").Activate
End Sub

Sub filtre5()
Sheets("Base de données").Range("a5").AutoFilter Field:=5, _
Criteria1:=Sheets("Consultation").Range("C8").Value
If Sheets("Consultation").Range("C8").Value = 0 Then Sheets("Base de données").Range("a5").AutoFilter Field:=5, _
Criteria2:="All"
Sheets("Base de données").Activate
End Sub

Sub filtre6()
Sheets("Base de données").Range("a6").AutoFilter Field:=6, _
Criteria1:=Sheets("Consultation").Range("C9").Value
If Sheets("Consultation").Range("C9").Value = 0 Then Sheets("Base de données").Range("a6").AutoFilter Field:=6, _
Criteria2:="All"
Sheets("Base de données").Activate
End Sub

Sub filtre7()
Sheets("Base de données").Range("a7").AutoFilter Field:=7, _
Criteria1:=Sheets("Consultation").Range("C10").Value
If Sheets("Consultation").Range("C10").Value = 0 Then Sheets("Base de données").Range("a7").AutoFilter Field:=7, _
Criteria2:="All"
Sheets("Base de données").Activate
End Sub

Sub filtre8()
Sheets("Base de données").Range("a8").AutoFilter Field:=8, _
Criteria1:=Sheets("Consultation").Range("C11").Value
If Sheets("Consultation").Range("C11").Value = 0 Then Sheets("Base de données").Range("a8").AutoFilter Field:=8, _
Criteria2:="All"
Sheets("Base de données").Activate
End Sub

Sub filtre9()
Sheets("Base de données").Range("a9").AutoFilter Field:=9, _
Criteria1:=Sheets("Consultation").Range("C12").Value
If Sheets("Consultation").Range("C12").Value = 0 Then Sheets("Base de données").Range("a9").AutoFilter Field:=9, _
Criteria2:="All"
Sheets("Base de données").Activate
End Sub

Sub filtre10()
Sheets("Base de données").Range("a10").AutoFilter Field:=10, _
Criteria1:=Sheets("Consultation").Range("C13").Value
If Sheets("Consultation").Range("C13").Value = 0 Then Sheets("Base de données").Range("a10").AutoFilter Field:=10, _
Criteria2:="All"
Sheets("Base de données").Activate
End Sub

Sub filtre11()
Sheets("Base de données").Range("a11").AutoFilter Field:=11, _
Criteria1:=Sheets("Consultation").Range("C14").Value
If Sheets("Consultation").Range("C14").Value = 0 Then Sheets("Base de données").Range("a11").AutoFilter Field:=11, _
Criteria2:="All"
Sheets("Base de données").Activate
End Sub

Sub filtre12()
Sheets("Base de données").Range("a12").AutoFilter Field:=12, _
Criteria1:=Sheets("Consultation").Range("C15").Value
If Sheets("Consultation").Range("C15").Value = 0 Then Sheets("Base de données").Range("a12").AutoFilter Field:=12, _
Criteria2:="All"
Sheets("Base de données").Activate
End Sub

Sub filtre()
Call filtre1
Call filtre2
Call filtre3
Call filtre4
Call filtre5
Call filtre6
Call filtre7
Call filtre8
Call filtre9
Call filtre10
Call filtre11
Call filtre12
End Sub
0