VBA importer une cellule Excel dans Access
Tags :
Dernière réponse : dans Programmation
Bonjour,
je vourdais connaitre la méthode afin d'importer seulement une cellule Excel dans Access.
Si quelqu'un peut mel a donner je le remercie d'avance.
je vourdais connaitre la méthode afin d'importer seulement une cellule Excel dans Access.
Si quelqu'un peut mel a donner je le remercie d'avance.
Autres pages sur : vba importer cellule excel access
Lassé par la pub ? Créez un compte
- | Alerter
- | Alerter
- | Alerter
Contenus similaires
- Masquer cellule vide excel - Forum
- Vba access importer feuille excel - Forum
- Excel nom onglet cellule - Forum
- Excel vba contenu cellule - Forum
- | Alerter
Ceci expliquant cela, si tu nous avais expliqué toute la problématique on aurait répondu plus juste.
Pour faire cela tu as deux solutions :
- Soit tu importes toute la table excel, et tu fais des traitements après pour récupérer ta valeur.
- Soit tu ouvres le classeur et tu recherche grace au VBA Excel ce que tu veux :
Je te donne les billes pour la 2eme solution : (Il faut rajouter la référence Microsoft Excel 11.0 Object Librairy)
Pour faire cela tu as deux solutions :
- Soit tu importes toute la table excel, et tu fais des traitements après pour récupérer ta valeur.
- Soit tu ouvres le classeur et tu recherche grace au VBA Excel ce que tu veux :
Je te donne les billes pour la 2eme solution : (Il faut rajouter la référence Microsoft Excel 11.0 Object Librairy)
Public AppExcel As Excel.Application
Private wbFile As Excel.Workbook
Set AppExcel = CreateObject("Excel.Application") ' Ouverture d'excel
If Not AppExcel Is Nothing Then
Set wbFile = AppExcel.Workbooks.Open("c:\toto.xls", False, True) 'Ouverture du classeur
if not wbfile is nothing then
' Traitement voulu...
' Fermeture des élements
wbfile.close
AppExcel.Application.Quit
Set appexcel = nothing
end if
end if
- | Alerter
Donc la question n'est pas comment "récupérer une cellule" mais "comment analyser une feuille Excel pour y trouver une cellule en particulier puis ensuite l'importer dans Access".
Tu as plusieurs façons de faire.
Par exemple :
Instancier une session Excel via OLE, faire tes analyses de la feuille, y récupérer la valeur qui t'intéresse. L'instanciation se fait comme ça (vu dans ton message http://www.presence-pc.com/forum/ppc/Programmation/prob... )
Récupérer une zone de la feuille Excel dans une table temporaire en passant par TransferSpreadsheet, analyser les données de cette table, y récupérer la valeur qui t'intéresse.
Just grilled by Freeman. Encore une fois. Ca va effectivement sentir le roussi
Tu as plusieurs façons de faire.
Par exemple :
Set XL = CreateObject("Excel.Application" )
Just grilled by Freeman. Encore une fois. Ca va effectivement sentir le roussi
- | Alerter
- | Alerter
- | Alerter
- | Alerter
- | Alerter
Bonjour,
j'ai créer un code provisoire afin de tester ma fonction sur click lors d'un formulaire
et il a une erreur lorsque je click sur le bouton il m'écrit
"L"expression sur clic entrée comme paramètre de la propriété de type évènement est a l'origine d'une erreur Type défini par l'utilisateur non défini.
Le résultat de l'expression n'est pas le nom d'une macro, le nom d'une fonction définie par l'utilisateur ou [Event procédure]
Une erreur a peut être été commise lors de l'évalutation d'une fonction , d'un évène ment ou d'une macro"
mon bouton est configuré sur procédure évènementiel
Si quelqu'un voit l'erreur je le remercie d'avance
j'ai créer un code provisoire afin de tester ma fonction sur click lors d'un formulaire
et il a une erreur lorsque je click sur le bouton il m'écrit
"L"expression sur clic entrée comme paramètre de la propriété de type évènement est a l'origine d'une erreur Type défini par l'utilisateur non défini.
Le résultat de l'expression n'est pas le nom d'une macro, le nom d'une fonction définie par l'utilisateur ou [Event procédure]
Une erreur a peut être été commise lors de l'évalutation d'une fonction , d'un évène ment ou d'une macro"
mon bouton est configuré sur procédure évènementiel
Si quelqu'un voit l'erreur je le remercie d'avance
Sub Commande0_Click()
Dim l As Integer
l = Ligne()
DoCmd.TransferSpreadsheet acImport, , CA, "D:\Eric\dossier_projets\TDB\Chiffres-Affaires\a-Activité paiement porteurs CA an2007.xls", 0, "K" & i
End Sub
Public Function Ligne() As interger
Public AppExcel As Excel.Application
Private wbFile As Excel.Workbook
Public i As Integer
Set AppExcel = CreateObject("Excel.Application") ' Ouverture d'excel
If Not AppExcel Is Nothing Then
Set wbFile = AppExcel.Workbooks.Open("c:\toto.xls", False, True) 'Ouverture du classeur
If Not wbFile Is Nothing Then
Do While Cells(i, 1).Text <> "TOTAL"
i = i + 1
Loop
wbFile.Close
AppExcel.Application.Quit
Set AppExcel = Nothing
End If
End If
End Function
- | Alerter
Citation :
[pinaillage=ON]Freeman» Rhoo l'erreur !
Lignes 12 & 13, après le EndIf de la ligne 14.
Où est le Set wbFile = Rien
darkspoilt» Deux fois les mêmes suggestions. A mon avis, c'est une bonne soluce
Le set wbfile = Rien risque de provoquer une incompatibilité de type
ou encore Variable inconnue
Plus sérieusement ton erreur dark vient dans le renvoi du résultat de ta fonction. Il faut dire explicitement à la fonction la valeur quelle renvoie.
Public Function Ligne() As interger ' Integer c mieux :D
Donc à la fin du code de ta fonction il te manque :
Ligne = i
Tu devrais mettre long plutot qu'integer (Et d'ailleur zeb va t'espliquer pourquoi
)et tu devrais tester aussi que la valeur de i soit la fin de ta boucle (cas ou tu ne trouves pas de ligne total). - | Alerter
- | Alerter
- | Alerter
Oki mais j'ai que 50lignes maximum dans mon tableau excel et ca risque pas de dépassé donc c bon non?? Sinon quel est la bonne syntaxe pour
i est une variable. de type integer ca a son improtance ou je dois convertir en String??
Merci d'avance
DoCmd.TransferSpreadsheet acImport, , "CA", Chiffre, 0, "K" & i
i est une variable. de type integer ca a son improtance ou je dois convertir en String??
Merci d'avance
- | Alerter
![[:whatthefuck] [:whatthefuck]](http://m.bestofmedia.com/sfp/design/usr/fr/smilies/ec/58/whatthefuck.gif)
Et demain, on t'envoye un gros fichier sur la semaine au lieu de la journée par exemple ou un truc comme ça !!!! Tu refais toutes tes macros !!!!! Une ligne, c'est un Long un point c'est tout. Et si le fichier XL ne contient pas de ligne Total (oubli, erreur, etc.), ta macro se vautre lamentablemnt. En passant, j'espère que tu gères cette erreur
"K" & i va bien donner "K12" pour i = 12. Oui je sais VB = caca. Pas besoin de conversion.
Sinon, i n'est pas un Integer mais un Long puisque c'est un numéro de ligne
- | Alerter
- | Alerter
- | Alerter
- | Alerter
- | Alerter
Citation :
HommeLibreXXIII > quelle est la différence entre Rien et Nothing ?Réponse: 3 fois rien
On en déduit Rien = Nothing/3 donc Nothing c moins que rien...
Si je reprends ton code avec les points bizzares.
Sub Commande0_Click()
Dim l As Long
l = Ligne() ' Tu met le résultat dans l puis tu utilise i qui n'est pas utilisé ici ?
DoCmd.TransferSpreadsheet acImport, , CA, "D:\Eric\dossier_projets\TDB\Chiffres-Affaires\a-Activité paiement porteurs CA an2007.xls", 0, "K" & i
End Sub
Public Function Ligne() As Long
Dim AppExcel As Excel.Application
Dim wbFile As Excel.Workbook
Dim i As Long
Set AppExcel = CreateObject("Excel.Application" ) ' Ouverture d'excel
If Not AppExcel Is Nothing Then
Set wbFile = AppExcel.Workbooks.Open("c:\toto.xls", False, True) 'Ouverture du classeur désiré
If Not wbFile Is Nothing Then
Do While Cells(i, 1).Text <> "TOTAL"
i = i + 1
Loop
wbFile.Close
AppExcel.Application.Quit
Set AppExcel = Nothing
Set wbfile = Nothing ' Rien+Rien+Rien
End If
End If
'C'est une fonction qui doit renvoyer une donnée
Ligne = i
End Function
Ca y est j'ai compris ou tu te trompes, En fait il faut comprendre ou existe tes variables et ou elle ne sont plus, Dans des fonctions ou sub les variables que tu créé existe seulement le temps de l'execution de ta fonction, donc il ne sert à rien de mettre des public ou private, on déclare simplement avec Dim.
Le i contenu dans ta fonction est interne et invisible de l'exterieur de cette fonction c'est pour cela que tu créé une fonction renvoyant une valeur, afin que le résultat ne soit pas "perdu".
Si dans la fenetre d'execution tu tapes ?Ligne et tu valide ca t'affichera le résultat de ton execution.
C'est pour cela qu'il te faut une variable l qui récupère le résultat de ta fonction et après tu dois l'utiliser comme variable pour trouver ta ligne car i n'existe plus.
Enfin j'espère que c'est pas du chinois.
- | Alerter
- | Alerter
DoCmd.TransferSpreadsheet acImport, , CA, "D:\Eric\dossier_projets\TDB\Chiffres-Affaires\a-Activité paiement porteurs CA an2007.xls", 0, "K" & i
J'avais pas remarqué mais CA c'est le nom de ta table donc une string.
DoCmd.TransferSpreadsheet acImport, , "CA", "D:\Eric\dossier_projets\TDB\Chiffres-Affaires\a-Activité paiement porteurs CA an2007.xls", 0, "K" & i
- | Alerter
- | Alerter
- | Alerter
- | Alerter
Mais justement tu ouvres un classeur excel, tu trouves la ligne voulue, après il ne parait pas difficile de récupérer la valeur de ton total et de l'ajouter dans ta table au lieu de renvoyer la position tu renvoie la valeur que tu ajoute directement dans ta table après. Maintenant si tu as plusieur valeur à récupérer sur ta ligne "total" dans ce cas il te suffit de tout faire directement par ligne.
Public Sub MajBase()
Dim AppExcel As Excel.Application
Dim wbFile As Excel.Workbook
Dim i As Long
Dim trouve as boolean
Set AppExcel = CreateObject("Excel.Application" )
If Not AppExcel Is Nothing Then
Set wbFile = AppExcel.Workbooks.Open("c:\toto.xls", False, True)
If Not wbFile Is Nothing Then
trouve = false
' le test 65536 c à la rache il vaudrait mieux trouver le dernier enregistrement
While i<= 65636 and not trouve
if Cells(i, 1).Text <> "TOTAL" then
trouve = true
else
i = i + 1
end if
Wend
' On verifie si on a trouvé la ligne
if trouve then
' Traitement des valeurs et ajout dans les tables. exple non garanti :P
Currentdb.execute "INSERT INTO CA(TOTAL) VALUES (" & Cells(i, 1) & ")"
end if
wbFile.Close
AppExcel.Application.Quit
Set AppExcel = Nothing
Set wbfile = Nothing ' Rien+Rien+Rien
End If
End If
'C'est une fonction qui doit renvoyer une donnée
End Function
- | Alerter
j'allais faire plus bourrin lol en fiat ma table est vierge donc l'initialiser mettre ma valeur dans une table temporaire et l'ajouter ma table vierge directement dans le champs c peut etre un peu tordu mais ca je saurais le faire après si il y a des solution plus imple je suis oki
je ne connais pas les erreurs elle signifie quoi l'erreur 65536??
je ne connais pas les erreurs elle signifie quoi l'erreur 65536??
- | Alerter
- | Alerter
- | Alerter
Lassé par la pub ? Créez un compte