XL 2010 ComboBox, TextBox...Là c'est du costeaud pour moi...SOS

jeanba

XLDnaute Occasionnel
Bonjour à tous,

Je suis toujours dans mon projet, vu que le webmaster n'a pas répondu à ma demande ...
Alors, j'ai tâtonné jusqu'ici avec l'aide des uns et des autres. Mais, j'arrive à un autre niveau je crois.

Voici le problème:

1 - Je dois saisir les données dans un USF et les stocquer dans les feuilles concernées en fonction de l'ID caisse sélectionnée ET du mois d'inventaire...
Par exemple, si je saisis les données de la Caisse CP:

a) je dois pouvoir sélectionner sur 3 listes ComboBox de mon USF 3 choses:
a1) La liste des Caisses (USF11_ComboBox1) et le résultat de ma sélection apparaître en USF11_16, juste à côté sur l'USF)
a2) La liste des dates d'inventaire (USF11_ComboBox2
a3) La liste des compteurs autorisés (en l'occurences les responsables de caisses) en ComboBox 3 et la date du jour de la saisie apparaître en bas à gauche en TextBox17

b) lorsque je cliquerai sur Enregistrer, je dois raffaîchir la feuille "Billetage CP" et "Ranger" les données saisies dans la colonne N, précisément, la plage N8:N20


c) en saisie des données d'inventaire, après avoir rentré le nombre d'unités comptées, le montant appraît sur chaque ligne concernées dans des TextBox14 à 26 (En effet, puisqu'en Quittant l'USF, on ne devrait plus modifier ces données, je prévois donc que sur mon USF, l'user puisse contrôler que les chiffres qu'il rentre au fur et à mesure sont bien correctes, grâce aux résultats qui apparaissent en saisie dans la colonne "Montant" de l'USF)


2- Bouton ENREGISTRER
En cliquant sur Enregistrer, je RANGE les données saisie dans la feuille appropriée, mais les données sont encore modifiables.

3- Bouton QUITTER
Il ne fait pas qu'un Unload classique. Il verrouille également les cellulles qui ont reçu les données saisies et en interdit la modif.

Voilà en gros mon gros souci qui m'occupe l'esprit depuis des jours.
J'ai tenté de baragouiner un code pour afficher les listes des ComboBox tel que lu ci et là, mais ça fonctionne pas..

Alors, je viens à vous, ma communauté XLNaute qui me fait tant de bien! Biensûr, le fichier est joint...

Merci par avance!
Jeanba
 

Pièces jointes

  • Billetage.xlsm
    41.5 KB · Affichages: 74

jeanba

XLDnaute Occasionnel
Je viens de tester le fichier réactualisé.
On s'approche drôlement de ce que je souhaite vraiment faire!
J'apprécie beaucoup l'idée d'une cellule de contrôle du total de tous les calculs en ligne! C'est génial!

Cependant, le bouton Enregistrer, une fois valider, se plante. Et il faut Quitter et relancer pour qu'il prenne en compte une nouvelle entrée.
Par ailleurs, j'ai vu que tu as insérer le choix de l'année en A. Or, ici, les inventaires seront mensuels, c'est pourquoi j'ai laissé la liste de 1 à 12 à l'origine.
L'idée derrière est que je puisse laisser à l'user le soin de choisir le mois d'inventaire...
Merci beaucoup!
 

jeanba

XLDnaute Occasionnel
Bonjour mon Cher Rogueiro et bonjour à tout le forum,

Je crois que nos messages d'hier soir se sont croisés.
En effet, en revoyant le dernier fichier que tu as envoyé hier soir, je dirai que c'est tout simplement parfait et pour un débutant comme moi, très impressionnant! Comment fais-tu pour, en seulement quelques lignes de codes, simplifier ce qui m'a pris la tête pendant des jours?
Qu'à cela ne tienne, je peux considérer mon souci sur cet USF comme résolu, reste juste 2 détails:

1) je souhaite que le nom du compteur qu'on sélectionne en dernier avant d'enregistrer soit stocké en cellule 22 de l'intersection correspondante.
Je m'explique: si j'ai sélectionné la Caisse "CP" et la date d'inventaire "31/01/2016", il faudrait que l'information concernant le compteur de cette caisse soit stockée en D22. Et, une fois que l'user clique sur le bouton Quitter, toutes les info saisies deviennent verrouillées. J'ai pensé faire une macro avec le bouton "Quitter", une macro qui traite les propriétés "Format de cellule\Protection\Verrouillé + Masqué", mais je suis sûr qu'il y a plus simple...

2) je souhaite qu,'après avoir appuyé sur "Enregistrer":
- les données soient bien enregistrées (et c'est bien le cas actuellement
- le formulaire reste actif pour permettre de saisir les données d'inventaire de la caisse suivante (parce que c'est une obligation de les compter toutes!); et le formulaire de saisie ne disparaît qu'avec les boutons "Annuler" ou "Quitter"
Je crois que passer ces 2 soucis, ce sera parfait!
Merci encore et encore!

Jeanba
 

jeanba

