Récupérer données depuis plusieurs instances d'un formulaire

195application.7z (565.78 Ko)

Bonjour à tous,

Je travaille actuellement sur une application Excel à déployer sur une tablette-PC. Cependant, je suis perdu.

Besoin : l'operationnel doit pouvoir controler 1 OU plusieurs colis (enregistrement des données dans deux bases de données différentes puis dans une feuille excel contenant un modèle (pour pouvoir exporter))

J'ai un seul objet UserForm, je crée autant d'instance du formulaire que j'ai de colis à controler :

Cas 1 :

1 seul colis à controler -> affichage du formulaire -> enregistrement dans la base de données -> enregistrement dans une autre feuille excel contenant un modèle de présentation (PV) -> export en PDF de ce modèle contenant les informations enregistrées par l'utilisateur.

Cas 2 :

2 ou plusieurs colis à controler -> affichage du formulaire -> enregistrement dans la base de données -> enregistrement dans une autre feuille excel contenant un modèle de présentation (PV) -> puis je reboucle pour pouvoir controler le second colis (création d'une nouvelle instance du formulaire, second enregistrement BDD, duplication de l'onglet excel contenant le modèle PDF à exporter (afin de ne pas écraser les données du premier onglet modèle PDF contenant déja les données du premier colis), export du PDF

La où je me perds vraiment, c'est lorsque je manipule les instances de mon formulaire :

...
ElseIf nbColisAControler >= 2 Then

                'première partie
                 Call insertion_ic("BDD-iso-conteneurs", base, CDbl(num))   'me permet d'enregistrer les données dans la base de données (colis numéro 1 à controler : OK)
                 Sheets("formulaire iso-conteneur").Visible = True 'je rends visible la feuille pour pouvoir enregistrer
                 Call imprimer_folioIC("formulaire iso-conteneur", base) 'me permets de récupérer les données de mon userform et de les mettre dans mon modèle PV dans une feuille excel afin de l'exporter en PDF

                 Call insertion_f1("BDD-folio", base, CDbl(num)) 'me permet d'enregistrer certaines données dans la base de données n°2
                 Sheets("formulaire folio 1").Visible = True 'je rends visible la feuille pour pouvoir enregistrer
                 Call imprimer_folio1 'me permets de récupérer les données de mon userform et de les mettre dans mon modèle PV dans une feuille excel afin de l'exporter en PDF

                'deuxième partie : c'est là qu'on duplique les onglets pour pouvoir mettre les données de toutes les instances dans ces feuilles excel pour ensuite exporter tout ça en PDF
                For i = 2 To nbColisAControler
                    Sheets("formulaire iso-conteneur").Select
                    ThisWorkbook.ActiveSheet.Copy after:=ActiveSheet
                    ActiveSheet.Name = "formulaire iso-conteneur " & CStr(i)
                Next i

                Dim var_temp As Integer
                var_temp = nbColisAControler

                Unload base 'je decharge mon objet formulaire pour ensuite créer mes instances de formulaire (autant d'instances crées que de colis à controler)

               On Error GoTo azerty
                For i = 2 To var_temp
                     Dim instance_iso As Object
                     Set instance_iso = New base
                     var_temp = var_temp - 1

                     instance_iso.Caption = "colis n° " & i

                     instance_iso.btnsigner_techRP.Visible = False
                     instance_iso.btnsigner_controleurTechnique.Visible = False
                     instance_iso.visa_techRP_IC.Visible = True
                     instance_iso.visa_controleurTechnique_IC.Visible = True

                     instance_iso.Show
                Next i

azerty:         MsgBox ("fini")

            End If

Je bloque sur l'accès à mes différentes instances. Pouvez-vous m'aiguiller sur comment m'y prendre pour pouvoir accéder instance par instance, et d'enregistrer les données contenues dans chacune de mes instances au fur et à mesure :

saisie données colis 1 -> formulaire 1 -> enregistrement n°1 BDD (2 feuilles excel différentes) ->enregistrement dans feuille excel (modèle PDF) -> fermer formulaire

saisie données colis 2 -> instance du formulaire 1 (1) -> enregistrement n°2 BDD (1 feuille excel) ->enregistrement dans feuille excel (modèle PDF) -> fermer formulaire

saisie données colis 3 -> instance du formulaire 1 (2) -> enregistrement n°3 BDD (1 feuille excel) ->enregistrement dans feuille excel (modèle PDF) -> fermer formulaire

saisie données colis 4 -> instance du formulaire 1 (3) -> enregistrement n°3 BDD (1 feuille excel) ->enregistrement dans feuille excel (modèle PDF) -> fermer formulaire

