Création d'une interface

Fermé
adashame Messages postés 9 Date d'inscription samedi 1 février 2014 Statut Membre Dernière intervention 5 août 2014 - 4 août 2014 à 10:39
 Adashame - 13 août 2014 à 04:28
Bonjour,
Je suis chargé de créer un userform pour interagir avec un tableau.
Aprés quelques recherches sur le net j'ai testé quelques codes.
Le soucis c'est que l'ensemble ne fonctionne que très moyennement.
Un peu d'aide me serait d'un grand secours.
Merci
http://www.cjoint.com/14au/DHbnE6YAG7R_publipostage_usagers_23.xlsm

A voir également:

16 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
4 août 2014 à 10:53
Bonjour,

Nous avons le fichier, l'userform est là. Peux tu maintenant nous montrer ce que tu as fait, les résultats attendus etc...
0
WeaponEDGE Messages postés 113 Date d'inscription vendredi 18 juillet 2014 Statut Membre Dernière intervention 21 novembre 2014 9
Modifié par WeaponEDGE le 4/08/2014 à 11:12
Bonjour,

Si j'ai bien compris tu veux transférer les informations que t'as rempli dans ton Formulaire sur la feuille Excel ?

Ton Formulaire est un peu bordélique mais ça t'apprendra avec le temps à le mettre en forme et à l'optimiser.

Commençons par ta feuille Excel. Généralement dans un Tabelau on commence toujours par une référence unique de manière à pouvoir identifier un seul Individu. Le NOM de famille peux être commun à plusieurs personne ne faisant pas partie de la même famille.
Je suppose que le N° d'adhérant est unique pour chaque individu. je serais toi je le déplacerais en colonne A.

Ce qu'il faut savoir dans un Formulaire, c'est les code sont liés directement au objet inséré dessus contrairement au Macro que tu mets dans un Module.

Si tu double cliques dans le coprs du formulaire, il va t'ammener à la page où tous les code de celui ci sont stocké.

Tu remarqueras en haut de cette feuille deux menu déroulant :
Celui de Gauche te permet de sélectionner l'objet (formulaire, Label, Bouton, ComboBox, TextBox,etc..) par rapport auquel tu veux déclencher une macro et le menu déroulant de droite de permet de sélectionner l'évênement déclencheur (Click, double clique, à l'activation, à l'initialisation, avant la fermeture, etc...).

La sélection de ces 2 éléments créera automatiquement un SUB - END SUB dans lequel tu devras rentrer le code que tu souhaites.

Par exmple : Tu veux que lorsque tu click sur ton bouton VALIDER les infos soient transféré.

Donc dans le menu de gauche sélectionnes "CommandButton1" et dans le menu de Droite "Click".

ça va créer ceci :

Private Sub CommandButton1_Click()

End Sub


Tu n'as plus qu'à rentrer ton code pour transférer les données.

Pour transférer le nom du TextBox1 vers ta feuille en cellule A1 par exemple, ça donnerais :

range("A1") = TextBox1

