XL 2013 Code VBA pour comparer un formulaire avant et après modifications ?

Ismagapi

XLDnaute Junior
Bonjour au forum,

Je reviens vers vous avec un autre soucis pour mon formulaire.

J'alimente un formulaire Userform Multipage grâce à une ComboBox qui reprend chaque ligne de ma Base de données.

Je souhaiterai que Si j'effectue des modifications dans mon formulaire, et que je change de Ligne dans mon ComboBox il y ait un Message qui me dit qu'il y a eu des modifications et qu'elles n'ont pas été enregistrées.

Soit par comparaison entre le formulaire pré rempli à l'ouverture de mon Contact et avant le changement de contact par la ComboBox.

Soit par l'intermédiaire d'un message qui indique que l'on a pas cliqué sur le bouton 'modifier'.

A l'heure actuelle dans mon fichier le formulaire peut passer d'un contact à un autre que l'on ait validé les modifications ou pas. En plus, les modifications ne sont pas gardés

en mémoire.

Je ne sais pas si je suis assez clair.

Merci à tous ceux qui me rendront ce grand service.
 

Ismagapi

XLDnaute Junior
maintenant que j'ai réglé l'affichage et la modification de ma textbox47

Tu as fait quoi ?
et de quelle modfi tu parles : je ne comprends pas bien la demande

Bah en fait j'ai supprimer
If ComboBox1 <> "" Then Exit Sub
Dans le combobox24

Voila mon code pour ComboBox24 , Textbox46 et Texbox47 qui sont lier entre elles

Private Sub ComboBox24_Change()
If rz = 99 Then Exit Sub
' If ComboBox1 <> "" Then Exit Sub
'TextBox47_Change
End Sub

'Affichage ONGLETS
Private Sub TextBox46_Change()

If rz = 99 Then Exit Sub
Inc = 0
If Me.TextBox112 <> "" Then Inc = Inc + 1
If Me.TextBox104 <> "" Then Inc = Inc + 1
If Me.TextBox96 <> "" Then Inc = Inc + 1
If Me.TextBox88 <> "" Then Inc = Inc + 1
If Me.TextBox80 <> "" Then Inc = Inc + 1
If Me.TextBox72 <> "" Then Inc = Inc + 1
Me.TextBox46 = Inc

TextBox47_Change

If TextBox46.Value = "6" Then
UserForm1.MultiPage1.Page5.Visible = True
UserForm1.MultiPage1.Page6.Visible = True
UserForm1.MultiPage1.Page7.Visible = True
UserForm1.MultiPage1.Page8.Visible = True
UserForm1.MultiPage1.Page9.Visible = True
UserForm1.MultiPage1.Page10.Visible = True
Else
If TextBox46.Value = "5" Then
UserForm1.MultiPage1.Page5.Visible = True
UserForm1.MultiPage1.Page6.Visible = True
UserForm1.MultiPage1.Page7.Visible = True
UserForm1.MultiPage1.Page8.Visible = True
UserForm1.MultiPage1.Page9.Visible = True
UserForm1.MultiPage1.Page10.Visible = False
Else
If TextBox46.Value = "4" Then
UserForm1.MultiPage1.Page5.Visible = True
UserForm1.MultiPage1.Page6.Visible = True
UserForm1.MultiPage1.Page7.Visible = True
UserForm1.MultiPage1.Page8.Visible = True
UserForm1.MultiPage1.Page9.Visible = False
UserForm1.MultiPage1.Page10.Visible = False
Else
If TextBox46.Value = "3" Then
UserForm1.MultiPage1.Page5.Visible = True
UserForm1.MultiPage1.Page6.Visible = True
UserForm1.MultiPage1.Page7.Visible = True
UserForm1.MultiPage1.Page8.Visible = False
UserForm1.MultiPage1.Page9.Visible = False
UserForm1.MultiPage1.Page10.Visible = False
Else
If TextBox46.Value = "2" Then
UserForm1.MultiPage1.Page5.Visible = True
UserForm1.MultiPage1.Page6.Visible = True
UserForm1.MultiPage1.Page7.Visible = False
UserForm1.MultiPage1.Page8.Visible = False
UserForm1.MultiPage1.Page9.Visible = False
UserForm1.MultiPage1.Page10.Visible = False
Else
If TextBox46.Value = "1" Then
UserForm1.MultiPage1.Page5.Visible = True
UserForm1.MultiPage1.Page6.Visible = False
UserForm1.MultiPage1.Page7.Visible = False
UserForm1.MultiPage1.Page8.Visible = False
UserForm1.MultiPage1.Page9.Visible = False
UserForm1.MultiPage1.Page10.Visible = False
Else
If TextBox46.Value = "0" Then
UserForm1.MultiPage1.Page5.Visible = True
UserForm1.MultiPage1.Page6.Visible = False
UserForm1.MultiPage1.Page7.Visible = False
UserForm1.MultiPage1.Page8.Visible = False
UserForm1.MultiPage1.Page9.Visible = False
UserForm1.MultiPage1.Page10.Visible = False
End If
End If
End If
End If
End If
End If
End If
End Sub