saisie données colis 5 -> instance du formulaire 1 (4) -> enregistrement n°4 BDD (1 feuille excel) ->enregistrement dans feuille excel (modèle PDF) -> fermer formulaire

Merci pour votre aide, c'est une assez grosse application à réaliser et je commence à prendre l'eau.

Je suis pret à vous contacter par message privé afin de pouvoir en discuter oralement par téléphone par exemple

Merci pour votre retour,

Cordialement,

Excellium

Je ne vois pas ce qui justifie plusieurs instances d'un formulaire pour traiter plusieurs colis ! Les colis sont traités l'un après l'autre...

Cordialement.

Bonjour MFerrand,

Merci d'avoir pris le temps d'étudier mon souci. Malheuresement, je m'en sors toujours pas.

Je bloque à cet endroit précisément :

            '*******************************************************

            If nbColisAControler = 1 Then

                Call insertion_ic("BDD-iso-conteneurs", base, CDbl(num))
                Sheets("formulaire iso-conteneur").Visible = True
                Call imprimer_folioIC("formulaire iso-conteneur", base)

                Call insertion_f1("BDD-folio", base, CDbl(num))
                Sheets("formulaire folio 1").Visible = True
                Call imprimer_folio1

                GoTo exportPDF

            ElseIf nbColisAControler >= 2 Then

                'première partie
                 Call insertion_ic("BDD-iso-conteneurs", base, CDbl(num))
                 Sheets("formulaire iso-conteneur").Visible = True
                 Call imprimer_folioIC("formulaire iso-conteneur", base)

                 Call insertion_f1("BDD-folio", base, CDbl(num))
                 Sheets("formulaire folio 1").Visible = True
                 Call imprimer_folio1

                'deuxième partie
                 For i = 2 To nbColisAControler
                     Sheets("formulaire iso-conteneur").Select
                     ThisWorkbook.ActiveSheet.Copy after:=ActiveSheet
                     ActiveSheet.Name = "formulaire iso-conteneur " & CStr(i)
                 Next i

                Dim var_temp As Integer
                var_temp = nbColisAControler

                Unload base

                For i = 2 To var_temp
                    base.Show
                Next i

             End If

            '*******************************************************

C'est à dire que lorsque j'ai plusieurs colis à controler, il faut que je puisse les saisir UN à UN (donc affichage du formulaire + enregistrement dans la base de données + enregistrement dans modèle PDF dans feuille excel + fermer formulaire).

Sachant que s'il y a 2 ou plusieurs colis à controler, afin de pouvoir les enregistrer dans le modèle PDF dans la feuille excel, il faut que je puisse d'abord créer l'onglet (à savoir dupliquer la trame du modèle PDF qui est dans une feuille excel -> pour 1 colis c'est OK, mais s'il y a 2 ou plusieurs colis, il va falloir dupliquer autant de fois la trame PDF qu'il y a de colis à controler afin de pouvoir exporter tout le PV).

Je bloque malheuresement ici. C'est surtout sur l'itération que je bloque.

En attente de te lire,

Cordialement.

J'ai eu la très très mauvaise idée de charger ton fichier et de l'ouvrir ! et je me retrouve avec une interface modifiée ! et modifiée sur tous les classeurs ouverts !

J'ai déjà eu l'occasion de m'exprimer à diverses reprises sur ce sujet ! Il est la moindre des choses que ce type de manoeuvres soit à la fois clairement signalé et désactivé dans les fichiers fournis sur le forum !

Je pense en outre qu'avant de faire profiter les autres de ce genre de facéties, il conviendrait que ceux qui en usent aient une maîtrise assurée de VBA et des fonctions auxquelles ils font appel pour ces manipulations que je considère violentes à l'égard de celui qui les subit... et qu'ils ne mettent jamais ce genre de choses en oeuvre sans être capable d'enregistrer les paramètres trouvés à l'ouverture et de les rétablir exactement à la fermeture !

Je n'ai pas vu d'instruction visant à rétablir à la fermeture ! Et de fait fermer le fichier n'a rien rétabli du tout !

Je viens de lire ton message et effectivement j'avais oublié de préciser que je modifiais les paramètres d'affichage d'Excel .

Désolé pour le désagrément. C'est vrai que je me suis habitué à cet affichage donc j'ai zappé de le préciser clairement dans le message.

Demain je modifierai le fichier de telle sorte qu'à la fermeture du fichier, il puisse rétablir les paramètres d'affichage par défaut.

Mis à part ce léger souci ( ), je bloque toujours sur mes formulaires...

Quelqu'un peut-il m'aider à comprendre ce qui ne va pas ?

Merci d'avance....

Rechercher des sujets similaires à "recuperer donnees instances formulaire"