Import de feuilles masquées dans Access

devba77 Messages postés 22 Date d'inscription samedi 22 avril 2006 Statut Membre Dernière intervention 20 août 2006 - 24 avril 2006 à 00:43
valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 - 25 avril 2006 à 19:26
Bonjour,


Le code suivant lit sur un répertoire donné tous les fichiers Excel et les importe dans une base access. Il importe plus particulièrement les onglets
"TestIndicateurs" et "Transpose". J'avais cependant oublié une contrainte lié à mon application:
Ces 2 onglets doivent être masqués. Et le code ici présent marche très bien lorsque les onglets sont visibles,
mais ne fonctionne pas lorsque je masque les onglets.
J'ai donc rajouter la procédure Sub "ToutAfficher" (que j'appelle juste avant la lecture en rouge dans le code):
En utilisant le débugger pas à pas je passe bien dans l'onglet mais il me sort une erreur qui n'a aucun
rapport avec l'impossibilité de lire les feuilles masquées.

Voici le message d'erreur:
"Cette table contient des cellules hors de la plage de cellules définie dans cette feuille de calcul"


Hors je n'ai ajouté dans mon code que des informations pour rendre visible les feuilles, les plages définies
étant les même qu'auparavant. Après avoir regardé ce message dans l'aide de windows puis sur le net, j'en déduis que le programme ne peut accéder à la feuille et sort donc un message d'erreur complètement incohérent.


Si quelqu'un pouvait me trouver une solution intermédiaire ou aurait déjà eu ce genre de pb, je lui en serait
très reconnaissant de m'aider, car après avoir chercher longuement je ne comprends vraiment plus rien...


Merci à tous pour votre aide



Le code:


Sub ToutAfficher()


Dim ws As Worksheet
For Each ws In Worksheets
ws.Visible = True
Next
End Sub



Sub ImportAllFiles()
Dim strPathToFiles As String
Dim xlAppl As Excel.Application
Dim Wb As Excel.Workbook
Dim onglet As String
Dim ws As Excel.Worksheet
Dim Repertoire As String, Fichier As String


'Repertoire = "C:\Documents and Settings\dossier"
Repertoire = "C:\Documents and Settings\dossierOngletMasque"


Fichier = Dir(Repertoire & "*.xls")
Do While Fichier ‹› ""


Set xlAppl = CreateObject("Excel.Application")
strPathToFiles = Repertoire & Fichier


'Supprimer enreg table T_Import_Brut
DoCmd.RunSQL "DELETE FROM TImport"
DoCmd.RunSQL "DELETE FROM TImport2"


Set Wb = xlAppl.Workbooks.Open(FileName:=strPathToFiles, ReadOnly:=True)


Call ToutAfficher


For Each ws In Wb.Worksheets
If ws.Visible = True Then
onglet = ws.Name


If onglet = "TestIndicateurs" Then


' transfert vers table T_Import_Brut
DoCmd.TransferSpreadsheet acImport, 8, "TImport", strPathToFiles, False, onglet & "!H2:L201"


ElseIf onglet = "Transpose" Then


' transfert vers table T_Import_IG
DoCmd.TransferSpreadsheet acImport, 8, "TImport2", strPathToFiles, False, onglet & "!A1:F"


End If
End If
Next ws


Wb.Close False
setwb = Nothing
xlAppl.Quit
Set xlAppl = Nothing


Fichier = Dir
Loop
End Sub

3 réponses

valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 3
24 avril 2006 à 01:09
Salut,
tu n'appliques pas la bonne syntaxe pour la méthode visible
essaie ceci

Sub ToutAfficher()


Dim ws As Worksheet
For Each ws In Worksheets
ws.Visible = xlSheetVisible
Next
End Sub
tu peux donner les valeurs
xlSheetVisible
xlSheetHidden
xlSheetVeryHidden

Cordialement, Jean-Paul
______________________________________________________________________

Le Savoir n'a de valeur que s'il est partagé
0
devba77 Messages postés 22 Date d'inscription samedi 22 avril 2006 Statut Membre Dernière intervention 20 août 2006
24 avril 2006 à 11:10
Merci beaucoup pour ta réponse.

J'ai testé et retesté avec ta méthode, malheureusement cela ne change rien à mon pb. Mais il n'importe aucune donnée. Il ne passe même pas par l'instruction "If onglet = "TestIndicateurs" Then"

Que dois-je faire ???

Merci à tous pour vos réponses
0
valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 3
25 avril 2006 à 19:26
Salut,
As tu changer aussi cette ligne ?
For Each ws In Wb.Worksheets
<STRIKE>If ws.Visible = True Then</STRIKE>
If ws.Visible = xlSheetVisible Then
onglet = ws.Name
Attention aussi à la Case mieux vaut travailler en minuscule avec Lcase
Cordialement, Jean-Paul
______________________________________________________________________

Le Savoir n'a de valeur que s'il est partagé
0
Rejoignez-nous