Tu as renommé ta base en %1 ?!!!
Pourquoi ?
****************************************
bonjour et merci encore.
J'ai fait une copie de ma base d'origine en en la nomant %1.
La base %1 se trouve sur le même dossier que la base d'origine soit :
D:\Access\Editions_des_Bons_de_Recherche\Versions\V5.4_
J'ai fait ça au cas ou il aurait un problème avec le batch je pensais d'ailleurs que c'est ce que je devais faire.
Une autre question au passage pourquoi le batch me copie la base %1 en %1.accdb.sav et que je n'arrive pas à ouvrir ce fichier avec Access ?
Merci à toi
La copie c'est pour la sécurité (tu n'as pas lu l'article du blog)
Tu ne peux ouvrir ce fichier sans au préalable l'avoir renommé (suppression de l'extension .sav).
Le batch n'a aucun problème, il fonctionne parfaitement. cf https://www.developpez.net/forums/d1...r/#post8935343
%1 est la variable Dos qui désigne le 1er paramètre d'un batch.
Donc mis à part le chemin vers ton MS ACCESS rien ne soit être modifié, ça se joue à l'espace prêt.
Reprends le batch d'origine, ne modifie QUE le CHEMIN d'accès à MSACCESS.EXE.
Tes modifications ne sont pas bonnes.
Dans le code 1 et 3 tu utilises le %1 c'est incorrect, il se peut même qu'access ne puisse pas lire ce nom.
Dans le code 2 il n'y a pas le chemin, comment veux-tu que MSACCESS.EXE trouve ton fichier ?
Reprend le fichier batch.
Change le chemin vers ton MSACCESS.EXE
Donc cette partie :
Ne touche à rien d'autre du batch, ne renomme pas ton accdb.
Code : Sélectionner tout - Visualiser dans une fenêtre à part C:\Program files (x86)\Microsoft Office\OFFICE14
Fait un glisser/déposer et ça devrait marcher.
MErci pour ta réponse j'ai donc modifié le code du batch :
Maintenant plus le message d'erreur fichier non trouvé, le batch ouvre la base sans exécuter le code, le curseur clignote toujours sur la fenêtre DOS après le Décompile, je ferme la base, la fenetre du batch se ferme, je réouvre la base et malheurement le problème persiste toujours l'erreur que j'avais signalé au début du sujet soit :l'erreur '2467' (Errreur définie par l'application) ...
Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 rem @echo off echo --------------- GUIDE D'UTILISATION -------------------------------- echo Copiez ce fichier dans le répertoire racine à traiter. echo Decompile et compacte le fichier. echo Enfoncé la touche Shift pour la première passe. echo -------------------------------------------------------------------- echo AUTEUR : FABRICE CONSTANS MVP copy %1 %1.sav SET NoExecuteApplication = "Oui" "C:\Program files (x86)\Microsoft Office\OFFICE14\MSACCESS.EXE" %1 /Decompile "C:\Program files (x86)\Microsoft Office\OFFICE14\MSACCESS.EXE" %1 /Compact SET NoExecuteApplication=
tu peux poster l'application ?
Bonjour,
Te voici une copie de l'Appli, l'erreur se situe sur la procédure "Création_Zone_de_Texte" quand je veux supprimer les zones de texte "TexteTest" de l'Etat "Tab_Ch_Exp_Sp" , la suppression se fait, puis ensuite apparait l'erreur '2467', je t'envoie aussi un fichier excel que tu auras besoin pour faire tourner le programme. Tu as dans la table "Tab_Parametre" les champs "Chemin_Fichier_Import" et "Nom_Fichier_Import" pour indiquer ou tu places ce fichier Excel.
Autre chose quand tu es entré dans l'appli choisis "Edition Bons de Recherche", puis entre une date, ensuite l'importation du fichier excel se fait, fait OK à tous les messages d'avertissement.
Si l'erreur n'apparait pas la première fois, recommence la même manip.
J'aurai voulu t'envoyer tout cela en message privé mais j'ai pas réussi ou c'est pas possible de joindre des fichiers...dommage quand même
Merci à toi
Ce n'est pas le code du début. Tu ne testais qu'une fois le contrôle.
Si dans une boucle tu supprimes l'élément en cours tu ne peux pas dans la même occurrence le tester puisqu'il n'existe plus. D'où le message d'erreur explicite.
C'est typiquement un problème d'algorithme.
Il y a plusieurs solutions possibles. L'une d'elle (pas forcément optimisée mais propre) :
Si tu changes le code en cours de discussion, reposte-le.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 Dim nameCtrl As String Set rep = Reports("TAB_Ch_Exp_Sp") For Each Ctrl In rep.Controls nameCtrl = Ctrl.Name If TypeOf Ctrl Is TextBox Then If nameCtrl Like "Absents Export" Then DeleteReportControl rep.Name, nameCtrl If nameCtrl Like "TexteTestSUP*" Then DeleteReportControl rep.Name, nameCtrl '... End If Next
Cordialement,
loufab "Ce n'est pas le code du début. Tu ne testais qu'une fois le contrôle.
Si dans une boucle tu supprimes l'élément en cours tu ne peux pas dans la même occurrence le tester puisqu'il n'existe plus. D'où le message d'erreur explicite.
C'est typiquement un problème d'algorithme.
Il y a plusieurs solutions possibles. L'une d'elle (pas forcément optimisée mais propre) :"
*************************************************************************
Merci pour ton aide, j'avais effectivement pensé au problème de " fin d’existence " mais je n'avais pas pensé à utiliser une variable de travail. Merci.
J'ai codé comme cela :
Et j'ai un autre problème il ne prend en compte qu'un controle sur 2 soit le "TexteTest1" ,...3,...5 etc...J'ai essayé de séparer les controles avec un blanc :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 For Each Ctrl In rep.Controls nameCtrl = Ctrl.Name 'nbre_control = Ctrl. If TypeOf Ctrl Is TextBox Then If nameCtrl Like "Absents Export" Then DeleteReportControl rep.Name, nameCtrl If nameCtrl Like "TexteTest*" Then DeleteReportControl rep.Name, nameCtrl If nameCtrl Like "Nouveaux Champs apparuts dans l'Export" Then DeleteReportControl rep.Name, nameCtrl '... End If Next
mais le problème persiste, j'ai bien le nombre de zone de texte :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 For depart = 0 To j - 1 Set ctl = CreateReportControl("Tab_Ch_Exp_Sp", acTextBox, , , , L, T, 5150, 600) With ctl ' Définit un nom pour le contrôle .Name = "TexteTest" & depart T = T + 800 '800 au lieu de 600 ' Déclare l'événement "Après mise à jour" du contrôle ' .AfterUpdate = "[Event Procedure]" End With
mais je voudrais compter le nombre de zone de listes nommées "TesteTest" mais je ne trouve pas la solution si tu as une idée...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 nbre_control = Reports("TAB_Ch_Exp_Sp").Count
Pour le 1 sur 2 : il doit y avoir un problème dans la boucle. Poste le code complet là il en manque.
Pour compter : utilise la même boucle for que je t'ai fourni, au lieu de supprimer des choses comptes-les.
Code : Sélectionner tout - Visualiser dans une fenêtre à part cpt=cpt+1
Bonjour et merci pour ton suivi, j'ai pris en compte ton idée de compter les zones de texte voulues :
A ce stade arrive un problème il "oublie" les 2 premières zones (TestTest0 et TestTestSup0) donc le comteur est à 26 au lieu de 28.
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 Dim nbre_control As Integer Set rep = Reports("TAB_Ch_Exp_Sp") nbre_control = 0 For Each Ctrl In rep.Controls nameCtrl = Ctrl.Name 'nbre_control = Ctrl. If TypeOf Ctrl Is TextBox Then If nameCtrl Like "Absents Export" Then DeleteReportControl rep.Name, nameCtrl If nameCtrl Like "TexteTest*" Then nbre_control = nbre_control + 1 If nameCtrl Like "Nouveaux Champs apparuts dans l'Export" Then DeleteReportControl rep.Name, nameCtrl ' If nameCtrl Like "TexteTestSUP*" Then DeleteReportControl rep.Name, nameCtrl '... End If Next
je supprime les zones voulues et connues :
Puis je recompte mes zones :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 Do While nbre_control > 0 For Each Ctrl In rep.Controls nameCtrl = Ctrl.Name If TypeOf Ctrl Is TextBox Then If nameCtrl Like "TexteTest*" Then DeleteReportControl rep.Name, nameCtrl nbre_control = nbre_control - 1 End If '... End If Next Loop
puis je supprime les zones restantes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 nbre_control = 0 For Each Ctrl In rep.Controls nameCtrl = Ctrl.Name 'nbre_control = Ctrl. If TypeOf Ctrl Is TextBox Then If nameCtrl Like "Absents Export" Then DeleteReportControl rep.Name, nameCtrl If nameCtrl Like "TexteTest*" Then nbre_control = nbre_control + 1 If nameCtrl Like "Nouveaux Champs apparuts dans l'Export" Then DeleteReportControl rep.Name, nameCtrl '... End If Next
Et là maintenant ça fonctionne, reste apparemment un problème à l'édition car il m'imprime mon état plus d'une fois mais le problème des suppressions de zones me semble résolu. A vérifier quand même, je ne mentionne pas "résolu" car il subsiste le problème de l'édition et je préfère tester encore.
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 If nbre_control > 0 Then Do While nbre_control > 0 For Each Ctrl In rep.Controls nameCtrl = Ctrl.Name If TypeOf Ctrl Is TextBox Then If nameCtrl Like "TexteTest*" Then DeleteReportControl rep.Name, nameCtrl nbre_control = nbre_control - 1 End If '... End If Next Loop End If
Par contre tu m'as pas dis si tu as pu déboguer ma base avec ton batch.
Merci de me tenir au courant.
Je m'absente une semaine je te tiendrai au courant de la suite des évènements.
Merci encore pour ton aide.
A+
Ta base n'avais aucun problème de structure, juste un problème d'algorithme qui provoquait l'erreur et l'impossibilité de compiler dû à des erreurs dans le code.
Ce que j'ai constaté en regardant brièvement cet application :
C'est pas très propre,
- Beaucoup de code mort (inutilisable) du fait de l'absence d'objet auquel il fait référence.
- L'absence systématique de Option Explicit en en-tête des modules.
- Du code en commentaire issu d'essai infructueux.
- Des copie de modules.
Je te conseille d'assainir tout ça, car visiblement, il s'agit d'une application qui a une destination professionnelle.
Concernant le batch et le code que tu as mis en place il y a une incohérence entre les set systèmes.
D'un coté tu as NoExecuteACCESS et de l'autre NoExecuteApplication. Hors les 2 doivent être identiques. Corrige ça et remet le %1 et ça va fonctionner.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager