XL 2010 Formulaire de modification

cathodique

XLDnaute Accro
Bonjour,

Je bute pour mettre au point un formulaire de modification (UsfFiche).
L'idée est la suivante:
1- à l'ouverture du formulaire la combobox1 contiendra le n° des écritures comptables
2- la sélection d'un n° peuplera la Listbox1 (un bug survient si on clique sur toupie de combobox2 ou 3 avant le choix n° dans combobox1)
3- pour faciliter les modifications les combobox 2 et 3 seront alimentées respectivement à partir des feuilles "CodeComptes" et "Initiateurs".
4- au choix combobox2, combobox2 prend le n° de compte, textbox3 le libellé et textbox9 le montant du prévisionnel/budget.
5- au clic sur le bouton Modifier Ligne, mettra à jour la ligne correspondante dans la listBox
Car je voudrais faire au préalable une vérification du total des montants des textboxs TxtCtrlMontant et Textbox7, avant d’effectuer les modifications dans la feuille "Comptes".

Cela fait un bon moment que je suis dessus sans parvenir à vraiment résoudre le problème.

En vous remerciant par avance.

EDIT: MERCI DE CONSULTER CE POST
 
Dernière édition:

BOISGONTIER

XLDnaute Barbatruc
Bonsoir,

Sur Excel 2019 /Windows 10, on a une erreur de compilation

Option Explicit
'positionnement userform à côté cellule active
Private Declare Function GetDC& Lib "user32.dll" (ByVal hWnd&)

Private Declare Function FindWindow& Lib "User32" Alias "FindWindowA" (ByVal lpClassName$, ByVal lpWindowName$)


Private Declare Function GetDeviceCaps& Lib "gdi32" (ByVal hDC&, ByVal nIndex&)



Boisgontier
 

Fichiers joints

Dernière édition:

cathodique

XLDnaute Accro
Bonsoir Boisgontier,:)

Merci pour ton retour, mais je t'avoue que je n'ai rien compris à tes lignes de codes et encore moins au message (image).

Je suis sur windows 7 64 bits, Excel 2010 32 bits.

Encore merci d'avoir consulté mon post.

Bonne soirée.;)
 

jpb388

XLDnaute Accro
Bonjour à tous
Même problème que Boisgontier j'ai donc modifié tes api
essaye ceci

Private Sub ComboBox2_Change()
If Me.ComboBox2.ListIndex = -1 Then Exit Sub
Me.TextBox3.Value = ComboBox2.List(Me.ComboBox2.ListIndex, 1)
Me.TextBox9.Value = ComboBox2.List(Me.ComboBox2.ListIndex, 2)
End Sub

bonne soirée
 

Fichiers joints

Dernière édition:

cathodique

XLDnaute Accro
Bonjour, Boisgontier:), jpb388:),

@BOISGONTIER : Le calendrier n'étant pas de moi, je n'avais pas compris que tes lignes de code concernées ce dernier. Merci.

@jpb388 : Merci beaucoup pour ton aide. Mais certains problèmes persistent.

Étant donné que le calendrier autonome pose problème, je l’ai supprimé.

Problème1 : après un premier choix en combobox1, les items s’affichent en listbox1 et la textbox ‘’TxtCtrlMontant’’ affiche le montant total. Cependant, au clic sur une ligne ce montant devient nul (0,00). Je n’ai pas compris pourquoi.

Problème2 : suite à la première manipulation, si on fait un autre choix en combobox1 et qu’on clique sur une ligne alors le code plante (voir images).
er1.JPG

er2.JPG
Merci pour votre aide. Bonne journée.
 

Fichiers joints

ChTi160

XLDnaute Barbatruc
Bonjour Cath
Bonjour le Fil,le Forum
voilà ou j'en été hier soir , je n'ai pas eu de problème avec les API (2010)
Pas encore tout compris pour la répartition des éléments ,mais avec des explications ça devrait avancer.
Teste et dis nous !
je n'ai travaillé qu'a la gestion des données vers le Userform (pas de modification , suppression etc) à venir Lol
jean marie
 

Fichiers joints

cathodique

XLDnaute Accro
Bonjour,

Merci beaucoup Jean-Marie pour tes efforts.;)

Je n’ai eu aucun bogue avec ton fichier, merci. Mais ce n’est pas mon souhait (total Ecritures=dépenses+recettes, donc le résultat est faux).

