XL 2010 Formulaire de modification

cathodique

XLDnaute Barbatruc
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
Repose en paix
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
 

Pièces jointes

  • Sans titre.png
    Sans titre.png
    10.5 KB · Affichages: 51
Dernière édition:

cathodique

XLDnaute Barbatruc
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
 

Pièces jointes

  • Modifications .xlsm
    97.3 KB · Affichages: 36
Dernière édition:

cathodique

XLDnaute Barbatruc
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.
 

Pièces jointes

  • Modifications_jpb388.xlsm
    42.5 KB · Affichages: 20

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
 

Pièces jointes

  • Modifications-Chti160.xlsm
    83.8 KB · Affichages: 23

cathodique

XLDnaute Barbatruc
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:

cathodique

XLDnaute Barbatruc
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:

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 Barbatruc
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:

Discussions similaires

Réponses
3
Affichages
609

Statistiques des forums

Discussions
314 588
Messages
2 110 988
Membres
111 002
dernier inscrit
Lolo73i