usf probleme selection date

bugg

XLDnaute Junior
bonjour,

j'ai une feuille de base de données "saisieachats", dans laquelle, j'entre toutes mes données...

à partir de cette base de données, j'aimerais en extraire des "stats", soit par "Chantier", soit par "Fournisseur"

Et imprimer ces extractions, en format pdf

Et tout cela, en fonction de dates définies par un calendrier

sur Excel 2007
seulement, dans page usf, comme vous pouvez le constater avec le fichier joint, je bute sur la selection date (qui reste desesperement vide)
qu'est-ce ce que je fais d'incorrect, et comment afficher le resultat de la section validée

merci d'avance pour votre aide et votre compréhension envers une débutante.
 

Pièces jointes

  • cijdN2HUvK.zip
    7.3 KB · Affichages: 45

bugg

XLDnaute Junior
Re : usf probleme selection date

bonjour,
aprés avoir travaillé avec votre aide, comment ,
dans page essaiUSF, via USF2 pouvoir selectionner liste d'aprés nom du fournisseur si code fournisseur pas slectionné, et,
comment rajouter un total par code ou nom de fournisseur sur la listview de l'USF2
Cijoint.fr - Service gratuit de dépôt de fichiers

merci de votre aide
 

JNP

XLDnaute Barbatruc
Re : usf probleme selection date

Re :),
aprés avoir travaillé avec votre aide
Vu le peu d'avancement entre mon fichier et le tien, je pense que je vais attendre que tu ai fait de réels progrès avant d'aller plus loin :mad:...
Pour info, actuellement, c'est une ListBox et non une ListView que j'ai mis dans l'USF, car la programmation en est plus simple. Pour utiliser une ListView, il faut rajouter la référence correspondante.
Jettes un oeil ICI pour essayer de comprendre les subtilités de la ListView, et comme il sera "simple" :D de rajouter des totaux...
Pour tes ComboBox, commence par aller faire un tour sur le site de Jacques à Dictionary, puis Alimenter une ComboBox sans doublon ;). A ce moment-là, tu pourras faire la correspondance entre fournisseurs et codes fournisseurs.
Bon courage :cool:
 
Dernière édition:

bugg

XLDnaute Junior
Re : usf probleme selection date

bonjour,
c'est parce que je n'ai pas mis le bon fichier en ligne, tu remarqueras, apres tes conseils, que j'ai réussi à faire usf gestion chantier, et même à rajouter bouton impression et mis en forme ton usf
mais je débute, alors il y a beaucoup plus rapide que moi.
mais je suis attentive à tes conseils qui se sont avérés précieux, et je vais consulter ce que tu as souligné,
mais j'espère sans vouloir abuser , que tu pourras encore m'aider car tu m'as plus appris que la douzaine de bouquins sur mon bureau...merci d'avance pour ta gentillesse et ta comprehension
Cijoint.fr - Service gratuit de dépôt de fichiers
 

JNP

XLDnaute Barbatruc
Re : usf probleme selection date

Re :),
Effectivement, mais dis-toi que la mise en forme des USF, c'est vraiment la dernière roue du char, il sera toujours temps de t'y mettre quand tout le reste sera règlé, car le plus bel USF du monde sans rien derrière, c'est comme de pisser dans un violon :p...
J'ai regardé ton projet, il est très ambitieux (je n'ai pas dit trop) ;). De base, je dirais qu'il serait bien mieux traité sous Acces, mais encore faut-il en avoir une version, et, cerise sur le gâteau, savoir s'en servir :D...
Pour l'amener à terme, je te conseille de ne pas te disperser. Commence par résoudre tous les soucis de ton premier USF (dis-toi qu'à chaque nouveau progrès, il va falloir le faire sur tous les autres USF :eek:...). Repense la structure de ton document : tes noms d'onglets sont-ils définitifs (et ne serait-il pas plus facile de nommer les feuilles en dur, ce qui évite que la moindre correction d'un nom d'onglet se transforme en catastrophe dans le code), ne serait-il pas plus judicieux sur les USF de nommer différement les combobox, les listbox, etc... Les USF aussi... USFAnalyseConso.DateDébut me cause plus dans le code que UserForm2.TextBox1...
Une bonne analyse des besoins te permettrait d'avoir l'esprit clair, alors qu'il me parait un peu brouillon pour l'instant. Je serais toi, j'aurais commencé par l'USF Gestion fournisseur, avec les échanges entre l'USF et la feuille BDD.
Comme tu dis, tu débutes, et Rome ne s'est pas fait en 1 jour. Sans vouloir te descendre le moral, ce projet te prendra de longs mois avant de commencer à donner ce que tu souhaites (et ensuite, il y a la phase la plus compliquée, envisager toutes les bétises que les utilisateurs vont pouvoir faire, tu n'as certainement pas idée de leur imagination :p).
Je suis en train de regarder pour le chargement propre de tes combobox, mais c'est là que tu t'aperçois qu'il n'y a pas de feuille BDD pour les fournisseurs...
Bon courage :cool:
Ajout : J'ai fini les ComboBox, je te mets le fichier en pièce jointe
 

