Récupérez vos tables Access 2007 supprimées par erreur.
Vous avez la possibilité de récupérer une table que vous avez supprimée par erreur, bien sûr, sous certaines conditions.
Si ces conditions sont respectées :
- La base de données n'a pas été fermée depuis que la table a été supprimée,
- La base de données n'a pas été compactée depuis que la table a été supprimée,
- Les tables ont été supprimés en utilisant l'interface utilisateur Access uniquement (hors VBA, requêtes, etc…),
- La table ne contient aucune pièce jointe ou champ multivaleurs,
Alors, votre table a des chances d’être restaurée dans un bon état, tout en sachant bien que cette restauration peut ne pas réussir.
Si l’option « compacter à la fermeture » est positionnée et si vous fermez la base, la table sera irrécupérable car le changement de l’option ne prend effet qu’à la prochaine ouverture de la base. Si cette option n'était pas positionnée, une fermeture ne devrait pas empêcher une bonne restauration.
La table restaurée sera nommée sous un nom unique déterminé par Access (du genre CLP309541) et vous devrez immédiatement la renommer pour éviter qu’une deuxième restauration ne vienne la détruire. Tant que la base ne sera pas compactée, la table supprimée peut rester présente et dans l’état où elle était lors de sa suppression.
La restauration des tables sera réalisée par une procédure VBA que vous trouverez ci-dessous. Cette restauration devant intervenir dès que vous vous apercevez de la suppression, les conditions d’utilisation de la base feront peut-être que vous ne pourrez pas envisager la restauration. Vous devrez déterminer si ce code spécial doit être inclus dans votre base.
Si la table possède des champs pièce Jointe et MultiValeurs, la procédure actuelle ne peut pas restaurer la table. Mais vous pouvez tenter une opération en modifiant la requête, en indiquant tous les champs et non un astérisque, et en n’indiquant pas les champs pièce Jointe et multivaleurs. Les champs indiqués devraient être restaurés normalement.
Vous devez également essayer, sur une copie de base, d’afficher les tables system et de renommer la table refusée dans la table MSysObjects pour qu’elle puisse s’afficher dans la fenêtre. Si vous pouvez récupérer cette table, un code VBA spécifique à écrire vous permettra de restaurer l’ensemble de votre table quels que soient les types de champs. Mais attention, cette opération ne peut être conduite que par un spécialiste Access et toute mauvaise manipulation peut détruire l'ensemble de la base.
Procédure de restauration.
Placez ce code dans un module standard, que vous pourrez exécuter à partir d'un formulaire ou dans la fenêtre exécution.
Option Compare Database
Option Explicit
Public Sub RestaurerTablesSupprimées()
On Error GoTo ErrTables
DoCmd.SetWarnings False
Dim Db As DAO.Database
Dim Tbl As String
Dim strSQL As String
Dim I As Integer
Dim TblRestaurées As Integer
Set Db = CurrentDb()
For I = 0 To Db.TableDefs.Count - 1
Tbl = Db.TableDefs(I).Name
If Left(Tbl, 4) = "~tmp" Then
strSQL = "SELECT DISTINCTROW [" & Tbl & "].* INTO " & Mid(Tbl, 5) & " FROM [" & Tbl & "];"
If MsgBox("Voulez-vous restaurer la table " & Mid(Tbl, 5) & " ?", vbYesNo, "Restauration") = vbYes Then
DoCmd.RunSQL strSQL
RefreshDatabaseWindow
TblRestaurées = TblRestaurées + 1
DoEvents
MsgBox "Une table a été restaurée sous le nom '" & Mid(Tbl, 5) & "'", vbOKOnly, "Restauration"
End If
End If
Next I
MsgBox "Restauration terminée, " & TblRestaurées & IIf(TblRestaurées > 1, " Tables restaurées.", " Table restaurée."), vbOKOnly
ExitSub:
DoCmd.SetWarnings True
Set Db = Nothing
Exit Sub
ErrTables:
MsgBox Err.Description
Resume ExitSub
End Sub