fichier devenu si lourd que peut plus ouvrir

  • Initiateur de la discussion Laetitia robitaillié
  • Date de début
L

Laetitia robitaillié

Guest
Bonjour

je gère ou du moins je gérais sur fichier avec macros 500 ouvrages triés par auteurs, titres etc... selon les onglets
à la suite d'une maladresse (en tous cas je l'imagine), le fichier est devenu si lourd que je ne peux plus l'ouvrir!!
239 000 000 octets!
serait-il possible de récupérer le fichier sans les macros ou au moins un onglet ?
ou bien suis-je punie de ne pas avoir fait de sauvegarde récemment?

merci
 
C

charli

Guest
bonjour le forum

228 Mo çà fait gros mais........!

peut-être y-a-t-il autre chose.
as-tu essayé de faire une copie vers un autre support?
et de l'ouvrir à partir de ce support?

@+
charli
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour Laetitia, le Forum

Ouh la la ! Y a pas bon 239 000 000 octets! ça nous fait quoi ça dans les 240 mégas, c'est presque un film Dvix complet ça...

Là c'est vraiment pas évident, il te faut une machine puissante avec beaucoup de RAM que tu viens juste de rebooter... Tu ouvres Excel et depuis là tu essaie d'ouvrir ce mastodonte. Et tu laisses faire tant que ça ne plante pas, ne touche à rien, même pas la souris...

Si par chance tu arrives à ouvrir, tu dois essayer de faire un SaveAs en format text '*.txt' de tes données, ça sera déjà ca...

Une autre possibilité si tu as Access est d'essayer d'ouvrir ton Fichier depuis Access...

Sinon, si ça ne s'ouvre pas, essaie d'ouvrir avec Word, mais je crains que çà ne passe pas trop, mais parfois on récupère des donnée comme ça...

Sinon il y avait dans le temps un utilitaire qui avait une version d'évaluation gratuite 'Excel Recovery' si je ne m'abuse... Fais une recherche sur le net...

Voilà, désolé mais je ne vois pas de solution miracle, d'où l'intérêt primordial d'avoir toujours, toujours, toujours, toujours !!! des BackUp à jour...

Bon Appétit quand même
@+Thierry
 

MichelXld

XLDnaute Barbatruc
bonjour Laetitia , Charli et @+Thierry


en complément des infomations données par Thierry


tu ouvres un nouveau classeur vide


dans la cellule A1 , tu saisies la formule ci dessous en adaptant
le chemin du classeur bloqué
le nom du classeur bloqué
le nom de la feuille dans lequel tu souhaites recuperer les infos


Code:
='C:\\Documents and Settings\\michel\\[monClasseur.xls]Feuil1'!A1
la cellule A1 de 'monClasseur' va s'afficher dans la cellule A1 du nouveau classeur


ensuite tu étires la formule sur les autres cellules




sinon pour transferer les données de ton classeur fermé dans un fichier texte tu peux tester cette macro



Code:
 Sub excelVersFichierTexte()
'necessite d'activer la reference Microsoft ActiveX Data Objects x.x Library 
Dim Rs As New ADODB.Recordset
Dim Fichier As String, Feuille As String
Dim xConnect As String, xSql As String

Fichier = 'C:\\Documents and Settings\\michel\\monClasseur.xls'
Feuille = 'Feuil1'

xConnect = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' & Fichier & ';' & _
'Extended Properties=Excel 8.0;'

xSql = 'SELECT * FROM [' & Feuille & '$];'

Set Rs = New ADODB.Recordset
Rs.Open xSql, xConnect, adOpenForwardOnly, adLockReadOnly, adCmdText

Open 'C:\\Documents and Settings\\michel\\essai.txt' For Output As #1

Do Until Rs.EOF
Print #1, Rs.GetString(, 600, ';', vbCrLf, ''); 'dans cet exemple le séparateur est ';' (point virgule)
Loop
Close #1
End Sub