Pièces jointes

  • USF2.xlsm
    76.3 KB · Affichages: 55
  • USF2.xlsm
    76.3 KB · Affichages: 58
  • USF2.xlsm
    76.3 KB · Affichages: 59
Dernière édition:

bugg

XLDnaute Junior
Re : usf probleme selection date

d'abord merci beaucoup pour l'envoi !

ensuite, quand je mets le rowsource (dans le nouveau usf) dans combobox3 et 4, je n'ai rien qui s'affiche dans la listbox1, est-ce normal ?

désolée pour le dérangement, et merci énormément pour ton aide !

NB je me consacre à la gestion fournisseurs commes tu l'as conseillé, mais je voulais tester tes explications sur les combobox.......
 

JNP

XLDnaute Barbatruc
Re : usf probleme selection date

Re :),
ensuite, quand je mets le rowsource (dans le nouveau usf) dans combobox3 et 4, je n'ai rien qui s'affiche dans la listbox1, est-ce normal ?
Oublie le RowSource, c'est pratique pour des petites applications, mais ta liste étant variable, il vaut mieux l'alimenter différement, je te laisse décortiquer mon code... Je te le commenterai plus tard.
A + :cool:
 

JNP

XLDnaute Barbatruc
Re : usf probleme selection date

Re :),
Chose promise, chose due :p...
Quelques explications sur le code :
A l'initialisation de l'USF (j'ai modifié les [] qui utilisent la fonction Validate car chez moi, ça ne fonctionnait pas toujours, mais en réalité, il me manquait la référence de la feuille. D'un autre côté, c'est plus facile à comprendre) :
Code:
Private Sub UserForm_Initialize()
Dim Temporaire2() [COLOR=seagreen]' Déclaration d'un tableau[/COLOR]
[COLOR=seagreen]' Classement ComboBox d'après JB : boisgontierjacques.free.fr[/COLOR]
  Set MonDico = CreateObject("Scripting.Dictionary") [COLOR=seagreen]' Chargement d'un dictionaire[/COLOR]
  For Each Cellule In Sheets("saisieachats").Range("C2:C" & Sheets("saisieachats").Range("C65000").End(xlUp).Row)
  [COLOR=seagreen]' Pour chaque variable nommée Cellule balayant de C2 à la dernière ligne utilisée de C[/COLOR]
    MonDico.Item(Cellule.Value) = Cellule.Value
    [COLOR=seagreen]' Rajoute la valeur de Cellule dans le dico[/COLOR]
  Next Cellule
  [COLOR=seagreen]' Cellule suivante[/COLOR]
  Temporaire = MonDico.items
  [COLOR=seagreen]' Envoi des valeurs du dico dans un tableau[/COLOR]
  Call Tri(Temporaire, LBound(Temporaire), UBound(Temporaire))
  [COLOR=seagreen]' Appel de la macro de tri et élimination de doublons du tableau[/COLOR]
  Me.ComboBox3.List = Temporaire
 [COLOR=seagreen] ' Envoi du tableau trié dans le combobox Code fournisseur[/COLOR]
  ReDim Temporaire2(UBound(Temporaire))
  [COLOR=seagreen]' Redimensionnement de la taille du tableau pour les fournisseurs[/COLOR]
  For I = LBound(Temporaire) To UBound(Temporaire)
  [COLOR=seagreen]' Pour toutes les ligne du tableau code fournisseur[/COLOR]
  Set résultat = Sheets("saisieachats").Range("C2:C" & Sheets("saisieachats").Range("C65000").End(xlUp).Row).Find(Temporaire(I))
  [COLOR=seagreen]' Recherche du code fournisseur dans la colonne C[/COLOR]
  Temporaire2(I) = Sheets("saisieachats").Cells(résultat.Row, 4)
 [COLOR=seagreen] ' Chargement du nom du fournisseur dans le même ordre que les codes fournisseurs[/COLOR]
  Me.ComboBox4.AddItem CStr(Temporaire2(I)) [COLOR=seagreen]' Ajout de la valeur dans le combobox fournisseur[/COLOR]
  Next I
  [COLOR=seagreen]' I suivant[/COLOR]
End Sub
Pour les changements de combobox :
Code:
Private Sub ComboBox3_Change()
ComboBox4.ListIndex = ComboBox3.ListIndex
[COLOR=seagreen]' Vu que les combobox sont dans le même ordre, si le 3 change, je mets le 4 sur la même ligne[/COLOR]
Dim I As Integer
If TextBox1 = "" Or TextBox2 = "" Then Exit Sub
ListBox1.Clear
I = 2
With Sheets("saisieachats")
While .Cells(I, 1) <> ""
If CDate(TextBox1) <= .Cells(I, 2) And CDate(TextBox2) >= .Cells(I, 2) And CInt(ComboBox3) = .Cells(I, 3) Then
ListBox1.AddItem Format(.Range("B" & I), "dd/mm/yy") & " " & Format(.Range("L" & I), "# ##0.00 €")
End If
I = I + 1
Wend
End With
End Sub
Private Sub ComboBox4_Change()
ComboBox3.ListIndex = ComboBox4.ListIndex
[COLOR=seagreen]' Vu que les combobox sont dans le même ordre, si le 4 change, je mets le 3 sur la même ligne[/COLOR]
End Sub
Par contre, pour la macro Tri tirée aussi de JB, vu que c'est une fonction récursive, je ne rentrerai pas dans les détails, je la comprends tout juste, donc j'aurai du mal à expliquer :eek:... Mais on va dire que l'important, c'est que ça marche :rolleyes:...
Bon courage :cool:
 

bugg

XLDnaute Junior
Re : usf probleme selection date

Bonjour,
ça marche nickel !
je vais comme la dernèere fois impris tes explications et analyser le tout, car j'avais regarder le lien que tu as donné sur le quick sort, j'ai rien compris...

pour le tableau, peux-tu decoder comme tu sais si bien le faire
"Sub Tri(Tableau, Gauche, Droite) ' Quick sort d'après JB : boisgontierjacques.free.fr
Référence = Tableau((Gauche + Droite) \ 2)
NewGauche = Gauche: NewDroite = Droite
Do
Do While Tableau(NewGauche) < Référence: NewGauche = NewGauche + 1: Loop
Do While Référence < Tableau(NewDroite): NewDroite = NewDroite - 1: Loop
If NewGauche <= NewDroite Then
Temporaire = Tableau(NewGauche): Tableau(NewGauche) = Tableau(NewDroite): Tableau(NewDroite) = Temporaire
NewGauche = NewGauche + 1: NewDroite = NewDroite - 1
End If
Loop While NewGauche <= NewDroite
If NewGauche < Droite Then Call Tri(Tableau, NewGauche, Droite)
If Gauche < NewDroite Then Call Tri(Tableau, Gauche, NewDroite)
End Sub"
l'anglais ça va je comprends, mais pourquoi "si nouveau gauche, alors faire tri, etc.."

n.b: est-ce que tu donnerais des cours dans l'Ouest, car tes explications sont toujours incroyablement claires pour une novice comme moi,
je sais qu'il me faudra des années avant d'atteindre ton niveau et d'avoir ta réactivité, ou alors écris un livre avec tes modèles et explications, je serai ta premiere cliente (et je ne rigole pas !)
 

JNP

XLDnaute Barbatruc
Re : usf probleme selection date

Re :),
pour le tableau, peux-tu decoder comme tu sais si bien le faire
Euh, j'avais noté : « Par contre, pour la macro Tri tirée aussi de JB, vu que c'est une fonction récursive, je ne rentrerai pas dans les détails, je la comprends tout juste, donc j'aurai du mal à expliquer :eek:... Mais on va dire que l'important, c'est que ça marche :rolleyes:... » :p... Je peux essayer d'éclaircir, mais, ce sera pas forcément limpide, ni complètement juste :eek:!
"Sub Tri(Tableau, Gauche, Droite) ' Quick sort d'après JB : boisgontierjacques.free.fr
Référence = Tableau((Gauche + Droite) \ 2)
Gauche est la première entrée du tableau, Droite la dernière (bornes). On se base donc sur la valeur rentrée au milieu du tableau.
NewGauche = Gauche: NewDroite = Droite
On fixe les bornes qui vont évoluer pendant la sub
Do
Boucle faisant référence à la ligne rouge en dessous. L'inversion des bornes traduira que le tableau est trié
Do While Tableau(NewGauche) < Référence: NewGauche = NewGauche + 1: Loop
On boucle tant que la partie basse du tableau est bien triée
Do While Référence < Tableau(NewDroite): NewDroite = NewDroite - 1: Loop
De même pour la partie haute
If NewGauche <= NewDroite Then
Si la partie basse n'est pas encore passée au dessus de la partie haute
Temporaire = Tableau(NewGauche): Tableau(NewGauche) = Tableau(NewDroite): Tableau(NewDroite) = Temporaire
On interverti les 2 valeurs du tableau qui sont à l'envers en passant par une variable temporaire
NewGauche = NewGauche + 1: NewDroite = NewDroite - 1
On rétrécit les bornes
End If
Fin du test
Loop While NewGauche <= NewDroite
On boucle temps que les bornes ne sont pas rejointes
If NewGauche < Droite Then Call Tri(Tableau, NewGauche, Droite)
Si la nouvelle borne basse n'a pas rejoint la borne haute de départ, on rappelle la même fonction (d'où le titre de fonction récursive) pour trier la partie haute qui n'est pas encore triée
If Gauche < NewDroite Then Call Tri(Tableau, Gauche, NewDroite)
De même si la nouvelle borne haute n'a pas rejoint la borne basse de départ.
End Sub"
Comme depuis le début, tu échange les valeurs dans ton tableau, le tableau est trié à l'arrivée...
Je sais pas si c'est très clair (vu que ce l'est pas entièrement pour moi :(...).
n.b: est-ce que tu donnerais des cours dans l'Ouest,
Si tu jette un oeil à mon profil (il y a des problèmes d'affichage actuellement sous l'avatar), tu verras que je suis plutôt très à l'est, désolé...
car tes explications sont toujours incroyablement claires pour une novice comme moi,
je sais qu'il me faudra des années avant d'atteindre ton niveau et d'avoir ta réactivité, ou alors écris un livre avec tes modèles et explications, je serai ta premiere cliente (et je ne rigole pas !)
C'est gentil, mais excuses-moi si moi, ça me fait rigoler :p. Il y a des tas de gens sur ce forum qui dépassent largement ma connaissance d'Excel :rolleyes:... Mes explications sont peut-être assez claires, mais il me semble que j'ai enseigné un peu il y a quelques années, et mon père était directeur d'école, j'ai peut-être hérité d'un peu de sa pédagogie ;). De là à écrire un bouquin, il y en a déjà bien assez sur Excel, dont certains sont très clairs. Sans compter que je n'ai pas vraiment le temps :p...
Bon courage :cool:
 