XLDnaute Occasionnel
Aïe!

Bonjour Rogueiro et bonjour à tous!
J'assiste à un truc étrange:
J'ai reproduit dans le projet final tout le code que tu m'as donné, que ce soit dans le module simple ou le module de classe ainsi que les ComboBox.
Dans mon projet final, UserForm1 devient USF11. Cette modification a été apportée dans le fichier test reçu de toi et tout s'exécute à merveille.
Mais, étrangement, lorsque je lance l'exécution de la macro sur le projet final, il plante avec ce message d'erreur
upload_2016-12-15_15-9-29.png


Et le Débogage pointe sur la ligne suivante:
upload_2016-12-15_15-10-35.png


Alors je tourne en rond, à comparer ligne par ligne les 2 codes et je m'agace car tout est strictement identique.. !!!
Existerait-il une sous logique qui défierait la logique binaire?

Merci par avance..
Jeanba
 

grisan29

XLDnaute Accro
bonsoir Jeanba et rigueiro
as tu vraiment changer tout tes USF1 en USF11, pour le faire dans tous le fichier dans vba tu fait ctrl+f et la tu lance un module de recherche
quand il s'ouvre tu clic sur "remplacer " alors une 2ème ligne s'affiche
dans la 1ère tu met USF1 et dans la 2ème USF11 et tu coche "projet en cours" puis tu clic sur remplacer et ca le fera un par un tu clic sur remplacer tout , alors tout sera remplacer
 

jeanba

XLDnaute Occasionnel
Je continue mon petit monologue...
Sur le site, j'ai vu un cas de résolution de cette erreur 13. Il est conseillé d'ajouter avant toute ligne de code, ceci:
"On Error Resume Next"

Du coup, àa ne bloque plus. Par contre, les multiplicafation et l'addition finale, il ne les fait pas...
Que c'est étrange!
 

grisan29

XLDnaute Accro
bonjour JeanBa
ou as tu vu que tu fais un monologue,car un e discussion au début on se dit bonjour
juste une question
avec ceci écrit
Code:
If UserForm1.Controls("USF11_TextBox" & i)
c'est possible que ca marche pas
car tous les textbox sont nommés sauf 2
 

jeanba

XLDnaute Occasionnel
Au secours mon cher Rogueiro!
Qu'est-ce qui peut expliqyuer un tel mystère?

