Traitement Base de données - Combobox, listes et formules
Bonjour à tous,
Cela fais une semaine que je me suis mis aux macros et VBA pour essayer de traiter les infos de ma base de données efficacement, mais je rencontre des problèmes. J'espère que vous pourrez m'aider.
Ma base de données recense les pointages (nombre d'heures) en fonction:
- du mois et de l'année
- de la section (défini par un code de département et son nom)
- de l'OF (orde de fabrication)
Ci-joint un fichier exemple, contenant:
- une feuille "data", avec une base de donnée similaire à celle que je dois traiter
- une feuille "base" ce que j'ai fais à partir de formulaire et qui fonctionne (mais n'est pas du tout optimisé et est fastidieux)
- une feuille "final", contenant la version optimisée, ou du moins ce que j'aimerais obtenir
1) Je souhaiterais qu'à partir de la base données, mes 3 colonnes (Dépt, Nom et OF) se mettent automatiquement à jour dès que la feuille "data" est mise à jour et que les département et OF soit trier et sans doublons
2) Concernant l'User Form
J'ai créé 2 combobox: une pour sélectionner la section (le Dépt et le Nom) et une autre pour sélectionner l'OF
Pour la combobox de la section: je voudrais afficher 2 colonnes, le code du déptartement et son nom correspondant
Pour la combobox de l'OF: je voudrais pouvoir en sélectionner 1 ou plusieurs
Malgré tout les forums que j'ai visité, je ne suis jamais arrivé à faire apparaître quelque chose dans mes combobox
3) La partie la plus difficile je pense
Une fois mes éléments sélectionnés à partir des combobox, je voudrais qu'un tableau se remplisse
Il doit donc afficher par rapport au mois et à l'année, la somme des heures pointées en fonctions de la section et du(des) OF sélectionnés
Voilà mon problème, j'espère que quelqu'un pourra m'aider, j'espère que j'ai été clair.
J'ai laissé des commentaires dans mon fichier "exemple", afin que mon problème soit plus explicite.
En vous remerciant par avance,
Cordialement.
bonjour,
Comment est mise à jour la feuille data ?
Par Copier/coller
Par Macro
Par utilisation d'un bouton du ruban Données.
Ouverture ou extraction d'un fichier TXT ou CSV ?
A+
Bonjour galopin01,
Merci de t'intéresser à mon sujet
Les données sont extraites d'un logiciel qui les mets sur une nouvelle feuille excel à chaque extraction.
Puis je copie/colle les données sur ma feuille "data".
J'espère que ça pourra t'aider.
A bientôt
Bonsoir,
Bon pour l'instant je n'ai pas tenu compte de la manière dont tu charges tes données, mais ça ira. Pour l'instant la mise à jour se fait par bouton sur la feuille Final. Ce n'est pas le plus important...
La feuille "data" étant "sensible" il faudra y aller molo pour le transfert... un Copier /Coller Spécial Valeur me conviendra à condition de ne pas bousculer les en-têtes... (la colonne G sera inutile)
Bien vouloir répondre à mes questions sur la feuille Final
Pour l'instant les feuilles cachées ne servent à rien.
A+
Bonjour,
Merci beaucoup galopin01, tu as fais un travail exceptionnel
Il va me falloir un peu de temps pour assimiler ce que tu as fais et essayer de le mettre en pratique sur ma vrai base de données, mais c'est plus qu'un bon début. Tu me débloque d'un gros problème, encore merci.
Sinon, oui effectivement je vais devoir sélectionner plus de quatre OF en même temps.
Et en ce qui concerne l'affichage des OF, je veux juste qu'ils soient visibles, pour savoir ceux qu'on traite, ce que tu as proposé me convient tout à faits.
Encore une fois merci beaucoup, et bravo pour l'efficacité et la rapidité
A bientôt
bonjour,
Tu peux pouvoir sélectionner combien d'OF au maximum ? Si tu veux pouvoir en sélectionner plus il va surement falloir que je m'y colle à nouveau, car je présume que tu vas péter un cable sur la feuille cachée !
Surement oui...
Il faudra commencer par le Gestionnaire de Nom (sans les TTOF)
Ensuite les 2 boutons
ensuite le USF et les macros (penser à renommer les feuilles et leur CodeName dans le VBAProject)
ensuite la feuille cachée...
Ensuite seulement les TTOF et les boutons d'option (pour les TTOF il faut se positionner sur M8 pour repiquer la bonne formule !)
A+
Re-bonjour galopin01,
Comme tu dois t'en douter, je galère un peu ^^
Pour l'instant je suis arrivé à faire fonctionner le bouton de mise à jour des section et OF.
J'ai modifié les CodeName pour le USF dans le VBA Project
Je ne suis pas arrivé à trouver, ni à ouvrir la feuille cachée. Je suppose que c'est sur cette feuille qu'il y les TTOF, ou du moins les formules pour compléter mon tableau.
Quand j'essaie d'exécuter le bouton choix, j'ai l'erreur suivante:
Erreur d'exécution '1004': La méthode 'Range' de l'objet '_Worksheet' a échoué.
Voilà, si tu peux me donner débloquer encore une fois, se serait génial
A bientôt
Je suis arrivé à afficher la page cachée ^^
Je regarde ça et te recontacte
A+
Bonjour,
Change cette macro :
Private Sub SendCh()
Dim i%, ii%
WsF.Range("J2:M3").ClearContents
ii = 10
With WsF
.Cells(2, 10) = .Range("DSec")(CurrentRow, 1)
.Cells(2, 11) = .Range("DSec")(CurrentRow, 2)
'boucle sur les éléments de la listbox
For i = 0 To lbOf.ListCount - 1
If lbOf.Selected(i) = True Then
.Cells(3, ii) = lbOf.List(i)
ii = ii + 1
End If
Next i
End With
Unload Me
End SubMais ce n'est pas elle qui pose problème pour le bouton Choix...
Il faut accepter le débogage et faire F8, F8, F8... jusqu'à ce que ça t'affiche et te surligne la ligne ou se produit l'erreur.
Je suppose que cette erreur se produit sur ton vrai fichier, pas sur le mien ?
Tu n'as pas le choix, il faut accepter tous les noms que j'ai fixé que ce soit pour les plages ou pour les codeName des feuilles. Seul le nom des feuilles est indifférent à condition que le Codename corresponde à "laBonneFeuille"
Si le Nom des feuille est différent les Définitions de Nom dans le (Gestionnaire de Nom) doivent changer.
Pour ne pas t'enquiquiner dans la phase de nommage je te conseille de renommer ta feuille Cible en "Final" et l'autre en "Data" comme sur mon classeur. Ainsi tu n'auras pas de problème pour copier les définitions de noms et de formules. Ensuite quand tout sera terminé tu pourras reprendre ton ancien nom. Le Gestionnaire s'occupera de la conversion.
Les plages doivent être exactement au même endroit ligne pour ligne, colonne pour colonne, Cellule pour cellule sinon c'est sur que ça plante !
Les TTOF sont des formules équivalentes à tes RECHERCHEV liées à la feuille Calc. Ces fonctions sont bien plus puissantes que les RechercheV surtout si la plage de Data est importante. Tu as pu voir que l'affichage est instantané : Ce ne serait guère plus long avec 10 "OF" et plusieurs milliers de lignes dans ta BD...
C'est bon ou pas ?
A+
D'accord, merci
Je vais regarder ça.
Par contre, je suis bien arrivé à ouvrir la feuille "Calc", mais je n'arrive pas à accéder aux colonnes avant Y.
Et je ne comprends pas ton utilisation du BDSOMME puisque je ne vois ce que représente le BData que tu utilises comme base de donnée.
A plus tard
Ah tu vas voir... ça va te muscler les neurones !
Clique sur le carré au-dessus du 1 et à gauche du Y pour sélectionner toutes les cellules.
Ensuite dans le ruban Accueil > Format (vers la droite) choisir VisibilitéMasquer et Afficher > Afficher les colonnes...
Modifier aussi cette macro dans le Module Main (ajouter la ligne indiquée) :
Sub ListeSansDoublons2C()
Dim MonDico, a, c, i
Set MonDico = CreateObject("Scripting.Dictionary")
a = WsD.Range("A2:B" & WsD.[a65000].End(xlUp).Row) ' tableau a(n,2)
For i = LBound(a) To UBound(a)
MonDico(a(i, 1)) = a(i, 2)
Next i
WsF.[B6:E15].ClearContents '------------------------------------------ Ajouter cette ligne
WsF.[B6].Resize(MonDico.Count, 1) = Application.Transpose(MonDico.keys)
WsF.[C6].Resize(MonDico.Count, 1) = Application.Transpose(MonDico.Items)
WsF.[B5].Sort Key1:=WsF.[B6], Order1:=xlAscending, Header:=xlGuess
MonDico.RemoveAll 'RAZ du Dico
For Each c In WsD.Range("E2", WsD.[E65000].End(xlUp))
MonDico(c.Value) = ""
Next c
WsF.[E6].Resize(MonDico.Count, 1) = Application.Transpose(MonDico.keys)
WsF.[E5].Sort Key1:=WsF.[E6], Order1:=xlAscending, Header:=xlYes
End SubA+