A prtir de ces base essayes de concevoir ton code et reviens vers nous pour plus d'informations.
0
adashame Messages postés 9 Date d'inscription samedi 1 février 2014 Statut Membre Dernière intervention 5 août 2014
4 août 2014 à 14:01
Bonjour,
merci de vous êtres intéressés à mon sujet et de votre franchise.
J'ai repris cette interface au début, en suivant les premières pistes de travail qui vous m'avez données.
Le tableau s'alimente normalement quand je rempli les textboxs.
maintenant c'est l'interaction avec ce tableau que je n'arrive pas à formaliser.
Les boutons "Premiere" Suivante" Précédente" et "dernière" sont destinés à naviguer dans le formulaire, à rechercher un enregistrement (pour le modifier ou le supprimer ou pour simple consultation.
Je vous joint ce que j'ai fait et attend vos commentaires.
Merci d'avance.

https://www.cjoint.com/?0HeoaWs8b8g
0
WeaponEDGE Messages postés 113 Date d'inscription vendredi 18 juillet 2014 Statut Membre Dernière intervention 21 novembre 2014 9
Modifié par pijaku le 4/08/2014 à 14:52
J'ai jeté un coup d'oeil sur le premier jet..
Ca commence à prendre forme, On va y aller par étapes

La première Etape est que ton tableau qui va recevoir els information soit nickel. Il faut être certainsque les colonne ne vont pas changer par la suite.

Deuxième étape : assures toi que le Nom des TextBox porte le même N° que la colonne où il vont être copié. Je m'explique Le TextBox nommé "TextBox1" doit être le champ Imatriculation, Le TexBox2 doit être le NOM, Le Texbox3 Le prénom, Etc...

3ème Etape : Alimentation dynamique de la ComboBox :

Avant de commencer efface ce qu'il y a dans le RowSource du ComboBox1

Copies le code suivant dans ton formulaire :

Sub UserForm_Initialize()
'Calcule le nombre de ligne que comporte le tableau en Feuille 1 par rapport au contenu de la colonne A
Nb_Ligne = Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row

'Alimente Le ComboBox
For i = 2 To Nb_Ligne
ComboBox1.AddItem Sheets(1).Cells(i, 1)
Next i
End Sub

Ce code s'active à l'initialisation du Userform
Tu remarqueras qu'avec ce code tu n'auras plus de blanc dans ta liste déroulante.

Une fois ces éléments rectifié renvoie la nouvelle version du fichier.
0
adashame Messages postés 9 Date d'inscription samedi 1 février 2014 Statut Membre Dernière intervention 5 août 2014
5 août 2014 à 21:44
Bonjour,
merci WeaponEDGE d'accepter de me guider dans cette tâche.
Donc, oui les colonnes sont dans leurs positions définitive.
J'ai suivi tes instructions et c'est vrai que la liste est optimale.
Voilà le résultat.

https://www.cjoint.com/?DHfvRqrn3j1
0
WeaponEDGE Messages postés 113 Date d'inscription vendredi 18 juillet 2014 Statut Membre Dernière intervention 21 novembre 2014 9
6 août 2014 à 11:16
Bonjour,

Ok , je préfère y aller doucement pour que t'assimile la fonction de chaque code.

Il y a en core des blanc dans le ComboBox à cause de la dernière ligne de ton Tableau mais je pense qu'une fois que t'auras rentré les données définitive la colonne A n'aurras plus de blanc.

On va pouvoir attaquer le code du bouton VALIDER

Quand tu double clik dessus ça te renvoie à ton code qui dit :

Private Sub CommandButton1_Click()
Range("A2") = TextBox22
Range("B2") = TextBox1
Range("C2") = TextBox2
Etc...
End Sub


Petite parenthèse :
Le Sub CommandButton1_Click() signifie que la macro se déclenche lorsque tu click sur le bouton nommé CommandButton1 (tu peux voir ce nom dans la fenêtre Propriétés dans la rubrique Name. Par défaut Name et Caption sont identique mais Name est le nom de l'objet alors que Caption et le Titre qui apparait dessus.

Bomme tu peux le constater dans ton code la cellule A2 recoit les donnés de la TextBox22, la cellule B2 celle de la TextBox1, etc..
Commence par renommer tes TextBox dans le champ name (par Exemple TB1, TB2, TB3) de tel sorte que la cellule A2 recoive les données de TB1, B2 de TB2, C2 de TB3, etc...

ça va avoir son importance par la suite pour trnasférer les donnée sur la Feuil1 mais aussi pour récupérer les données lorque tu sélectionneras un numéro. Celà va permettre aussi d'alléger le code.

Une foisd les noms changé remplace la macro Private Sub CommandButton1_Click() par celle ci :

Private Sub CommandButton1_Click()
'Calcul la position de la première ligne disponible dans le Tableau en feuille 1
Dernière_Ligne = Sheets("Feuil1").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
'calcule le nombre de colonne qui compose ton tableau en fonction des titres en ligne 1 de la feuille 1
Nb_Colonne = Sheets("Feuil1").Cells(1, Columns.Count).End(xlUp).Offset(1, 0).Column

'Transfert les données du Userform1 vers la feuille 1 dans la dernière ligne de ton tableau
For i = 1 To Nb_Colonne
Sheets("Feuil1").Cells(Dernière_Ligne, i) = UserForm1.Controls("TB" & i)
Next i
End Sub


Comme tu peux le constater le code est beaucoup plus petit

Je te laisse actualiser ton fichier et vois la suite après

Si t'as des questions n'hésites pas.
0
WeaponEDGE Messages postés 113 Date d'inscription vendredi 18 juillet 2014 Statut Membre Dernière intervention 21 novembre 2014 9
7 août 2014 à 08:20
Bonjour, j'ai remarqué une petite errreur dans mon codeà ce niveau :

Nb_Colonne = Sheets("Feuil1").Cells(1, Columns.Count).End(xltoLeft).Offset(1, 0).Column

Remplace la partie en gras
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bonjour

Modification de la combo

Sub UserForm1_Initialize()
'Calcule le nombre de ligne que comporte le tableau en Feuille 1 par rapport au contenu de la colonne A
With Feuil1 ' Feuil1 = CodeName de l'onglet
Nb_Ligne = .Cells(Rows.Count, 1).End(xlUp).Row
'Alimente Le ComboBox
For i = 2 To Nb_Ligne
ComboBox1.AddItem .Cells(i, 1)
Next i
End With
End Sub

Private Sub ComboBox1_Change()
L = ComboBox1.ListIndex + 2
With Feuil1
TextBox22 = .Range("A" & L)
TextBox1 = .Range("B" & L)
TextBox2 = .Range("C" & L)
'
'
'
'
'
'
End With
End Sub

A+
Maurice
0
Bonjour,
j'ai suivi les consignes que vous m'avez transmis. Quand je valide une saisie un message d'erreur s'affiche.
Je ne comprend pas. J'ai pourtant vérifié toutes les texboxs mais ........???????
Voilà en pièce jointe ce que cela donne.
Merci de votre aide

http://cjoint.com/?0Hhs0JvOecM
0
Re
tu a un probleme car tu a 33 texbox & 34 colonne dur

Private Sub CommandButton1_Click()
'Calcul la position de la première ligne disponible dans le Tableau en feuille 1
Dernière_Ligne = Feuil1.Cells(Rows.Count, 1).End(xlUp).Row + 1
'calcule le nombre de colonne qui compose ton tableau en fonction des titres en ligne 1 de la feuille 1
Nb_Colonne = Feuil1.Cells(1, Columns.Count).End(xlToLeft).Column - 1
'Transfert les données du Userform1 vers la feuille 1 dans la dernière ligne de ton tableau
For i = 1 To Nb_Colonne
Feuil1.Cells(Dernière_Ligne, i) = Controls("TB" & i)
Next i
End Sub

A+
Maurice
0
re

Modif de la combo Change

Private Sub ComboBox1_Change()
L = ComboBox1.ListIndex + 2

For i = 1 To 33
Controls("TB" & i).Value = Feuil1.Cells(L, i)
Next i
End Sub

A+
Maurice
0
Bonjour,
j'ai bien pris compte de l'erreur dans l'organisation de mon tableau et du code qui va avec.
J'ai corrigé et effectivement cela marche sans difficulté. Maintenant quand je suis sur un enregistrement et que je souhaite le corriger cela me crée une nouvelle ligne.
Et-il possible d'intervenir sur une ligne et d'enregistrer les modifications apportées?
Merci.

http://cjoint.com/?0HitKQ4YYtb
0
Bonjour
Voila des petite modife a toi de jouer

http://cjoint.com/?3HjoLyr2saV

A+

Maurice
0
Bonjour,
merci Maurice pour tout le boulot que tu as fait.
Par contre je ne comprend pas le bouton édition PDF.
je clique dessus mais cela ne donne rien.
Doit-je refaire toutes les formules en RECHV dans la fiche?
Si je souhaite supprimer un enregistrement dans sa totalité (toute la ligne) comment je fait?
Merci pour ton aide.

http://cjoint.com/?0HjvpE8FWRu
0
Bonjour

http://cjoint.com/?3Hkli5UykG6

evite les sapin de NÖEL

Pour l'edition il faut mettre au point la feuil Var a toi de voir

et apres on voie le pdf

A+

Maurice
0
Bonjour Maurice,
message reçu pour le sapin de Noël, de toute façon c'est pas la saison.
J'ai mis la fiche en ligne. Je trouve les commandes "Modification" et "Supprimer" très efficace.
Maintenant serait-il possible de voir pour l'édition PDF.
Te serait-il possible de m'expliquer le fonctionnement des boucles qui ont été utiliser sur ce classeur?
J'en voit l'efficacité et l'agencement global mais de là à pouvoir les réutiliser ailleurs.......????????
Je ne vois pas ce qu'est la feuil Var......
Merci beaucoup.

http://cjoint.com/?0HlltFDKNTa
0
Bonjour

Voila avec une listview je prefere
J'esper que ses activer chez toi

la macro PDF est pour excel => 2007

http://cjoint.com/?3HllVtDM4PB

A+
Maurice
0
Bonjour Maurice,
je suis sous excel 2013 et il me dit que l'objet n'existe pas. J'ai fait des recherches et à priori pour les classes listview il y a un problème après 2007.
Vaut-il mieux revenir à office 2007?
Merci
0
re bonjour Maurice,
en lançant le programme (clic sur "Gestion fiche") j'obtient "erreur 424" objet requis.
l'erreur est signalée au niveau de
Private Sub UserForm_Activate()
With ListView1
Private Sub UserForm_Activate()
With ListView
.view=3 (surligné en jaune).
Merci de ton aide
0