création d'un formulaire a partir d'une base

S

sauny

Guest
Bonjour à tous
J'ai une base sous excel et je souhaiterais mettre les infos de chaque ligne dans un formulaire sur un nouvelle feuille

ma base:
nom n°adhérent voiture maison bateau
toto 12A oui non oui
titi 11B non non non
tete 54F oui oui oui

mon formulaire dans une nouvelle feuille renommeé "nom - n°adherent":
nom: toto
n°adherent: 11B

voiture: oui
maison: non
bateau: oui
...etc

Il faudrait que ce soit automatique : un bouton à cliquer et tous les formulaires sont crées à la suite...

Si vous aviez des pistes (assez précises, je suis un gros nullos...)

Je vous remercie
 
K

K@d

Guest
Bonjour,

faire cette manipulation n'est pas très compliqué, ce qui l'est plus, c'est la mise en forme derrière...
Un bout de solution (il est nécessaire au préalable d'avoir nommé la plage de cellules contenant tous les NOMS en Liste_Noms)

Sub Create_Formulaires

Dim vcell as object
Dim StrNom as string
Dim StrNum as string
Dim StrVoiture as string
Dim StrMaison as string
Dim StrBateau as string

'pour chaque personne enregistrée
For each vcell in range('Liste_Noms")

's'il y a un nom
If vcell.value<>"" then

'on prend les différentes données de la ligne (colonne par colonne)
StrNom=vcell.value '''le nom de la personne
StrNum=vcell.offset(0,1).value '''son numéro adhérent
StrVoiture =vcell.offset(0,2).value '''voiture Oui/Non
StrMaison =vcell.offset(0,3).value '''maison Oui/Non
StrBateau =vcell.offset(0,4).value '''bateau Oui/Non

'on ajoute une nouvelle feuille
Sheets.Add

'on renomme la feuille
activesheet.name= StrNom & " - " & StrNum

'on met les intitulés
Range("A1").value="Nom :"
Range("A2").value="N° adhérent"
Range("A4").value="Voiture ?"
Range("A5").value="Maison ?"
Range("A6").value="Bateau ?"

'et les valeurs !
Range("B1").value=StrNom
Range("B2").value=StrNum
Range("B4").value=StrVoiture
Range("B5").value=StrMaison
Range("B6").value=StrBateau

endif

next Vcell

End Sub

J'espère avoir pu répondre en partie au problème ! Il ne reste plus qu'à insérer un bouton et y affecter cette macro sur la feuille comportant les noms. Je reste à disposition pour toute information supplémentaire...
Bon courage !!!

Clément

"S'il n'y a pas de solution, c'est qu'il n'y a pas de problème."
 
S

sauny

Guest
Merci pour cette première réponse !!!

2 choses de +:

-j'ai un petit souci avec "For each vcell in range('Liste_Noms")": s'affiche soit en jaune, soit en rouge...(ça dépends des " ' () )

-j'ai déjà un formulaire de prêt:
->il faut donc que je spécifie pour chaque colonne l'emplacement dans le formulaire ???
 
K

K@d

Guest
Re,

oups, la synthaxe.... Quand on ne tape pas sous VBA, on ne voit pas le résultat !

Lire
For each vcell in range("Liste_Noms")
et non...
For each vcell in range('Liste_Noms") --> guillemets à utiliser

Si il y a un formulaire de prêt (appelons la feuille 'Formul' pour l'exemple):

1- Nommer les cellules cibles (ex : 'Nom','Adhérent'...)
2- Changer tout le code comme suit :

Sub Create_Formulaires

Dim vcell as object
Dim StrNom as string
Dim StrNum as string
Dim StrVoiture as string
Dim StrMaison as string
Dim StrBateau as string
Dim IntNbfeuilles as integer

'pour chaque personne enregistrée
For each vcell in range('Liste_Noms")

's'il y a un nom
If vcell.value<>"" then

'on prend les différentes données de la ligne (colonne par colonne)
StrNom=vcell.value '''le nom de la personne
StrNum=vcell.offset(0,1).value '''son numéro adhérent
StrVoiture =vcell.offset(0,2).value '''voiture Oui/Non
StrMaison =vcell.offset(0,3).value '''maison Oui/Non
StrBateau =vcell.offset(0,4).value '''bateau Oui/Non

'on active le formulaire
Sheets("Form").Select

IntNbfeuilles=thisworkbook.worksheets.count

'on la copie à la fin du classeur
Sheets("Form").Copy After:=Sheets(IntNbfeuilles)

'on renomme la feuille
activesheet.name= StrNom & " - " & StrNum

'on met les intitulés

'et les valeurs !
Range("Nom").value=StrNom
Range("Adherent").value=StrNum
Range("A_Voiture").value=StrVoiture
Range("A_Maison").value=StrMaison
Range("A_Bateau").value=StrBateau

endif

next Vcell

End Sub


'on sélectionne le formulaire existant
Sheets("Form").Select

'on renomme la feuille
activesheet.name= StrNom & " - " & StrNum

'on met les intitulés
Range("A1").value="Nom :"
Range("A2").value="N° adhérent"
Range("A4").value="Voiture ?"
Range("A5").value="Maison ?"
Range("A6").value="Bateau ?"

'et les valeurs !
Range("B1").value=StrNom
Range("B2").value=StrNum
Range("B4").value=StrVoiture
Range("B5").value=StrMaison
Range("B6").value=StrBateau

endif

next Vcell

End Sub

*-------------------------------------*

Bonne continuation !!!

Clément

"S'il n'y a pas de solution, c'est qu'il n'y a pas de problème."
 
K

K@d

Guest
Problème de copier - coller :

- bien lire Sheets("Formul") et non "Form"
- bien arrêter la reprise du code au premier End Sub...
- Lire For each vcell in range("Liste_Noms") --> même erreur

Désolé... :0(

Clément
 
S

sauny

Guest
je regarde tout ça et je reviens vers toi si j'ai des soucis...
vu la facilité avec laquelle tu me réponds, il me viens d'autres idées pour améliorer mon petit fichier mais chaque chose en son temps...

Merci à toi pour ton aide !!!!
 
S

sauny

Guest
Salut à tous
Ca y est !!!
J'ai réussi à faire ce que je voulais et j'ai meme rajouté d'autres petites choses à l'interieur

Merci beaucoup Clément, tes lignes de code m'ont beaucoup aidé...

Mais il me vient une autre idée: sur mon formulaire, en fonction des réponses données (oui,non,...), il y a un système de notation avec un total en fin de formulaire.
Je souhaiterais maintenant récupérer dans un fichier tous les totaux de toutes les feuilles créées afin d'avoir une vue globale.

merci
 

Discussions similaires

Statistiques des forums

Discussions
312 493
Messages
2 088 952
Membres
103 989
dernier inscrit
jralonso