Private Sub TextBox47_Change()

If rz = 99 Then Exit Sub

'If ComboBox1 <> "" Then Exit Sub
TextBox47.Value = (Val(ComboBox24.Value) - Val(TextBox46.Value))
If TextBox47.Value < 0 Then
TextBox47.BackColor = &HFF&
Else
TextBox47.BackColor = &HFF00&
End If
End Sub

Du coup cela valide correctement ma textbox47 mais cela me le compte comme une modification du contact et de ce fait me demande de valider la modification pour chacun des contacts aa,ab,ba,bb ..... En fait un peu pareil que pour les villes et les codes postaux tout à l'heure
Comment faire pour éviter la vérification
 

CHALET53

XLDnaute Barbatruc
Je ne comprends pas bien l'enchainement des opérations à partir du nombre d'agréments (combobox24) avec les conséquences sur TExtbox46 et 47
A priori, en création ou en modification on ne pas intervenir sur ces deux textboxs. Comment sont-elles mises à jour ?
 

Ismagapi

XLDnaute Junior
Je ne comprends pas bien l'enchainement des opérations à partir du nombre d'agréments (combobox24) avec les conséquences sur TExtbox46 et 47
A priori, en création ou en modification on ne pas intervenir sur ces deux textboxs. Comment sont-elles mises à jour ?
En fait, on indique dans la création ou la modification du contact le nombre d'enfant que l'agrément permet d'accueillir Combobox24 (1 ou 2 ou 3 ou 4 ou 5 ou 6)
Dans TextBox46 je vais rechercher le nombre d'enfants qui sont en accueil en interrogeant les Textbox qui contiennent du texte donc le nom de l'enfant (Textbox 72, 80, 88, 94, 102, et 114). En fonction de cela un chiffre m'indique s'il y a 1,2,3,4,5,6 accueils en cours.
Dans Textbox47 c'est juste la différence entre l'agrément et les places occupées TextBox47.Value = (Val(ComboBox24.Value) - Val(TextBox46.Value))

Triple problèmes,
1) le chiffre de la Textbox46 foire lorsque il n'y a aucun accueil donc lorsque il n'y a aucun nom dans texbox 72, 80, 88, 94, 102, et 114.

2) 2nd probléme, la textbox47 ne s'actualise pas en direct lorsque l'on change une valeur soit du Combobox24 ou le texbox46

3) Lorsque je vais venir copier / coller mes données avec le nom des enfants et l'agrément, le formulaire va me demander de valider chaque contact car modif.
 

ChTi160

XLDnaute Barbatruc
Bonjour

je n'ai pas encore tout compris Lol
mais j'ai constaté dans ta Procédure Combobox1_Change
une anomalie
il manque la Colonne Cible du Combobox1
Tu as ComboBox1.List(ligneinit) , j'ai mis ComboBox1.List(ligneinit, 0) ,je ne sais pas ce que ça doit retourner donc Mettre 1 si Premier Colonne
VB:
If flg2 = 1 Then flg2 = 0: flag = 1: nm = "": ComboBox1 = ComboBox1.List(ligneinit, 0): MsgBox ("Vous devez valider Les modifications ou Quitter"): Exit Sub
ensuite tu as :
[/code=vb]With Me.ComboBox1
.ColumnCount = 2 'donc Combobox de 2 colonnes
Me.Label280.Visible = False
For J = 3 To WS.Range("C" & Rows.Count).End(xlUp).Row
.AddItem WS.Range("C" & J) 'Colonne 1(0)
.List(.ListCount - 1, 1) = J 'Colonne 2(1)
Next J
'Stop
If Me.ComboBox1.ListCount < 1 Then Exit Sub
col = 2
Dim a() 'Ici pourquoi un tableau a() et pas Dim a
a = Me.ComboBox1.List 'Ici tu récupéres les données des 2 Colonnes du Combobox
nbcol = Me.ComboBox1.ColumnCount 'UBound(a, 2) - LBound(a, 2) + 1
Call TriCD(a(1, 5), UBound(a), col - 1, False, nbcol) 'ici tu as a(1,5)[/code]
a(1,5) si je ne me trompe correspond à Ligne 1 colonne 5 du tableau a?????
peux tu m'expliquer ?
Bonne fin de journée
jean marie
Edit ; j'ai remplacé ligneinit par lignedep pas sur de comprendre si Ok
VB:
If nm <> "" Then nminit = ComboBox1: lignedep = ComboBox1.ListIndex: Call lecture
If flg2 = 0 Then nm = "": GoTo suite
If flg2 = 1 Then flg2 = 0: flag = 1: nm = "": ComboBox1 = ComboBox1.List(lignedep, 0): MsgBox ("Vous devez valider Les modifications ou Quitter"): Exit Sub
 
