devba77
Messages postés22Date d'inscriptionsamedi 22 avril 2006StatutMembreDernière intervention20 août 2006
-
24 avril 2006 à 00:43
valtrase
Messages postés937Date d'inscriptionlundi 19 janvier 2004StatutMembreDerniè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
valtrase
Messages postés937Date d'inscriptionlundi 19 janvier 2004StatutMembreDernière intervention 9 mai 20223 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
devba77
Messages postés22Date d'inscriptionsamedi 22 avril 2006StatutMembreDernière intervention20 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"
valtrase
Messages postés937Date d'inscriptionlundi 19 janvier 2004StatutMembreDernière intervention 9 mai 20223 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
______________________________________________________________________