Bonjour ! J'ai recours à votre aimable secours en desespoire de cause ...
voila ce que j'ai pu trouver comme solution, mais je ne peux pas selectionner plusieurs bases pour les réparer compacter en une seule fois :
J'ai un formulaire comme ceci :
Ainsi qu'un module comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128 Option Compare Database Option Explicit Private Sub cmdChoisir_Click() ' Objectif: obtenir la boîte de dialogue de Windows "Ouvrir un fichier" sans contrôle ActiveX Dim Fichier As String Dim Filtre As String Dim dlgFichier As OPENFILENAME Dim RetVal As Long Filtre = "Fichiers bases de données .MDB" & vbNullChar & "*.MDB" & vbNullChar dlgFichier.lStructSize = Len(dlgFichier) dlgFichier.hwndOwner = Me.Hwnd dlgFichier.hInstance = 0 dlgFichier.lpstrFilter = Filtre dlgFichier.nFilterIndex = 1 'par défaut liste la 1ère extension définie dans le filtre dlgFichier.lpstrFile = String(254, vbNullChar) dlgFichier.nMaxFile = 255 dlgFichier.lpstrFileTitle = String(254, vbNullChar) dlgFichier.nMaxFileTitle = 255 dlgFichier.lpstrInitialDir = "D:\DataAccess\" dlgFichier.lpstrTitle = "Ouvrir un fichier" dlgFichier.flags = OFN_FILEMUSTEXIST ' Or OFN_PATHMUSTEXIST Or OFN_HIDEREADONLY Or 0 RetVal = GetOpenFileName(dlgFichier) If RetVal >= 1 Then Fichier = dlgFichier.lpstrFile Else Fichier = "" MsgBox "Le bouton Annuler a été activé.@ @" End If Me!txtNomFichier = Fichier End Sub Private Sub cmdCompacter_Click() Dim Retour As Boolean Retour = Compacter() End Sub Private Sub cmdRéparerCompacter_Click() Dim Retour As Boolean Retour = RéparerCompacterBdd() End Sub Public Function Compacter() As Boolean ' Objectif: Compacte la bdd spécifiée dans le formulaire frmCompacter. Dim strNomFichier As String, strCompactée As String, strBackup As String, strBdd As String Dim Bdd As Database, frm As Form_frmCompacterRéparer Set Bdd = CurrentDb() On Error GoTo TraitementErreur ' Récupérer le chemin d'accès complet de la bdd à compacter If IsNull(Forms!frmCompacterRéparer!txtNomFichier) Then MsgBox "Aucun nom de bdd n'a été entré, recommencez en entrant le nom complet de votre bdd @ @", _ vbExclamation, "Compacter" Exit Function Else strBdd = Forms!frmCompacterRéparer!txtNomFichier End If ' Sauvegarde de la bdd en la copiant, cette sauvegarde est conservée strNomFichier = Left(strBdd, InStr(strBdd, ".mdb") - 1) strBackup = strNomFichier & "Backup.mdb" FileCopy strBdd, strBackup 'Effectue la copie de sauvegarde DoEvents ' Compactage de la bdd strCompactée = strNomFichier & "Compacted.mdb" DBEngine.CompactDatabase strBdd, strCompactée 'Effectue le compactage ' Supprime la bdd originale et renomme la nouvelle version compactée Kill strBdd 'Supprime la bdd originale Name strCompactée As strBdd 'Renomme la bdd compactée avec le nom original Compacter = True CompacterBddExit: MsgBox "Le compactage a été effectué avec succès @ @", vbInformation, "frmCompacterRéparer" ' DoCmd.Close ' Ferme le formulaire frmCompacterRéparer Bdd.Close On Error Resume Next Exit Function TraitementErreur: If Err = 3356 Then MsgBox "La bdd ne peut pas être ouverte en mode exclusif, vérifiez qu'elle n'est pas ouverte @ @", _ vbCritical, "Compacter" Else MsgBox "Code erreur " & Err.Number & ": " & vbCrLf & Err.Description, , "CompacterBdd" End If Compacter = False Exit Function End Function Public Function RéparerCompacterBdd() ' Répare et compacte la bdd spécifiée dans le formulaire. Dim strNomFichier As String, strRéparéeCompactée As String, strBackup As String, strBdd As String Dim Bdd As Database Set Bdd = CurrentDb() On Error GoTo TraitementErreur strBdd = Forms!frmCompacterRéparer!txtNomFichier ' Sauvegarde de la bdd en la copiant strNomFichier = Left(strBdd, InStr(strBdd, ".mdb") - 1) strBackup = strNomFichier & "Backup.mdb" FileCopy strBdd, strBackup 'Effectue la copie de sauvegarde DoEvents ' Réparation de la bdd DBEngine.RepairDatabase strBackup 'Effectue la réparation ' Supprime la bdd originale Kill strBdd DoEvents strRéparéeCompactée = strNomFichier & "RéparéeCompactée.mdb" DBEngine.CompactDatabase strBackup, strRéparéeCompactée 'Effectue le compactage Name strRéparéeCompactée As strBdd 'Renomme la bdd réparée avec le nom original RéparerCompacterBdd = True RéparerCompacterExit: MsgBox "La réparation et le compactage ont été effectués avec succès @ @", vbInformation, "Compacter" 'DoCmd.Close ' Ferme le formulaire frmCompacterRéparer Bdd.Close On Error Resume Next Exit Function TraitementErreur: If Err = 3356 Then MsgBox "La bdd ne peut pas être ouverte en mode exclusif, vérifiez qu'elle n'est pas ouverte @ @", _ vbCritical, "CompacterRéparer" Else MsgBox "Code erreur " & Err.Number & ": " & vbCrLf & Err.Description, , "CompacterRéparer" End If RéparerCompacterBdd = False Exit Function End Function
La selection multiple ne fonctionne pas !!!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142 Option Compare Database Option Explicit Type OPENFILENAME lStructSize As Long 'taille de la structure hwndOwner As Long 'descripteur de la fenêtre parent de la boîte de dialogue hInstance As Long 'instance de l'application courante lpstrFilter As String 'définit les extensions affichées dans la b. de dialogue. lpstrCustomFilter As String nMaxCustFilter As Long nFilterIndex As Long 'index du filtre à utiliser par défaut. lpstrFile As String 'nom du fichier affiché à l'ouverture de la fenêtre nMaxFile As Long 'taille du tampon mémoire précédent lpstrFileTitle As String 'contient le nom et extension du fichier sans le chemin nMaxFileTitle As Long 'taille du tampon mémoire précédent lpstrInitialDir As String 'répertoire initial de la boîte de dialogue lpstrTitle As String 'titre de la fenêtre flags As Long 'ensemble de constantes désignant les caractéristiques de la fenêtre nFileOffset As Integer nFileExtension As Integer lpstrDefExt As String 'extension ajoutée par défaut si l'usager l'omet lCustData As Long lpfnHook As Long lpTemplateName As String End Type 'Constantes pour l'ouverture ou la sauvegarde d'un fichier Public Const OFN_ALLOWMULTISELECT = &H200 'Autorise la sélection multiple de fichiers Public Const OFN_CREATEPROMPT = &H2000 'Affiche une fenêtre de confirmation de création de fichier Public Const OFN_ENABLEHOOK = &H20 'Public Const OFN_ENABLESIZING Public Const OFN_ENABLETEMPLATE = &H40 Public Const OFN_ENABLETEMPLATEHANDLE = &H80 Public Const OFN_EXPLORER = &H80000 'Donne le style "Explorer" à la boîte de dialogue (par défaut) Public Const OFN_EXTENSIONDIFFERENT = &H400 'Indique que l'usager a choisi une extension différente de celle par défaut Public Const OFN_HIDEREADONLY = &H4 'Case à cocher "Lecture seule" invisible Public Const OFN_FILEMUSTEXIST = &H1000 'Seuls les fichiers existants peuvent être saisis Public Const OFN_LONGNAMES = &H200000 'Gestion des noms longs pour les b. de dialogue n'ayant pas le style "Explorer" Public Const OFN_NOCHANGEDIR = &H8 'Conserve le répertoire d'origine à la fermeture de la fenêtre Public Const OFN_NODEREFERENCELINKS = &H100000 'La b. dialogue prendra le nom et le chemin du raccourci sélectionné Public Const OFN_NOLONGNAMES = &H40000 'Utilise les noms de fichiers courts (sans effet sur les fenêtres du type "Explorer" Public Const OFN_NONETWORKBUTTON = &H20000 'Désactive le bouton "Réseau" Public Const OFN_NOREADONLYRETURN = &H8000 'Ne sélectionne pas la case à cocher "Lecture seule" Public Const OFN_NOTESTFILECREATE = &H10000 'Le fichier ne sera pas créé avant la fermeture de la fenêtre Public Const OFN_NOVALIDATE = &H100 'Ne vérifie pas la validité de la saisie (validité du nom de fichier) Public Const OFN_OVERWRITEPROMPT = &H2 'Afficher un msg de confirmation d 'écrasement de fichier si celui-ci existe déjà Public Const OFN_PATHMUSTEXIST = &H800 'Les chemins et fichiers saisis doivent exister Public Const OFN_READONLY = &H1 'La case "Lecture seule" est cochée à la création de la fenêtre Public Const OFN_SHAREAWARE = &H4000 'Ignorer les erreurs de partage réseau Public Const OFN_SHOWHELP = &H10 'Afficher le bouton "Aide" dans la boîte de dialogue Public Const OFN_SHAREFALLTHROUGH = 2 Public Const OFN_SHARENOWARN = 1 Public Const OFN_SHAREWARN = 0 'Ouvrir la boîte de dialogue permettant d'ouvrir un fichier sans passer par un contrôle ActiveX Public Declare Function GetOpenFileName Lib "comdlg32.dll" _ Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long Public Function Compacter() As Boolean ' Objectif: Compacte la bdd spécifiée dans le formulaire frmCompacter. Dim strNomFichier As String, strCompactée As String, strBackup As String, strBdd As String Dim Bdd As Database, frm As Form_frmCompacterRéparer Set Bdd = CurrentDb() On Error GoTo TraitementErreur ' Récupérer le chemin d'accès complet de la bdd à compacter If IsNull(Forms!frmCompacterRéparer!txtNomFichier) Then MsgBox "Aucun nom de bdd n'a été entré, recommencez en entrant le nom complet de votre bdd @ @", _ vbExclamation, "Compacter" Exit Function Else strBdd = Forms!frmCompacterRéparer!txtNomFichier End If ' Sauvegarde de la bdd en la copiant, cette sauvegarde est conservée strNomFichier = Left(strBdd, InStr(strBdd, ".mdb") - 1) strBackup = strNomFichier & "Backup.mdb" FileCopy strBdd, strBackup 'Effectue la copie de sauvegarde DoEvents ' Compactage de la bdd strCompactée = strNomFichier & "Compacted.mdb" DBEngine.CompactDatabase strBdd, strCompactée 'Effectue le compactage ' Supprime la bdd originale et renomme la nouvelle version compactée Kill strBdd 'Supprime la bdd originale Name strCompactée As strBdd 'Renomme la bdd compactée avec le nom original Compacter = True CompacterBddExit: MsgBox "Le compactage a été effectué avec succès @ @", vbInformation, "frmCompacterRéparer" DoCmd.Close ' Ferme le formulaire frmCompacterRéparer Bdd.Close On Error Resume Next Exit Function TraitementErreur: If Err = 3356 Then MsgBox "La bdd ne peut pas être ouverte en mode exclusif, vérifiez qu'elle n'est pas ouverte @ @", _ vbCritical, "Compacter" Else MsgBox "Code erreur " & Err.Number & ": " & vbCrLf & Err.Description, , "CompacterBdd" End If Compacter = False Exit Function End Function Public Function RéparerCompacterBdd() ' Répare et compacte la bdd spécifiée dans le formulaire. Dim strNomFichier As String, strRéparéeCompactée As String, strBackup As String, strBdd As String Dim Bdd As Database Set Bdd = CurrentDb() On Error GoTo TraitementErreur strBdd = Forms!frmCompacterRéparer!txtNomFichier ' Sauvegarde de la bdd en la copiant strNomFichier = Left(strBdd, InStr(strBdd, ".mdb") - 1) strBackup = strNomFichier & "Backup.mdb" FileCopy strBdd, strBackup 'Effectue la copie de sauvegarde DoEvents ' Réparation de la bdd DBEngine.RepairDatabase strBackup 'Effectue la réparation ' Supprime la bdd originale Kill strBdd DoEvents strRéparéeCompactée = strNomFichier & "RéparéeCompactée.mdb" DBEngine.CompactDatabase strBackup, strRéparéeCompactée 'Effectue le compactage Name strRéparéeCompactée As strBdd 'Renomme la bdd réparée avec le nom original RéparerCompacterBdd = True RéparerCompacterExit: MsgBox "La réparation et le compactage ont été effectués avec succès @ @", vbInformation, "Compacter" DoCmd.Close ' Ferme le formulaire frmCompacterRéparer Bdd.Close On Error Resume Next Exit Function TraitementErreur: If Err = 3356 Then MsgBox "La bdd ne peut pas être ouverte en mode exclusif, vérifiez qu'elle n'est pas ouverte @ @", _ vbCritical, "CompacterRéparer" Else MsgBox "Code erreur " & Err.Number & ": " & vbCrLf & Err.Description, , "CompacterRéparer" End If RéparerCompacterBdd = False Exit Function End Function
Ma question est : y'aurait il pas une solution plus rapide et simple de réparer compacter plusieurs .mdb quitte à devoir noter les chemins un par un de ces bases... ?
Pour ne pas devoir à chaque fois les selectionner...
J'espere avoir été clair !
Merci infiniment d'avoir lu mon message
Partager