Dernière édition:

ChTi160

XLDnaute Barbatruc
Re
pour ce qui est du nombre d'accueils
Dans TextBox46 je vais rechercher le nombre d'enfants qui sont en accueil en interrogeant les Textbox qui contiennent du texte donc le nom de l'enfant (Textbox 72, 80, 88, 94, 102, et 114). En fonction de cela un chiffre m'indique s'il y a 1,2,3,4,5,6 accueils en cours.
pourquoi ne pas compter le Nombre de Pages "Accueil X" affichées ?
jean marie
 

Ismagapi

XLDnaute Junior
Bonjour Chti160,
Je ne peux pas car c'est justement le chiffre de la TextBox46 qui affiche le nombre d'onglet à ouvrir ou à fermer.
Par exemple Si elle récupère 3 texte dans les Textbox 72,80,88 cela veut dire qu'il y a 3 accueils et donc ouvre 3 onglets (Accueil1, Accueil2, Accueil3 )
 

ChTi160

XLDnaute Barbatruc
Re
un petit fichier avec quelques modifications qui diminuent le nombre de lignes (par exemple dans TextBox46_Change )
pas facile avec ces nm ,Flag1 et Flag2 comprends pas tout Lol
jean marie
 

Pièces jointes

  • Fichier Modifié BDD Chti160.xlsm
    542.4 KB · Affichages: 13

Ismagapi

XLDnaute Junior
Merci beaucoup Jean Marie,
Tu vas peut être pouvoir m'aider grandement dans mon usine à gaz.
J'ai essayé ton fichier modifié, cela marche super mais lorsque je veux descendre dans mon combobox1 avec les flèches, la textbox47 se comporte comme une modification dans mon formulaire ...Résultat, je dois faire valider la modification du contact alors que je n'ai rien modifié comment supprimer cela (ça doit etre les flag, les nm,....). Bref je suis perdu dans mon code. Je voudrais revenir à un truc plus simple.
Juste importer les données de ma 'base de données2'
trier par ordre alphabétique ma combobox1

Faire en sorte que la personne qui modifie le formulaire n'oublie pas de sauvegarder ses modifs. (Je crois que je vais revenir à l'idée du Combobox1 visible ou non si on clique sur un Textbox en laissant juste les boutons Modifier et Enregistrer actifs car les flags et tout le toutim j'y comprend rien.

RE Exporter mes données dans ma base de données après avoir modifié les Textbox et Combobox.

Bref, si une âme charitable peux m'aider à réaliser cela, je le vénérerais à l'infini !!!!
 

CHALET53

XLDnaute Barbatruc
Effectivement, l'usine à gaz vient de ta volonté de refuser le changement dans la combobox1 si les éventuelles modifications (du client précédemment à l'écran) n'ont pas été préalablement validées.
Ceci implique de comparer la situation (pour toutes les rubriques) avant et après pour détecter d'éventuels changements
D'où l'usine à gaz avec les innombrables tests
Dans la solution présente, je propose simplement une alerte si changement de client (choix entre continuer avec le nouveau client ou revenir à la situation précédente et valider les modifications
Cette approche permet de remettre ta combobox24 à sa situation antérieure (If combobox24="" then exit sub)
 

Pièces jointes

  • Ismagapi fichier-test Quatro.xlsm
    487.2 KB · Affichages: 6

ChTi160

XLDnaute Barbatruc
Bonjour Ismagapi
Bonjour le Fil ,le Forum
Une vidéo de ce que j'ai imaginé pour le traitement des "Accueils" je n'ai pas vérifié la conformité des Données (Ex : Nombre d’agréments par rapport au Nombre d'enfants en Charge)
je n'ai pas encore trouvé comment réaliser la Suppression ou l'Ajout d'un Accueil et la remise en forme de l'ensemble des Accueils (Mais j'y Travaille) Lol
Bonne journée
jean marie
 

Pièces jointes

  • Image Enfants.gif
    Image Enfants.gif
    540.9 KB · Affichages: 13

Ismagapi

XLDnaute Junior
Bonjour CHTI160,
Formidable et merci déjà pour ton boulot qui me laisse pensif et plein d'idées qui me viennent. Je me demande si je ne vais pas utiliser ton idée pour poursuivre ce formulaire pour les Ass. Fam et créer en plus un formulaire des enfants accueillis ce qui me permettra de dissocier la saisie des données.
Pourrais tu s'il te plait m'adresser le fichier en pièce jointe que tu as déjà réaliser comme cela je peux continuer à travailler dessus ?
Merci dans tous les cas pour m'aider à réaliser mon projet, ton aide et celle du forum m'est précieuse.
 

Discussions similaires

Réponses
17
Affichages
653
Réponses
2
Affichages
244

Statistiques des forums

Discussions
312 223
Messages
2 086 407
Membres
103 201
dernier inscrit
centrale vet