bugg

XLDnaute Junior
Re : usf probleme selection date

bonjour,
ces explications sont toujours plus claires que celle du lien,, en gros, si j'ai bien compris, ça sert à delimiter le tableau.
Autre question pour USF2,
quelle est la formule pour qu'il additionne les" Format(.Range("L" & I), "# ##0.00 €")" dans ce même tableau,
j'ai vu des sum, subtotal, calculate etc ...

merci encore pour ton aide !
 

JNP

XLDnaute Barbatruc
Re : usf probleme selection date

Re :),
Attention, comme évoqué précédement, nous sommes dans une ListBox et non une ListView. Du coup, présentation en tableau succinte (pas d'alignements, de gras, etc.).
Je ne pense pas qu'on puisse utiliser des fonctions de feuille (ni dans l'un, ni dans l'autre), par contre on peut additionner les éléments au fur et à mesure qu'on les inclut. J'en ait profité pour passer en réel 2 colonnes.
Code:
Private Sub ComboBox3_Change()
ComboBox4.ListIndex = ComboBox3.ListIndex
' Vu que les combobox sont dans le même ordre, si le 3 change, je mets le 4 sur la même ligne
Dim I As Integer[COLOR=red], J As Integer, Total As Double[/COLOR]
[COLOR=red]Total = 0[/COLOR]
If TextBox1 = "" Or TextBox2 = "" Then Exit Sub
ListBox1.Clear
[COLOR=red]ListBox1.ColumnCount = 2[/COLOR]
[COLOR=red]ListBox1.ColumnWidths = "120;120"[/COLOR]
[COLOR=red]J = 0[/COLOR]
I = 2
With Sheets("saisieachats")
While .Cells(I, 1) <> ""
If CDate(TextBox1) <= .Cells(I, 2) And CDate(TextBox2) >= .Cells(I, 2) And CInt(ComboBox3) = .Cells(I, 3) Then
[COLOR=red]ListBox1.AddItem Format(.Range("B" & I), "dd/mm/yy")[/COLOR]
[COLOR=red]ListBox1.Column(1, J) = Format(.Range("L" & I), "# ##0.00 €")[/COLOR]
[COLOR=red]Total = Total + .Range("L" & I)[/COLOR]
[COLOR=red]J = J + 1[/COLOR]
End If
I = I + 1
Wend
[COLOR=red]ListBox1.AddItem "Total"[/COLOR]
[COLOR=red]ListBox1.Column(1, J) = Format(Total, "# ##0.00 €")[/COLOR]
End With
End Sub
Je t'ai mis en rouge les ajouts ou modifications.
Bon courage :cool:
 

bugg

XLDnaute Junior
Re : usf probleme selection date

bonsoir,
tes explications doivent vraiment être trés claires, car j'ai réussi à transposer le tout dans mon fichier d'origine (bien different car données confidentielles ) sans aucun bug!
puis-je encore t'embêter ?
avec le fichier USF que tu as si clairement modifié, comment peut-on extraire la colonne "code fournisseur et nom fournisseur pour la copier sans doublon sur autre feuille qui s'appelle ListeFRS, j'ai bien vu la formule =sansdoublonstrié
mais j'ai rien compris.
et si je selectionnes les colnnes à copier puis données filtre elaboré copier sans doublon, ça me dit "vous pouvez seulement copier des données filtrées vers la feuille active"

merci encore pour toute ton aide !
 
Dernière édition:

JNP

XLDnaute Barbatruc
Re : usf probleme selection date

Re :),
Sur ce coup là, j'ai peut-être manqué de clarté :rolleyes:... La macro Tri fait ce qu'elle doit faire, càd, trier ;)... Pour les doublons, c'est le dico qui s'en charge. Pourquoi ? Je viens de me pencher sur le problème car je n'avais jamais cherché très loin, et l'utilisait sans chercher :eek:...
D'un côté, tu as les tableaux, que tu peux remplir par valeur de ligne Tableau(1) par exemple. De l'autre, tu as un dico qui, au lieu d'utiliser une ligne, utilise un mot clef. Du coup, si tu dis que chaque entrée est sur le mot clef de l'entrée, tu élimines les doublons, vu que Dico.Add "Toto", "Toto" ne va pas être considéré comme une nouvelle entrée, mais comme l'écrasement de l'entrée précédente de "Toto".
Par contre, pour l'envoyer vers ta feuille "Fournisseurs", il va falloir charger le Dico dans un Tableau afin de pouvoir faire une boucle entre LBound(Tableau) et UBound(Tableau) (limites basse et haute de ton tableau).
Mais si on est logique, c'est au moment de la saisie du fournisseur dans un USF qu'on vérifie si le fournisseur existe déjà, ou si on l'ajoute à la liste ;)...
Bon courage :cool:
 

Statistiques des forums

Discussions
312 762
Messages
2 091 807
Membres
105 075
dernier inscrit
sdalmas