Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Userform avec combobox

JBL07

XLDnaute Occasionnel
Bonjour à tous !

Je fais appel à nouveau à vos compétences..
Voici un classeur de suivi bancaire, épuré au max car l'original est plus complexe
J'ai souhaité insérer un userform pour faciliter la saisie des nouvelles écritures

Il y a donc un bouton/macro "Saisie" qui ouvre une nouvelle ligne de tableau vierge en Ligne 10, dans laquelle les infos saisis dans le Userform doivent s'implémenter
Et un bouton/macro " Chrono" qui après saisie retrie le tableau chronologiquement et remets en ordre la colonne Q qui m'indique le solde

Je rencontre 2 soucis :

- les 2 combo avec listes dépendantes ( Catégories dont dépend S/Catégorie ) n'affichent pas les listes ( qui se trouvent dans la feuille BD2 ), donc je ne peux pas saisir toutes mes infos
_ Si je saisi de nouvelles données en ligne 10 avec le Userform, la saisie générée ne s'inclue pas dans le tri "Chrono", et se place en haut du tableau, faussant tout

Pour finir, je souhaiterais que les 2 cellules débit / crédit affiche et valide des sommes directement dans le format monétaire

Voilà, ça fait beaucoup, mais je suis dessus depuis des heures sans parvenir à régler le tout... si qq se sent de coder ça pour moi, ce serait super
Merc par avance de vos réponses !
 

Pièces jointes

  • Comptes - 7.xlsm
    930.1 KB · Affichages: 64
Solution
re
bonjour
si tu réfléchi une seconde tu te rend compte qu'il y a ( entre autres) erreur dans le raisonnement
comment tu peux vouloir nourrir N et O alors que l'un est débit l'autre crédit
du fait dans ta saisie tu est obligé de mettre "0" dans l'un ou dans l'autre selon un achat ou une entrée
je parle même pas du non contrôle de la validité de la date et j'en passe et des meilleures ailleurs dans le code aussi

