XL 2019 VBA sélection via combobox

Katoch

XLDnaute Junior
Bonjour / Bonsoir à toutes et tous du forum !

J'ai besoin de votre aide pour me réaliser le code vba qui me permettra de faire grandement évoluer mon fichier formation.
Je vous joins un fichier explicatif.
Merci par avance de votre aide.;)
 

Pièces jointes

  • Classeur1Katoch.xlsm
    23.8 KB · Affichages: 8

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir Katoch,
En PJ un essai avec sur le bouton OK de l'userform :
Code:
Private Sub Bok_Click()
    Dim Nom$, L%, DateRecente, LigneRef%
    DateRecente = -1
    Nom = UserForm1.ComboBox1
    Application.ScreenUpdating = False
    For L = 3 To Range("E65500").End(xlUp).Row
        If Cells(L, "E") = Nom And Cells(L, "G") > DateRecente Then
            DateRecente = Cells(L, "G")
            LigneRef = L
        End If
    Next L
    Range(Cells(LigneRef, "E"), Cells(LigneRef, "H")).Select
    Unload UserForm1
End Sub
 

Pièces jointes

  • Classeur1Katoch (1).xlsm
    24.4 KB · Affichages: 4

Katoch

XLDnaute Junior
BONJOUR Sylvanu !

D'abord merci pour l'aide que vous m'apportez !
Le code proposé est insuffisant parce que je n'ai pas réussi à être suffisamment clair dans mon énoncé...
Pour cela , j'ai complété le fichier joint des résultats attendus .
Je pense que vous comprendrez mieux ma demande .

J'espère que vous trouverez la solution.
A bientôt
 

Pièces jointes

  • Classeur1KatochV2.xlsm
    26.6 KB · Affichages: 3

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
je n'ai pas réussi à être suffisamment clair dans mon énoncé...
C'est un euphémisme. :)

En PJ un nouvel essai.
Comme ce n'est pas plus clair :
ce résultat que j'afficherai dans un autre onglet ( ligne 20 )
et
le résultat aille s'afficher en dernière ligne du tableau (E23;H28) ( ligne 37 )
J'ai opté par sélectionner la ligne concernée, et stocker le résultat dans la feuille Résultat en dernière ligne.
De toute façon, c'est facilement bidouillable pour être adapté.
VB:
Private Sub Bok_Click()
    Dim Nom$, L%, DateRecente, LigneRef%, Tdate(12), Année, Mois, DatePrévue, DateRetenue
    Année = Year(Now)
    DateRecente = -1
    Nom = UserForm1.ComboBox1
    Application.ScreenUpdating = False
    For L = 3 To Range("E65500").End(xlUp).Row
        If Cells(L, "E") = Nom Then
            ' Construction de la date prévue avec mois colonne F, année en cours et dernier jour du mois.
            Mois = Application.Match(Cells(L, "F"), [TabMois], 0)
            DatePrévue = CDate(Application.EDate(CDate("01/" & Mois & "/" & Year(Now)), 1) - 1)
            ' On retient la date la plus récente entre Prévue et Réalisée
            If Cells(L, "G") < DatePrévue Then DateRetenue = DatePrévue Else DateRetenue = Cells(L, "G")
            ' Si la plus récente, on mémorise
            If DateRetenue > DateRecente Then
                DateRecente = Cells(L, "G")
                LigneRef = L
            End If
        End If
    Next L
    Application.ScreenUpdating = False
    ' On range le résultat dans la feuille Résultat
    Range(Cells(LigneRef, "E"), Cells(LigneRef, "H")).Select
    With Sheets("Résultat")
        DLR = .Range("A65500").End(xlUp).Row + 1
        .Range("A" & DLR & ":D" & DLR) = Range("E" & LigneRef & ":H" & LigneRef).Value ' Copier Coller valeurs
    End With
    Unload UserForm1
End Sub
L'évolution est de transformer la mois prévu en date, puis prendre le plus récent entre prévu et réalisé.
NB : Dans votre fichier il y a une erreur sur Prévu ligne 8 : AOUT au lieu d' AOÛT, j'ai rectifié, et prolongé la liste déroulante.
 

Pièces jointes

  • Classeur1KatochV3.xlsm
    28.5 KB · Affichages: 2

Katoch

XLDnaute Junior
Bonsoir Sylvanu !

Sylvanu ,
Tout d'abord chapeau bas pour le dernier envoi qui est top !
Correspond à 100% désormais à mon attente.
Vos explications aussi me servent à mieux comprendre ce qui reste encore pour moi du charabia !
Je suis admiratif !

Je me permets de vous solliciter encore...
Voir ma demande dans l'onglet Sylvanu du fichier joint.

A bientôt
 

