VBA importer une cellule Excel dans Access

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

Freeman23

Expert
HommeLibreXXIII > quelle est la différence entre Rien et Nothing ?
Réponse: 3 fois rien :o
On en déduit Rien = Nothing/3 donc Nothing c moins que rien... :D

Si je reprends ton code avec les points bizzares.
Code:
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. :merci:
 

darkspoilt

Expert
euh ouais j'ai pas tout compris mais meme en tapant une celllule en dur mon DoCmd.TransferSpreadsheet ne fonctionne pas
 

Freeman23

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

Code:
DoCmd.TransferSpreadsheet acImport, , "CA", "D:\Eric\dossier_projets\TDB\Chiffres-Affaires\a-Activité paiement porteurs CA an2007.xls", 0, "K" & i
 

darkspoilt

Expert
c'est bon j'ai résolu mon probleme
mais je me demande maintenant comment je fait pour l'importer dans le bon champs de ma table
 

Freeman23

Expert
On t'a donné toutes les billes pour pouvoir y arriver. Il faut peut être tout simplement que tu abandonnes le Transferspreadsheet... Et que tu utiles le code de la fonction ligne pour remplir directement ta table.
 

darkspoilt

Expert
Bah ligne est utiliser avec Excel pour localiser mon montant mais pas pour Access c'est pas la meme chose non?? en SQL je sais comment je pourais faire mais avec l'importation c'est possible transfertspreadsheet

 

Freeman23

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

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

darkspoilt

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

Freeman23

Expert
Ben justement c'est la seule méthode dans ce cas.

pour les erreurs tu tapes err.description dans la fenetre d'execution pour connaitre le texte de l'erreur.
 

zeb

Modérateur
Une fois que tu as la bonne cellule dans Excel, il te suffit de faire un INSERT INTO ta_table (ta_colonne) VALUES (ta_valeur) [:spamafote]
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 176
Messages
6 718 903
Membres
1 586 475
Dernier membre
lanutikz7
Partager cette page
Haut