le raisonnement n'a rien a voir avec vba soit on fait les choses dans le bon sens soit on le fait pas dans le bon sens et là c'est le crach bien évidement
VB:
Private Sub CBValider_Click()
    If Not IsDate(TextBox4) Or Len(TextBox4) < 10 Then MsgBox "la date n'est pas valide": Exit Sub
    If MsgBox("La...

JBL07

XLDnaute Occasionnel
Oui je sais, c'est pourquoi en message #2 j'ai renvoyé un fichier en précisant avoir corrigé une petite erreur et annoncé que la seconde PJ était la bonne - Mais je rectifie avant de tester vos propositions :

Private Sub CBValider_Click()
If MsgBox("La nouvelle saisie est-elle confirmée ?", _
vbYesNo, "Demande confirmation de saise") = vbYes Then
With Sheets("Ecritures")
.Range("B10").Value = CDate(TextBox4)
.Range("E10:G10").Value = Array(CboComptes, CboCatégories, CboSousCat)
.Range("I10").Value = Array(TextBox1)
.Range("L10").Value = CboModePaie
.Range("N10:O10").Value = Array(TextBox2 * 1, TextBox5 * 1)
.Range("N10:O10").NumberFormat = "#,##0.00 $"
End With
End If
Unload Me
'FMSaisie.Show vbModeless
End Sub
 

patricktoulon

XLDnaute Barbatruc
re
bonjour
si tu réfléchi une seconde tu te rend compte qu'il y a ( entre autres) erreur dans le raisonnement
comment tu peux vouloir nourrir N et O alors que l'un est débit l'autre crédit
du fait dans ta saisie tu est obligé de mettre "0" dans l'un ou dans l'autre selon un achat ou une entrée
je parle même pas du non contrôle de la validité de la date et j'en passe et des meilleures ailleurs dans le code aussi

le raisonnement n'a rien a voir avec vba soit on fait les choses dans le bon sens soit on le fait pas dans le bon sens et là c'est le crach bien évidement
VB:
Private Sub CBValider_Click()
    If Not IsDate(TextBox4) Or Len(TextBox4) < 10 Then MsgBox "la date n'est pas valide": Exit Sub
    If MsgBox("La nouvelle saisie est-elle confirmée ?", _
              vbYesNo, "Demande confirmation de saise") = vbYes Then
        With Sheets("Ecritures")
            .[B10].Value = DateValue(TextBox4)
            .[E10:G10].Value = Array(CboComptes, CboCatégories, CboSousCat)
            .[I10].Value = TextBox1
            .[L10].Value = CboModePaie
            With .[N10:O10]
            .Value = Array(IIf(Val(TextBox2) > 0, Val(TextBox2), ""), IIf(Val(TextBox5) > 0, Val(TextBox5), ""))
            .Cells.NumberFormat = "#,##0.00 $"
            End With
        End With
    End If
    Unload Me
End Sub
je précise que j'ai testé ça fonctionne
et encore perso je ferait une verif de tout les control afin que la ligne soit dûment remplie!!!
 

Staple1600

XLDnaute Barbatruc
Bonjour à toi aussi patricktoulon

=>patricktoulon
c'est fatiguant de ne pas savoir faire, un pb peut en cacher un autre en vba !!
Laisse supposer que JB07 est un padawan en VBA, non?
C'est donc normal qu'il essaie à l'aune de ses connaissances, non?
Le bon sens (ou pas) n'a rien à voir avec cela.
On a tous été débutant un jour
Et pis, pendant la tréve des confiseurs, faut être gentil tout plein!
 

patricktoulon

XLDnaute Barbatruc
re

oui dans une ligne de plusieurs cells contiguës j'ai toujours utilisé un array(surtout avec des tableaux structurés c'est tellement plus simple
les iif c'est justement pour éviter les erreur de "rien*1"
et quoi que là encore "val" selon le séparateur décimal va donner l'entier ,on a donc encore un problème ici de contrôle de validité de chaîne numérique

perso je m'ennuierais pas étant donné que il y a plusieurs area (donc non contiguës)
je met dans le tag de chaque controls la lettre ou le numéro de colonne et
exemple
for each ctrl in me.controls
if ctrl.tag<>"" then
cells(10,ctrl.tag)=ctrl.value'ou .text
end if
next

là y a plus de iif plus d'array ou quoi que ce soit
mais la question de la ligne "10" reste d'actualité
testé avec le tag
VB:
Private Sub CBValider_Click()
    If Not IsDate(TextBox4) Or Len(TextBox4) < 10 Then MsgBox "la date n'est pas valide": Exit Sub
    If MsgBox("La nouvelle saisie est-elle confirmée ?", _
              vbYesNo, "Demande confirmation de saise") = vbYes Then
        For Each ctrl In Me.Controls
            If ctrl.Tag <> "" Then Sheets("Ecritures").Cells(10, ctrl.Tag) = ctrl.Value    'ou .text
        Next
        Sheets("Ecritures").[N10:O10].NumberFormat = "#,##0.00 $"
    End If
    Unload Me
End Sub
 

Pièces jointes

  • Comptes - 7 bis.xlsm
    899.9 KB · Affichages: 6
Dernière édition:

JBL07

XLDnaute Occasionnel
Hello Patricktoulon !

Comme le dit avec beaucoup de tact Staple, je suis un p'tit bleu.
Si je connaissais plus de choses ( un jour peut-être mais qd je lis vos échanges, je mesure mon ignorance dans le domaine... ), j'apporterais mon aide au lieu de la demander pour la moindre ligne qui coince
Ceci dit, au-delà de la petite impression de m'être fait sermonner , tes corrections fonctionnent nickel, je vous remercie donc énormément tous les 3, toi Stanple et Chalet53, pour votre support plus que précieux, et le temps consacré !
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…