Voilà, le remplissage de la bd (feuille compte) s’effectue via une userform. Le process était le suivant (aidé par Boisgontier) :

Une facture peut comporter plusieurs lignes. Le total de la facture est saisi dans une textboxA, ensuite après avoir renseigné les combobox et textboxs, au clic sur un bouton on alimente une listbox. La somme des montants de la listbox est comparée au total de la facture (textboxA), s’ils sont égaux, un bouton est activé pour permettre le transfert vers la bd. / ! \ il y a 2 colonnes pour les montants, une pour dépenses (col 6) et une pour recettes (col 7), le type d’opérations est en col 10 et le total de la facture en col 9.

Concernant ce formulaire de modification pour lequel je sollicite votre aide, je voudrais faire à peu près la même chose.

1- Choisir un n° de facture (combobox1 contiendra les n° de facture sans doublon)

2- Après avoir effectuer un choix dans la combobox1, la listbox affichera les lignes de la facture concernée, la textbox TxtCtrlMontant affichera le total des lignes de la listbox (dépenses col6 ou recettes col7).

3- Au clic sur une ligne, les données seront transmises aux différents contrôles (combo et textbox) où s’effectueront les modifications.
Nb : les combobox2 et 3 contiendront la liste des données fonction du type de l’opération (dépenses ou recettes), respectivement à partir des feuilles CodeComptes et Initiateurs .

4- Au clic sur le bouton Modifier Ligne, les données de la ligne concernée de la listbox seront modifiées.

5- Si le montant calculé de la textbox TxtCtrlMontant est égal total de la facture col9 figurant dans textbox7. Alors le bouton Valider les modifications sera actif pour modifier les lignes de la listbox dans la bd (feuille comptes).

En vous remerciant, j’espère avoir mieux expliqué mon problème.

Bonne journée.

edit @ChTi160 : J'essaie de comprendre ton code, dans initialize si j'ai bien compris les lignes ci-dessous, effectuent un tri des données. Pour info, ceci n'est pas nécessaire car dans le fichier original, un tri est effectué à chaque ajout de données.
VB:
With ShInit
      DerLgn = .Cells(.Rows.Count, 1).End(xlUp).Row
      DerCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
      With .Range(.Cells(1, 1), .Cells(DerLgn, DerCol))
         .Sort .Cells(1, 2), xlAscending, , , , , , xlYes
         TabInit = .Value
      End With
   End With

   With ShBd
      DerLgn = .Cells(.Rows.Count, 1).End(xlUp).Row
      DerCol = .Cells(5, .Columns.Count).End(xlToLeft).Column
      With .Range(.Cells(5, 1), .Cells(DerLgn, DerCol))
         .Sort .Cells(2, 1), xlAscending, .Cells(2, 2), , xlAscending, , , xlYes
         TabGeneral = .Value
      End With
   End With
 
Dernière édition:

ChTi160

XLDnaute Barbatruc
Bonjour Cath
Merci de ces precisions , je vais y regarder.
Pour ce qui est du tri, si le tri se fait sur les bonnes colonnes cela ne gene pas, sinon tu mets un apostrophe devant les lignes qui commencent par ”.Sort ”
Jean marie
 

cathodique

XLDnaute Accro
Rebonjour Chti160:),

Merci de t’intéresser à mon problème. Le tri s'effectue sur la 2ème colonne pour les 2 feuilles.
Je te l'ai signalé juste pour alléger le code.
Encore merci.;)

edit: Merci d'Ajouter ce code afin que l'affichage du formulaire soit identique au fichier original. c-à-d affichage plein écran pour visionner toutes les colonnes de la Listbox.
VB:
Private Sub UserForm_Activate()
   Dim ctl As Control
   Dim ratiow As String
   Dim ratioh As String
   Set UserActif = Me
   ratiow = Application.Width / Me.Width
   ratioh = Application.Height / Me.Height
   Me.Left = 0
   Me.Top = 0
   Me.Width = Application.Width
   Me.Height = Application.Height
   For Each ctl In Me.Controls
      ctl.Left = ctl.Left * ratiow
      ctl.Top = ctl.Top * ratioh
      ctl.Width = ctl.Width * ratiow
      ctl.Height = ctl.Height * ratioh
      ctl.Font.Size = ctl.Font.Size * ratioh
   Next
End Sub
 
Dernière édition:

cathodique

XLDnaute Accro
Bonsoir Boisgontier:),

Très gentil de ta part. Merci beaucoup.

