fichier excel altéré

A

aserges

Guest
Bonjour
Je suis un maintenancier et je suis confronté à un problème qu'un copain m'a posé. J'utilise très peu excel. Il y a un fichier excel qui refuse de s'ouvrir parceque excel y trouve une référence circulaire. je n'ai pas les moyens d'aller payer un programme de récupération. aidez moi svp à récupérer le fichier
 

Marc_du_78

XLDnaute Accro
Bonjour aserges, le Forum,

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
Mais je viens de tester çà peut fonctionner, mais fermes toutes autres application avant car ça va mouliner sérieux!

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.

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

En toute Honnêteté, j'ignore qui à écrit cela, mais à part deux ou trois maîtres du Forum...
Merci de nous tenir informé ca fera avancer tout le monde, et si l'auteur se reconnaît, qu'il n'hésite pas à se faire connaître afin de mettre mon txt archive à jour.

En te souhaitant beaucoup de courage.
 

Discussions similaires

Réponses
3
Affichages
563
Compte Supprimé 979
C