j'espere que ça pourra t'aider

bon courage
MichelXld
 

Zon

XLDnaute Impliqué
Salut,

J'avais bricolé ceci pour un collègue dans le même cas. adpater les constantes. C'est un peu longuet si on a beaucoup de lignes.
Il te suffit de coller ce code dans un module standard et d'avoir le même nb de feuilles dans le nouveau classeur et dans l'ancien.

Const NbLig& = 500 'à adapter
Const NbCol& = 20 'à adapter

Sub Princ()
  Recup 'D:\\', 'TestVB.xls', Array('Feuil1', 'Feuil2')
End Sub

Sub Recup(ByVal Chemin$, ByVal NomFich$, T)
 
Dim I&, J&, K&, Temp
  Application.ScreenUpdating =
False
 
If ThisWorkbook.Worksheets.Count <> UBound(T) + 1 Then Exit Sub
&nbsp;
For I = LBound(T) To UBound(T)
&nbsp; &nbsp;
ReDim Temp(1 To NbLig, 1 To NbCol)
&nbsp; &nbsp;
For J = 1 To NbLig
&nbsp; &nbsp; &nbsp;
For K = 1 To NbCol
&nbsp; &nbsp; &nbsp; &nbsp; Temp(J, K) = GetValue(Chemin, NomFich, T(I), Cells(J, K).Address)
&nbsp; &nbsp; &nbsp;
Next K
&nbsp; &nbsp;
Next J
&nbsp; &nbsp; ThisWorkbook.Worksheets(I + 1).[A1].Resize(UBound(Temp), UBound(Temp, 2)) = Temp
&nbsp;
Next I
End Sub

Private Function GetValue(Path, File, Sheet, Ref) 'John Walkenbach
&nbsp;
Dim Arg As String
&nbsp;
If Right(Path, 1) <> '\\' Then Path = Path & '\\'
&nbsp;
If Dir(Path & File) = '' Then
&nbsp; &nbsp; GetValue = 'File
Not Found'
&nbsp; &nbsp;
Exit Function
&nbsp;
End If
&nbsp;
&nbsp; Arg = '
'' & Path & '[' & File & ']' & Sheet & ''!' & Range(Ref) _
&nbsp; &nbsp; .Range('A1').Address(, , xlR1C1)
&nbsp; GetValue = ExecuteExcel4Macro(Arg)
&nbsp; GetValue = IIf(GetValue = 0, '', GetValue)
'modif perso
End Function


A+++
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour Zon, Michel, Charly, La&euml;titia, le Forum

Ah oui, je n'avais même pas pensé au VBA sur ce coup là !!!

NB pour les Codes de Zon, Attention, la mise en page sous les basises 'Quote' que nous utilisons avec la XLA de Sylvain, ne supporte pas les antislash, seul les balises 'Codes' utilisé par Michel, les supporte...

Code:
Option Explicit

Const NbLig& = 500 'à adapter
Const NbCol& = 20 'à adapter

Sub Princ()
  Recup 'C:\\Documents and Settings\\UserName\\My Documents\\', 'TestVB.xls', Array('Feuil1', 'Feuil2'Â'Â')
End Sub

Sub Recup(ByVal Chemin$, ByVal NomFich$, T)
  Dim I&, J&, K&, Temp
  Application.ScreenUpdating = False
  If ThisWorkbook.Worksheets.Count <> UBound(T) + 1 Then Exit Sub
  For I = LBound(T) To UBound(T)
    ReDim Temp(1 To NbLig, 1 To NbCol)
    For J = 1 To NbLig
      For K = 1 To NbCol
        Temp(J, K) = GetValue(Chemin, NomFich, T(I), Cells(J, K).Address)
      Next K
    Next J
    ThisWorkbook.Worksheets(I + 1).[A1].Resize(UBound(Temp), UBound(Temp, 2)) = Temp
  Next I
End Sub