Pièces jointes

  • KATOCH Formation.xlsm
    151.6 KB · Affichages: 2

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
en y rajoutant le précédent codage que vous m'avez envoyé.
Au vu de la complexité, on ne peut que s'en inspirer, pas l'utiliser in extenso.
En PJ un essai à tester, le temps de traitement est relativement court. ( 60ms sur mon vieux PC pour "A")
La macro s'exécute automatiquement lorsqu'on change la valeur de PIAF C2.
 

Pièces jointes

  • KATOCH Formation (V3).xlsm
    120.2 KB · Affichages: 2

Katoch

XLDnaute Junior
Re,
Qu'en est il de la PJ #7 ?
Fonctionne t-elle ?
Avant d'aller éventuellement plus loin, statuons au moins sur cette PJ.
Sylvanu,

Oui la macro Sub ExtraitDonnées() fonctionne à merveille avec les données de la source.Sur mon pc la vitesse d'extraction des données est imperceptible ! A des années lumières des macros que je réalise parfois avec l'enregistreur de macro.

Par contre lorsque je veux faire un essai de saisie d'un nom avec de nouvelles données, le clic sur le prénom me renvoie ce message box
1663262686257.png




J'imagine que la suite demandée ce matin intégrera cette macro adaptée.

Cool,vraiment cool


:
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Oups, je ne l'avais pas vu celle là. En fait moi aussi j'utilise la variable Nom, en public, d'où le conflit.
En PJ c'est rectifié, je l'ai appelée NomC2.

Quand à la synthèse, je vous laisse faire, c'est la même macro que sur la feuille PIAF mais il faut tout reconstruire, et je n'en ai pas le courage.
D'autant que je n'en vois pas la finalité. Il n'y a qu'un Titre 1.1 donc c'est janvier ou pas, donc ce qu'on a déjà dans PIAF.
 

Pièces jointes

  • KATOCH Formation (V4).xlsm
    125.6 KB · Affichages: 4

Katoch

XLDnaute Junior
SYLVANU,
Bonjour !
J'ai pu adapter votre code pour réaliser l'onglet SYNTHESE grâce à vos commentaires.
Pourriez-vous pour l'onglet SYNTHESE, réaliser le code permettant de satisfaire à cette demande :
A partir des listes déroulantes de choix Nom; Mois ; Evaluation ,
calculer et afficher pour chaque Titre (Titre1.1, Titre1.2,etc...) , le nombre de Dates Prévues ,Dates réalisées et le % Dates réalisées/Dates Prévues ?

Dans la liste déroulante Nom , il faut pouvoir choisir "tous" , idem pour la liste déroulante mois.
Pour la liste déroulante Evaluation, seul un choix sera proposé (A ou NA ou ECA)
merci de votre aide
 

Pièces jointes

  • KATOCH Formation V5.xlsm
    199.4 KB · Affichages: 5

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
Utilisez la fonction NB.SI.ENS :
Ainsi pour la feuille Synthèse :
VB:
Prévu:
=NB.SI.ENS(Source!A:A;$D$1;Source!D:D;$D$2;Source!C:C;$A5)
Prévu ET réalisé :
=NB.SI.ENS(Source!A:A;$D$1;Source!D:D;$D$2;Source!C:C;$A5;Source!E:E;"<>")
% réalisé :
(Prévu ET réalisé)/Prévu
Mais il vous faut un fichier Source plus étoffé, car avec la PJ fournie vous ne pourrez faire aucun test, la liste est beaucoup trop courte. Commencez par avoir un fichier test représentatif, avant d'y inclure ces formules.

Pour terminer, on demande sur XLD un problème/un post pour que les futurs lecteurs ne soient pas perdus.
Et là on est loin de titre de ce post : "VBA sélection via combobox"
 

Katoch

XLDnaute Junior
Re Sylvanu,

Désolé je vous importuner...

Mais le post
"VBA sélection via combobox" me semble toujours d'actualité puisque je vous demande de calculer et d'afficher un résultat suite à sélection dans des combobox.

Dans ce cas , pouvez vous , oui ou non , me proposer ce code , sans qu'il y ait de formule dans les cellules résultats ?
Comment faire pour qu'un choix "tous" puisse réaliser aussi ce code ?


Si c'est non , j'irai en faire la demande ailleurs.
Merci encore pour votre aide.

J'aime
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Vous avez deux choix:
1- Réitérer la macro du post #11 en la modifiant. Avez vous essayé ?
2- Essayez les formules du post #13. Avez vous essayé ?
Perso, je n'ai pas envie de refaire la même macro une seconde fois, c'est ce que j'ai précisé au post #11
Quand à la synthèse, je vous laisse faire, c'est la même macro que sur la feuille PIAF mais il faut tout reconstruire, et je n'en ai pas le courage.
Nous sommes bénévoles, et XLD a pour vocation d'aider. Là vous me demandez de tout faire.
Désolé, peut être qu'un autre membre pourra vous satisfaire.
 

Discussions similaires

Statistiques des forums

Discussions
315 094
Messages
2 116 146
Membres
112 669
dernier inscrit
Guigui2502