(J'ai trouvé une résolution de l'erreur 13. Il fallait ajouter - et je ne comprends toujours pas pourquoi sur ta feuille ce n'était pas nécessaire - :
"On Error Resume Next"

Donc, aujourd'hui, mon seul problème reste qu'il ne fait pas les calculs ligne par ligne ni le total de l'USF...et il n'affiche aucun message d'erreur!
 

jeanba

XLDnaute Occasionnel
J'ai regardé à nouveau, en renommant les 3 textbox comme les autres.
Et en désactivant la ligne de code "On Erreur Resume Next", il bug de nouveau.
Je crois que cette instruction désactive les calculs attendus...

Je donne ci-dessous tous les codes associés à l'USF11:


Code associé directement à l'USF11:

Code:
   Dim txtB(1 To 13) As New Classe1 'Pour 13 TextBox

   

    Private Sub Userform_Initialize()
    Dim DateInv As Range
    Dim CodeCaisse As Range
    Dim Responsables As Range
    Dim n As Long
   
    With Sheets("PARAMETRES")
        Set DateInv = .Range("D52:D63")
        Set CodeCaisse = .Range("A52:A56")
        Set Responsables = .Range("C52:C56")
        Set IntitulCaisse = .Range("B52:B56")
    End With
   
    USF11_TextBox27.Value = Range("PARAMETRES!A50").Value
    Me.USF11_ComboBox1.List = CodeCaisse.Value
    Me.USF11_ComboBox2.List = DateInv.Value
    Me.USF11_ComboBox3.List = Responsables.Value
        For n = 1 To 13
            Set txtB(n).txtB = Controls("USF11_TextBox" & n)
        Next n
    End Sub


Private Sub CommandButton1_Click()
Unload Me
USF19.Show
End Sub


    Private Sub USF11_ComboBox1_Change()
    Select Case USF11_ComboBox1.Value
        Case "CP":
            Me.USF11_TextBox28.Value = "Inventaire de la " & Range("PARAMETRES!B52").Value
            Me.USF11_TextBox29.Value = "Total " & Range("PARAMETRES!B52").Value
           
        Case "CM":
            Me.USF11_TextBox28.Value = "Inventaire de la " & Range("PARAMETRES!B53").Value
            Me.USF11_TextBox29.Value = "Total " & Range("PARAMETRES!B53").Value
       
        Case "C01":
            Me.USF11_TextBox28.Value = "Inventaire de la " & Range("PARAMETRES!B54").Value
            Me.USF11_TextBox29.Value = "Total " & Range("PARAMETRES!B54").Value
               
        Case "C02":
            Me.USF11_TextBox28.Value = "Inventaire de la " & Range("PARAMETRES!B55").Value
            Me.USF11_TextBox29.Value = "Total " & Range("PARAMETRES!B55").Value
           
        Case "C03":
            Me.USF11_TextBox28.Value = "Inventaire de la " & Range("PARAMETRES!B56").Value
            Me.USF11_TextBox29.Value = "Total " & Range("PARAMETRES!B56").Value
    End Select
    End Sub
   
     
    Private Sub USF11_CommandButton1_Click()
    Unload Me
    End Sub
   
    Private Sub USF11_CommandButton2_Click()
    Unload Me
    USF12.Show
    End Sub
   
   
    Private Sub USF11_CommandButton3_Click()
    'Bouton enregistrer
    Select Case UCase(Me.USF11_ComboBox1.Value)
        Case Is = "CP": Sheets("Billetage CP").Activate
                EnregistrerInventaire
                Sheets("Billetage CP").Visible = False
        Case Is = "CM": Sheets("Billetage Monnaie").Activate
                EnregistrerInventaire
                Sheets("Billetage Monnaie").Visible = False
        Case Is = "C01": Sheets("Billetage C01").Activate
                EnregistrerInventaire
                Sheets("Billetage C01").Visible = False
        Case Is = "C02": Sheets("Billetage C02").Activate
                EnregistrerInventaire
                Sheets("Billetage C02").Visible = False
        Case Is = "C03": Sheets("Billetage C03").Activate
                EnregistrerInventaire
                Sheets("Billetage C03").Visible = False
    End Select
    Unload Me
    USF11.Show
    End Sub


Dans le Module 1:

Code:
Sub EnregistrerInventaire()

Dim i As Integer
Dim colonne As Integer
Dim R As Range
    With ActiveSheet
        Set R = .Rows(7).Find(USF11.USF11_ComboBox2, , xlValues, xlWhole) 'définit la recherche R (arguments à adapter)
            If R Is Nothing Then 'condition : si aucune occurrence trouvée
                MsgBox "Inexistant" 'message
                Else 'sinon
                colonne = R.Column
                MsgBox colonne
            End If
      End With
       For i = 1 To 13
        ActiveSheet.Cells(7 + i, colonne).Value = USF11.Controls("USF11_TextBox" & i).Value
   Next i
End Sub


Dans le Module de classe:


Code:
Public WithEvents txtB As MSForms.TextBox


Private Sub txtB_Change()
Dim total As Double
'Initialise la variable à 0
total = 0
'On Error Resume Next
     'Boucle de 1 a 13 pour 13 TextBox
    For i = 1 To 13
        'Si un des TextBox est différent de rien alors
        If USF11.Controls("USF11_TextBox" & i) <> "" Then
            USF11.Controls("USF11_TextBox" & i + 13).Value = Format(USF11.Controls("USF11_TextBox" & i).Value * USF11.Controls("USF11_TextBox" & i).Tag, "#,##0.00")
            'Ben le total est le total de tous les TextBox
            total = total + CDbl(USF11.Controls("USF11_TextBox" & i + 13))
        'Fin de la condition

            Else
            USF11.Controls("USF11_TextBox" & i + 13).Value = Null
        End If
    'Fin de la boucle
    Next i
        'Le TextBox "txtTotal" recoit le total
    USF11.txtTotal.Value = Format(total, "#,##0.00")

End Sub

Je mets en gras et en bleu, la ligne qui génère l'erreur si je désactiv l'instruction "On Error Resume Next"
 

Bebere

XLDnaute Barbatruc
bonsoir
un autre code pour module de classe

Code:
Private Sub txtB_Change()
    Dim total As Double
  
    'Initialise la variable à 0
    'total = 0
    If UserForm1.txtTotal.Value <> "" Then total = UserForm1.txtTotal.Value Else total = 0
    i = Mid(txtB.Name, 14)
    UserForm1.Controls("USF11_TextBox" & i + 13).Value = Format(txtB.Value * UserForm1.Controls("USF11_TextBox" & i).Tag, "#,##0.00")
    total = total + UserForm1.Controls("USF11_TextBox" & i + 13).Value
    'Le TextBox "txtTotal" recoit le total
    UserForm1.txtTotal.Value = Format(total, "#,##0.00")

End Sub
 

jeanba

XLDnaute Occasionnel
Bonsoir Bebere,

J'ai testé ton code, même résultat.
LE FAIT est que le code de Rogueiro marche très bien sur la feuille exemple que j'ai envoyé.
Mais, dès que je copie ce code et tente son exécution dans mon projet final, en pranant soin bien sûr de renommer UserForm1 en USF11, il plante en pointant la ligen déjà surlignée et indiquant l'erreur 13 "Incompatibilité de type"

J'ai remplacé dans le fichier exemple Userform1 par USF11, le code s'exécute sans souci. Alors, j'y comprends que dal!
Y-a-til un lien avec Module de classe ou c'est ailleurs que se trouverait mon problème?
 

Discussions similaires

Réponses
3
Affichages
342

Statistiques des forums

Discussions
312 291
Messages
2 086 847
Membres
103 400
dernier inscrit
MINOU WILL