| 2 jack, le 16 aoû 2005 à 13:51:03Slt! j'ai fait ce que tu m'as di sen probleme!
En fait j'ai créer une table a partir d'un tableau excel en reprenant la 1ere ligne du table dans un champs, puis la 1ere colonne ds un autre champs et enfin l'interieur de mon tableau dans un dernier champs. Dans un formulaire, je peut remplir c 3 champs et les infos entrées seront stockées dans ma table.
Le probleme est que je veux créer un bouton qui me permette de recréer un tableau sous excel en fontion des données de ma table.
J'ai trouver un code qui pourrait repondre a mes atente malheuresmen je ne comprends pas la fin...
Sub InitialiseExcel()
Dim xlApp, xlBook, xlRange As Variant 'Objets classeur
Dim xlWks, iRows, iCols, iRotate As Variant 'Objets feuille
Dim FichierXL As String
Dim Boucle, Cmpt As Integer
'
FichierXL = "C:\MonFichier.xls"
'Création de l'objet Excel (main mise sur !)
Set xlApp = CreateObject("Excel.Application")
'Création de l'objet [Fichier Excel]
Set xlBook = xlApp.Workbooks.Open(FichierXL)
'Création de l'objet [Feuille] du classeur Excel.
Set xlWks = xlBook.Worksheets(1)
'Création de la plage permise dans la feuille Excel.
Set xlRange = xlWks.Range("A1:A65535")
(A partir de la je ne comprend plus)
DoCmd.GoToRecord , , acLast
Cmpt = Forms![MonFormulaire].Recordset.RecordCount
DoCmd.GoToRecord , , acFirst
For Boucle = 1 To Cmpt
xlRange.Cells(Boucle, 1).Value = Forms![MonFormulaire].[Champs1]
xlRange.Cells(Boucle, 2).Value = Forms![MonFormulaire].[Champs2]
xlRange.Cells(Boucle, 3).Value = Forms![MonFormulaire].[Champs3]
DoCmd.GoToRecord , , acNext
Next Boucle
DoCmd.GoToRecord , , acFirst
xlApp.Visible = True
xlWks.Activate
xlRange.Cells(1, 1).Select
xlApp.DisplayAlerts = False
xlBook.SaveAs FichierXL
xlApp.Quit
xlApp.DisplayAlerts = True
Set xlRange = Nothing
Set xlWks = Nothing
Set xlBook = Nothing
Set xlApp = Nothing
MsgBox "Fin du travail"
End Sub
Mes 3 champs se nomment : zones, semaines et TAF ; ma table DonneesPreventives et mon formulaire Formulaire1
Quesque tu pense de ce code? Si tu le comprends merci de me lexpliquer..
Mici bcq de ton aide a+ Répondre à jack | 3 random, le 16 aoû 2005 à 13:57:25Il suffit sous access
de déclarer le tableau excel comme une table lièe
elle est pas belle, la vie ? Répondre à random | 4 jack, le 16 aoû 2005 à 14:19:43Je l'ai deja fait mais ca ne resou pa mon probleme au niveau du formulaire...car ce que je veux c que l'utilisateur puisse modifier/rajouter des données dans le tableau grace a un formulaire Répondre à jack | 7 Jacques, le 16 aoû 2005 à 15:34:01Jack,
Pour créer un formulaire :
Actionner la touche F11
Formulaires/Nouveau/Formulaire instantané : Tableau/
Désigner la table qui contient les informations à traiter
Valider, et c'est fini (ou presque)
A+ Répondre à Jacques | 8 jack, le 16 aoû 2005 à 15:50:01Merci bcq ca marche nickel!
Mais je voudrais automatiser cete tache en fait :
en cliquant sur un bouton, que ca me crée automatiquemen dans un fichier excel précis une nouvelle feuille (un tableau) avec les données disposé come je le souhaite (champs1 en colone, champ2 en ligne et champ3 com données)
Je c que c possible grace a un code en vba mais je sui débutan en vba (dc nul lol) et je n'arrive pas a faire fonctionner le code que l'on ma donné...
J'ai créé une table access que j'ai nommé [ MaTable ], ayant
pour champs [ Champs1 - Champs2 - Champs3 ].
J'ai créé une requête que j'ai nommé [ MaRequete ], celle-ci
récupère tous les enregistrements de ma table.
J'ai créé un formulaire que j'ai nommé [ MonFormulaire ].
Donc, le formulaire pointe sur la requête et la requête pointe
sur la table.
J'ai placé un bouton sur mon formulaire que j'ai accroché
a une procédure événementiel.
Private Sub cmd_Execute_Click()
Call Fonctions.InitialiseExcel
End Sub
Module Fonctions :
'Afin de renseigner la propriété [RecordCount]
DoCmd.GoToRecord , , acLast 'Capture le nombre d'enregistrement
Cmpt = Forms![MonFormulaire].Recordset.RecordCount 'Retourne au premier enregistrement
DoCmd.GoToRecord , , acFirst
' Boucle sur tous les enregistrements
For Boucle = 1 To Cmpt 'Place en position [Boucle,1] la valeur du premier champs
xlRange.Cells(Boucle, 1).Value = Forms![MonFormulaire].[Champs1] 'Place en position [Boucle,1] la valeur du second champs
xlRange.Cells(Boucle, 2).Value = Forms![MonFormulaire].[Champs2] 'Place en position [Boucle,1] la valeur du troisième champs
xlRange.Cells(Boucle, 3).Value = Forms![MonFormulaire].[Champs3] 'Enregistrement suivant
DoCmd.GoToRecord , , acNext Next Boucle 'Retourne au premier enregistrement
DoCmd.GoToRecord , , acFirst
'Fermeture de Excel
'Rend Excel visible
xlApp.Visible = True
'Active le classeur xlWks.Activate 'Positionnement en [ A1 ]
xlRange.Cells(1, 1).Select
'Message d'erreur en arrêt xlApp.DisplayAlerts = False
'Sauvegarde du fichier Excel créé. xlBook.SaveAs FichierXL 'Ferme l'application Excel
xlApp.Quit
'Message d'erreur actif
xlApp.DisplayAlerts = True
'Libération des variables
Set xlRange = Nothing Set xlWks = Nothing Set xlBook = Nothing Set xlApp = Nothing
MsgBox "Fin du travail"
Mais ce code ne fonctionne pa...
Tu pourrais m'aider please?
Mici d'avance a+ Répondre à jack |
|
|
|
| 5 Jacques, le 16 aoû 2005 à 15:10:35Bonjour,
Désolé Jack, Je n'arrive pas à suivre ta pensée...
1/ Le code me paraît plausible (à vérifier en pratique)
2/ Mais quel est l'intérêt de transférer vers un fichier Excel des informations qui sont déjà dans un fichier-attaché Excel ?
En effet, actuellement, tu peux indifféremment modifier les mêmes informations simultanément sous les 2 Applications; Excel et ACCESS..
Car ces deux Applications se communiquent réciproquement leurs mises à jour respectives dans ce même fichier.
Mais j'ai peut-etre mal compris ?
A+ Répondre à Jacques | 6 jack, le 16 aoû 2005 à 15:30:37En fait, au depart, j'ai un tableau sous excel qui est le planning preventif de ts les travaux a faire sur une machine. Les utilisateurs sont en faite d technicien qui consulteront le tableau initial (planning) et ensuite, o fur et a mesure,en fonction de ce qu'ils font com travaux sur cete machine, vont remplir une table par le biais d'un formulaire et dc dire ce qu'il ont fait com travaux...
L'utilité de transférer les données de la table (remplie par les utilisateur) est pour le responsable un moyen de comparer les 2 tableaux (initial et réel) pour qu'il puisse voir sil i a u d retard pour différent travaux ou si le planning initial est en phase avec le travail d technicien...
Je fais cela sous access dans un soucis de userfriendly! (le programme que je fais sous access servira a simplifier la vie du secteur maintenance)
Ca va j'ai été assez clair tu as compris?
Keske ten pense? pourquoi le code ne marche pa?
Mici de ton aide!! Répondre à jack | 9 Jacques, le 16 aoû 2005 à 16:00:22Jack,
Et pourqoi ne pas faire, par ex.
1/ une colonne travaux prévus
2/ et une colonne travaux réalisés
Sachant que l'on peut afficher/masquer à volonté les champs pertinents dans ACCESS et ou EXCEL.
L'avantage, énorme, est d'obtenir un fichier unique homogène et donc facile à maintenir.
N'oublie pas que la simplicité est un très gros atout. Il faudra bien que tu "vendes" ton outil ...
Si cela facilite le travail, c'est gagné ! les utilisateurs lui feront bon accueil. Sinon c'est invendable.
A+
La science consiste à trouver ce qi existe depuis toujours ....
Hubert Reeves Répondre à Jacques | 10 jack, le 17 aoû 2005 à 08:26:42Slt! c deja ce que je sui en trin de faire c a dire que j'ai un fichier excel avec un tableau initial ; ce tableau est renseigné sous access et une fois les modif/ajout terminé je sauvegarde dans le mm fichier excel mais dans une otre feuille le tableau final...
Les différents problemes que j'ai concerne l'automatisation de tt ceci par l'intermédiaire d'un bouton...(créé donc un code vba!) Répondre à jack |
|
|
|
|