Récupération de données dans un classeur endommagé

Je ne parviens plus à ouvrir mon classeur excel. Il contient des données précieuses. Comment les récupérer ?

Solution 1

Une solution avec ADO pour récupérer les données d'une feuille entière (code Rob Bovey, mpep). Si ça ne fonctionne pas, une solution plus "classique" par établissement d'une liaison avec les cellules dont on veut récupérer les valeurs (Ron de bruin, mpep). Dans les deux cas, les données peuvent être récupérées dans un classeur fermé (erreur avec ADO si le classeur est ouvert). Le code doit être copié dans un module standard. solution 1 (ADO) 'importer le contenu d'une feuille de calcul d'un classeur fermé '(seules les données sont importées, pas les mises en forme)

sub testQuery()
 fich$ = "D:\ExempleTris.xls"
 Feuille$ = "Feuil1"
 QueryWorksheet fich, Feuille
 end sub
Public Sub QueryWorksheet(NomFichier$, Feuille$)
 'Rob Bovey, mpep
 'nécessite une référence à la librairie
 'Microsoft ActiveX Data Object 2.x Library
 Dim rsData As ADODB.Recordset
 Dim szConnect As String
 Dim szSQL As String
 
  ''' Crée la chaîne de connexion
  szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    "Data Source=" & NomFichier & ";" & _
    "Extended Properties=Excel 8.0;"
 
  ' La requête est basée sur le nom de la feuille. Ce nom
  ' doit se terminer par un $ et doit être entouré de crochets droits.
  szSQL = "SELECT * FROM [" & Feuille & "$];"
 
  Set rsData = New ADODB.Recordset
  rsData.Open szSQL, szConnect, adOpenForwardOnly, _
    adLockReadOnly, adCmdText
 
  ''' Vérifie qu'on a bien reçu des données
  If Not rsData.EOF Then
    Feuil1.Range("A1").CopyFromRecordset rsData
  Else
    MsgBox "Aucun enregistrement renvoyé.", vbCritical
  End If
 
  ''' On nettoie pour finir...
  rsData.Close
  Set rsData = Nothing
 
 end sub

solution 2 (liaison)

'récupération de données dans un classeur fermé '(méthode "classique" par établissement d'une liaison temporaire) '(c'est aussi la technique habituellement conseillée pour essayer 'de récupérer des données d'un classeur endommagé)

sub test()
 GetValuesFromAClosedWorkbook "D:", "TestADO.xls", "Feuil1",
 "A1:H25"
 end sub
sub GetValuesFromAClosedWorkbook(fPath As String, _
  fName As String, sName, cellRange As String)
 'Ron De Bruin, mpep
 'le paramètre 'cellRange' doit désigner
 '*une* plage de cellules *contigües*
 With ActiveSheet.Range(cellRange)
 .Formula = "='" & fPath & "\[" & fName & "]" _
   & sName & "'!" & cellRange
 .Value = .Value
 End With
 end sub

Auteur :

Mots clefs associés à cette page : , ,