Private Function GetValue(Path, File, Sheet, Ref) 'John Walkenbach
  Dim Arg As String
  If Right(Path, 1) <> '\\' Then Path = Path & '\\'
  If Dir(Path & File) = '' Then
    GetValue = 'File Not Found'
    Exit Function
  End If
  
  Arg = ''' & Path & '[' & File & ']' & Sheet & ''!' & Range(Ref) _
    .Range('A1'Â'Â').Address(, , xlR1C1)
  GetValue = ExecuteExcel4Macro(Arg)
  GetValue = IIf(GetValue = 0, '', GetValue) 'modif perso
End Function

Mais je viens de tester çà peut fonctionner, mais fermes toutes autres application avant car ça va mouliner sérieux !!!

La méthode ADO proposée par Michel Fontionne impec, et est ultra rapide, mais par contre tu ne récupéreras qu'un onglet à la fois, et u adaptera 'Feuille' pourl'onglet suivant...

Dans les deux méthodes il te faudra par contre connaître les noms de tes onglets...

Bonne Chance
@+Thierry

Message édité par: _Thierry, à: 05/04/2005 16:00
 

PascalXLD

XLDnaute Barbatruc
Modérateur
Bonjour le fil

Alors franchement je suis MDR

Thierry a dit : Ah oui, je n'avais même pas pensé au VBA sur ce coup là !!!

Et bien là franchement ça m'en bouche un coin



Bonne journée

Message édité par: Pascal76, à: 05/04/2005 14:59
 

MichelXld

XLDnaute Barbatruc
rebonsoir à toutes et à tous

un petit coucou à Zon que je n'ai pas eu l'occasion de croiser depuis longtemps


suite aux remarques de Thierry voici une nouvelle version qui boucle sur tous les onglets sans connaitre à l'avance leurs noms .
les infos de chaque onglet sont tranférées dans un fichier texte différent .


Code:
Sub excelVersFichierTexte_V02()
'michelxld le 04.04.2005
'necessite d'activer la reference Microsoft ActiveX Data Objects x.x Library
'necessite d 'activer la reference Microsoft ADO Ext 2.7 for DLL ans Security
Dim Cn As ADODB.Connection
Dim Rs As New ADODB.Recordset
Dim Feuille As ADOX.Table
Dim Cat As ADOX.Catalog
Dim xConnect As String, xSql As String, Fichier As String

Fichier = 'C:\\Documents and Settings\\michel\\monClasseur.xls'
xConnect = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' & Fichier & ';' & _
'Extended Properties=Excel 8.0;'

Set Cat = CreateObject('ADOX.Catalog'Â'Â')
Set Cn = CreateObject('ADODB.Connection'Â'Â')

Cn.Open xConnect
Set Cat.ActiveConnection = Cn

For Each Feuille In Cat.tables

Set Rs = New ADODB.Recordset
    
xSql = 'SELECT * FROM [' & Feuille.Name & '];'
Rs.Open xSql, xConnect, adOpenForwardOnly, adLockReadOnly, adCmdText
    
Open 'C:\\' & Left(Feuille.Name, Len(Feuille.Name) - 1) & '.txt' For Output As #1
Do Until Rs.EOF
Print #1, Rs.GetString(, 600, ';', vbCrLf, ''Â'Â');
Loop
Close #1
Rs.Close

Next Feuille

Cn.Close
End Sub



bonne soiree
MichelXld

Message édité par: MichelXld, à: 05/04/2005 19:21
 
L

Laetitia

Guest
issue heureuse grâce à vous tous!
merci charli
merci Thierry
Merci michelXld
Merci Zon
merci Pascal76

je regrette de ne pas pouvoir vous rendre la pareille
ou peut-être dans quelques temps quand je serai mieux rodée
:kiss:
 

Statistiques des forums

Discussions
312 084
Messages
2 085 193
Membres
102 810
dernier inscrit
mohammedaminelahbali