VBA importer une cellule Excel dans Access

  • Auteur de la discussion darkspoilt
  • Date de début

darkspoilt

Expert
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.
 

zeb

Modérateur
Bon, quelqu'un pour lui dire, moi je n'en ai pas le courage :pfff:
(Avant de passer pour un [censured], essaye de demander à google ce que signifient ces 4 lettres ;) )

Sinon, il te suffit de correctement paramétrer la fonction TransferSpreadsheet.
 

darkspoilt

Expert
ca j'avais trouvé mais le souci c'est que ma ligne est pas fixe donc je sais pas comment la récupérer la ligne qui contient la valeur "total" a la premiere colonne
 

Freeman23

Expert
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)

Code:
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
 

zeb

Modérateur
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 ) [fixed]Set XL = CreateObject("Excel.Application" )[/fixed]
■ 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 ;)
 

zeb

Modérateur
[pinaillage=ON]
Freeman» Rhoo l'erreur !
Lignes 12 & 13, après le EndIf de la ligne 14. :o
Où est le Set wbFile = Rien :??:

darkspoilt» Deux fois les mêmes suggestions. A mon avis, c'est une bonne soluce ;)
 

darkspoilt

Expert
Moi je suis pour la deuxieme solution de freeman et la premiere de zeb
mais je vois complement l'algorithme pour voir ma ligne mais il me manque le code

ca ferais un truc du genre

[cpp]
tant que ligne(i).Colonne1 different de "total"
{
i++;
}
[/cpp]
 

zeb

Modérateur
Traduction en ligne:

tant que --> do while.. loop
ligne(i).Colonne(1).Texte --> Cells(i, 1).Text
.. different de "total" --> .. <> "total"
i++ --> i = i + 1

:D
 

darkspoilt

Expert
lol ca change vraiment du C ou du java (le code dont j'ai l'habitude)
Merci beaucoup en tout cas
La prochaine fois je m'exprimerais mieux promis
 

darkspoilt

Expert
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


[cpp]
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
[/cpp]
 

Freeman23

Expert
[pinaillage=ON]
Freeman» Rhoo l'erreur !
Lignes 12 & 13, après le EndIf de la ligne 14. :o
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 :sol: ou encore Variable inconnue :p

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.
Code:
Public Function Ligne() As interger ' Integer c mieux  :D
Donc à la fin du code de ta fonction il te manque :
Code:
Ligne = i

Tu devrais mettre long plutot qu'integer (Et d'ailleur zeb va t'espliquer pourquoi :merci: )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).
 

darkspoilt

Expert
oui mais vu que j'utilise des fichier officiel ca devrait le faire mais bon on ne sait jamais et pourquoi je devrait utiliser long?

Et j'ai un probleme de syntaxe il reconnait pas cette ligne

[cpp] DoCmd.TransferSpreadsheet acImport, , "CA", Chiffre, 0, "K" & i[/cpp]

i est une variable
 

zeb

Modérateur
Parce que c'est trop court !

Questions:
■ Quelle est la plage du type Integer ?
■ Quelle est la plage du type Long ?
■ Combien y-a-t'il de lignes dans une feuille Excel ?

....

C'est bon comme esplication ?


HommeLibreXXIII > quelle est la différence entre Rien et Nothing ?
Réponse: 3 fois rien :o
 

darkspoilt

Expert
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 [cpp] DoCmd.TransferSpreadsheet acImport, , "CA", Chiffre, 0, "K" & i[/cpp]
i est une variable. de type integer ca a son improtance ou je dois convertir en String??
Merci d'avance
 

zeb

Modérateur
[:whatthefuck]
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 :o


"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 :o
 

darkspoilt

Expert
oki mais je travaille déja sur des fichiers de l'année donc ca c'est pas le souci je fais des économie mémoire (lol) mais une ligne = long ca je savais pas.
Et même avec des long ca ne fonctionne pas. Donc ce n'est pas ca.
 

zeb

Modérateur
Questions:
■ Quelle est la plage du type Integer ?
■ Quelle est la plage du type Long ?
■ Combien y-a-t'il de lignes dans une feuille Excel ?
Repose-toi ces 3 questions, tu verras, ce sera limpide. :o
Tiens, pour en être sûr, réponds donc. :)
 

zeb

Modérateur
Ah, ça ne marche pas ?

Essaye en dur avec une valeur dont tu es sûr : "K12", ou encore "K12:k12", en précisant le nom de la feuille: ... "Feuil1!K12" / "Feuil1!K12:K12"

Désolé, je n'ai pas ACCESS sopus la main pour vérifier.
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 131
Messages
6 717 943
Membres
1 586 382
Dernier membre
alejandrooo
Partager cette page
Haut