Le code plante toujours au changement de la combobox1 puis au clic dans la listbox.

Je vais revoir mon approche du problème.

Encore merci. Bon week-end.;)
 

ChTi160

XLDnaute Barbatruc
Bonsoir Cath
Bonsoir le Fil(JB) ,le Forum
j'ai aussi constaté lors des tests un problème .
message :
"Impossible de définir la propriété Value . Propriété non Valide"
je pense que cela vient de la non mise a jour des données du ComboBox2 .
Tester passage du N° d'écriture 1 à 6 , les Numéros de Compte , n'étant pas mis à jour le N° ex : 7010 n'est pas dans la Liste du ComboBox2 .
jean marie
 

cathodique

XLDnaute Accro
Rebonsoir JB:),

Merci pour ton aide. Je pense avoir comment ça plante, mais je me l'explique pas. Le message et la ligne où se produit l'erreur est au post #5

J'avais aussi une erreur dans la macro ci-dessous corrigée (est-ce bon?). Parce qu'il y a 2 colonnes distinctes: Dépenses et Recettes.
VB:
Private Sub TotalFacture()
   Dim i As Byte
   Dim t As Single   'déclare la variable T (Total) / Type à adapter
   With ListBox1   'prend en compte la ListBox1 (à adapter)
      If .ListCount = 0 Then
         t = 0
      Else
         For i = 0 To .ListCount - 1   'boucle sur tous les lignes de la ListBox1
            If .Column(9, i) = "Dépenses" Then
               t = t + CDbl(.Column(5, i))   'définit le total T (à adapter car tu parles de la colonne 7 et la c'est la "7ème" colonne)
            Else
               t = t + CDbl(.Column(6, i))
            End If
         Next i   'prochaine ligne de la boucle
      End If
   End With   'fin de la prise en compte de la ListBox1
   TotalFact = t
End Sub
Dans la bd pratiquement toutes les écritures sont des Dépenses et une seule Recettes (n°6).
Si au premier choix en combobox1 ça concerne des lignes dépenses et qu'on clique dans la listbox le plantage ne se produit pas.
Ensuite si on sélectionne la n°6 qui est une recette, dès que l'on clique dans la listbox le plantage se produit.

Si à l'ouverture du formulaire on commence par choix la n°6 recettes, clique dans la listbox puis sélection par ex: n°2 Dépenses et clic dans la listbox le plantage survient.

Je commence à désespérer.

Encore merci.

edit: @ChTi160 : Bonsoir pas vu, Merci beaucoup. C'est surement, ce que tu dis. J'avoue, je suis saturé. Cela fait un bon mois (pas tous les jours) et je ne m'en sors pas. Merci à toi.
 
Dernière édition:

ChTi160

XLDnaute Barbatruc
Re
Ne te decourage pas !
Tu avances et c est bien !
Je regarde ton fichier des que possible(dimanche) pas avant.
Je verrai alors si tu as reussi a finaliser.
Jean marie
 

jpb388

XLDnaute Accro
Bonjour à vous tous,Boisgontier et chti160
étant absent c'est dernière 48 h je n'ai pu te répondre de suite
mais tu es en bonne main avec Boisgontier et chti160
Bon WE
jp
 

ChTi160

XLDnaute Barbatruc
Bonjour Cath
Bonjour le Fil ,le Forum
Merci JP , j’espère , que tu vas bien !
Cath ,pourquoi une procédure (TotalFacture)alors que tu peux faire cela lors du chargement de la ListBox .
Peux tu me dire ce qui doit figurer dans ces contrôles Total ,Contrôle Montants et Total du Frame Ligne à Modifier ?
Ensuite lorsque tu choisis un N° dans le ComboBox1 que doivent contenir les ComboBox "Compte" et "Initiateur "
Met l'exemple de la sélection des N°2 et N° 6 .

Merci
Bonne Journée
jean marie
 

cathodique

XLDnaute Accro
Bonjour, Boisgontier:), Jpb388:), ChTi160:),

Merci de vous intéresser à mon problème et votre aide.

La feuille ‘’Comptes’’ est alimentée à partir d’un formulaire (aidé par Boisgontier pour alimenter la ListBox).

Le processus était le suivant:

