Erreur Alétoire Sous VBa pour Access

[Résolu]
Signaler
Messages postés
4
Date d'inscription
jeudi 4 mai 2006
Statut
Membre
Dernière intervention
7 avril 2010
-
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
-
Bonjour,

Je suis débutant sur VBA pour Access et j'ai tenté de faire un code pour récupérer les données de cellules d'une feuille Excel pour les transférer vers une Table Access. Le rpoblème est le nombre de ligne est complètement variable, j'ai donc utiliser ce code :

Private Sub Maj_Click()
Dim Excel As Excel.Application
Dim Classeur As Excel.Workbook
Dim Ligne

On Error GoTo Err_MajDesinv_Click

       If (insertdonnée1.Value <> "" And InsertDonnée2 <> "" And InsertDonnée3 <> "" And InsertDonnée4 <> "") Then
      
            Set Excel = CreateObject("Excel.Application")
            Excel.Visible = True
            fichier = Excel.GetOpenFilename("Fichier Type Excel,*.xls", , "Sélectionnez le fichier")
            Set Classeur = Excel.Workbooks.Open(fichier)
            nomdefichier = Excel.ActiveWorkbook.FullName

With Excel

.Range("C7").Select
.Selection.End(xlDown).Select
End With

Ligne = Selection.Row

'On Error GoTo Error_Export:
DoCmd.TransferSpreadsheet acImport, 8, "Matable", nomdefichier, True, "C7:N" & Selection.Row & ""

Set Classeur = Nothing
Set Excel = Nothing
   
    DoCmd.OpenQuery "MarequêteMiseàJour", acNormal
   
   
Else: MsgBox "Vous devez remplir les informations avant de pouvoir intégrer le fichier !"
End If

Exit_Maj_Click:
    Exit Sub

Err_Maj_Click:
    MsgBox Err.Description
    Classeur.Close
    Excel.Quit
    Resume Exit_Maj_Click
   
End Sub

Le souci est que ce code fonctionne une seule fois par "session" Access, quand je le relance arrivé à la ligne 'Ligne = Selection.Row', j'obtiens le message :
"Le serveur distant n'existe pas ou n'est pas disponible". Où est l'erreur ?
 Je travaille sur le réseau de mon entreprise.
Par souci de confidentialité j'ai modifié le nom des tables et fichier dans ce message.

Merci de votre aide constructive.

4 réponses

Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
10
Salut,

remplace with excel par with classeur

deplus change le nom de ta variable Excel par un autre comme XlAppli par exemple car excel est un nom reservé.

A+
Messages postés
4
Date d'inscription
jeudi 4 mai 2006
Statut
Membre
Dernière intervention
7 avril 2010

En fait je viens de trouver la raison, enfin je crois j'ai oublié les lignes :
    Classeur.Close
    Excel.Quit
Juste après le transfert par contre maintenant j'obtiens le message de façon aléatoire : Variable Objet ou variable deBloc With non définie.
J'ai donc supprimer la ligne 'Ligne = Selection.row" et apparemment ça marche.

Voilà mes excuses pour le dérangements.
Par contre si vous voyez d'autres erreurs n'hésitez pas.
Messages postés
4
Date d'inscription
jeudi 4 mai 2006
Statut
Membre
Dernière intervention
7 avril 2010

Oups je n'avais pas vu ta réponse Gros Poisson .
Merci de ta rapidité, je vais essayer ça aussi.
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
salut,

Dim Excel As Excel.Application  ' on ne nomme pas une variable avec un nom déjà réservé
donc Dim XlApp as Excel.Application

Dim Classeur As Excel.Workbook
Dim Ligne As Integer

<strike>Set Excel = CreateObject("Excel.Application")</strike>

Set Excel = New Excel.Application
<strike>
With Excel

.Range("C7").Select
.Selection.End(xlDown).Select
End With</strike>

Ligne = Classeur.Range("D7").End(xlDown).Row

@++

le mystérieux chevalier,"Provençal, le gaulois"
Forum Office & VBA