Récupérer données depuis plusieurs instances d'un formulaire
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
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 !
J'ai déjà eu l'occasion de m'exprimer à diverses reprises sur ce sujet !
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 (
Quelqu'un peut-il m'aider à comprendre ce qui ne va pas ?
Merci d'avance....