Une facture peut comporter plusieurs lignes. Le total de la facture est saisi dans une textboxA, ensuite via des comboboxs et textboxs les renseignements d’une ligne de facture sont complétés. Au clic sur un bouton on alimente la ListBox. La somme des montants de la listbox est comparée au total de la facture (textboxA), s’ils sont égaux, un bouton est activé pour permettre le transfert des lignes de la Listbox vers la feuille comptes.
Cath ,pourquoi une procédure (TotalFacture)alors que tu peux faire cela lors du chargement de la ListBox .
J’avais cette procédure dans le 1er formulaire, je l’ai réutilisé.

Lors de la saisie d’une facture des erreurs peuvent être commises (sauf pour total de la facture).

L’idée est de sélectionner une facture en combobox1 ex :N°2 qui correspond à une dépense (que l’on retrouve sur la feuille comptes en colonne J (9) et le total de la facture est repris sur chaque ligne de la facture en colonne I (8).

Au choix de n°2, Affichage dans la listbox des lignes de la n°2. Cette dernière étant une dépenses, la combobox2 doit contenir les données concernant une dépense à partir de la feuille CodeComptes et la combobox3 à partir de la feuille Initiateurs . Et ce, afin de faciliter le remplissage des différents contrôles (frame1).

Au choix d’une ligne dans la listbox, les contrôles (frame1) sont renseignés. On doit pouvoir modifier le compte (combobox2=items dépenses), qui aura pour effet de compléter les textbox3 (libellé) et textbox6 (Budget/prévi). La combobox3 contiendra les initiateurs dépenses.

ex: affichage combobox2 (comporte 3 colonnes dont une largeur= 0, non visible). On aura le n° de compte, le libellé et le budget/prévi (non visible). Dans le cas n°2 pour dépenses (colonne 8).

Nb : la textbox7 (total) ne sera pas accessible. En effet, On ne doit pas pouvoir modifier le total d’une facture.

Les textbox4 et 5 seront alternativement visible/invisible suivant le type d’opération (dépenses/recettes) (que je mettrai plus tard). La sommation pour dépenses est la colonne 4 de la listbox.

Pour la n°6, c’est une recette. C’est le même raisonnement sauf qu’il faille récupérer les données Recettes pour alimenter la combobox2 et 3. La sommation concernera la colonne 5 (listbox) au lieu de 4.

J’espère que j’ai été plus claire cette fois-ci et surtout que mon raisonnement ne soit pas tordu.

Mes remerciements. Bon week-end.;)
 

jpb388

XLDnaute Accro
Bonsoir à tous
j'en suis à la modification de la ligne listbox
je ne comprend pas bien ta phrase
5- Si le montant calculé de la textbox TxtCtrlMontant est égal total de la facture col9 figurant dans textbox7. Alors le bouton Valider les modifications sera actif pour modifier les lignes de la listbox dans la bd (feuille comptes).
si on change le prix il y aura forcément une différence
Merci Chti160 tout va bien j'espère qu'il en est de même pour toi
 

Fichiers joints

cathodique

XLDnaute Accro
Bonsoir, Merci pour tous vos efforts à me venir en aide.
En effet, il est bien difficile de comprendre si on vous explique mal la problématique.
5- Si le montant calculé de la textbox TxtCtrlMontant est égal total de la facture col9 figurant dans textbox7. Alors le bouton Valider les modifications sera actif pour modifier les lignes de la listbox dans la bd (feuille comptes)
Je ne suis pas arrivé à ce point, il s'agit du bouton qui se trouve dans la Frame1.

Pour mieux comprendre mon problème, si tu observes bien la feuille 'comptes', pour par exemple la facture N°1. Il s'agit d'une dépense, on retrouve le type en colonne J (et sur l'userform en textbox8). En colonne F (dépenses) on trouve le montant de la facture (et sur l'userform en textbox4). ici j'ouvre un parenthèse: Il s'agissait d'une recette la colonne correspondante sur la feuille est la colonne G et sur l'userform la textbox5.
La colonne I, représente le total de la facture n°1. Le total d'une facture est repris pour chaque ligne de la facture et qui se retrouve sur l'userform en textbox7(total).
Etant donné, qu'il n'est pas autorisé de modifier le total d'une facture mais permis de corriger les comptes, l'initiateur, le montant d'une ligne de la facture. Les modifications doivent s'effectuer dans la listbox. Si et seulement si, le total des lignes de la listbox est égal au montant initial (col I sur la feuille et textbox7 sur l'userform).

J'espère que j'ai mieux expliqué.

Merci beaucoup.

Bonne soirée.
 
Haut Bas