IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Supprimer un controle dans un Etat en VBA


Sujet :

VBA Access

  1. #21
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 757
    Points : 208
    Points
    208
    Par défaut
    Citation Envoyé par loufab Voir le message
    On s'est mal compris:

    à la place des %1 mets le nom de ton fichier.
    ****************************
    Bonjour,
    Mais le nom de mon fichier (la base que j'ai copiée) est bien %1

  2. #22
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 600
    Points
    24 600
    Par défaut
    Tu as renommé ta base en %1 ?!!!

    Pourquoi ?
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  3. #23
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 757
    Points : 208
    Points
    208
    Par défaut
    Citation Envoyé par loufab Voir le message
    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

  4. #24
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 600
    Points
    24 600
    Par défaut
    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.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  5. #25
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 600
    Points
    24 600
    Par défaut
    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 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\Program files (x86)\Microsoft Office\OFFICE14
    Ne touche à rien d'autre du batch, ne renomme pas ton accdb.

    Fait un glisser/déposer et ça devrait marcher.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  6. #26
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 757
    Points : 208
    Points
    208
    Par défaut
    MErci pour ta réponse j'ai donc modifié le code du batch :
    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=
    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) ...

  7. #27
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 600
    Points
    24 600
    Par défaut
    tu peux poster l'application ?
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  8. #28
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 757
    Points : 208
    Points
    208
    Par défaut
    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
    Fichiers attachés Fichiers attachés

  9. #29
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 600
    Points
    24 600
    Par défaut
    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) :

    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
    Si tu changes le code en cours de discussion, reposte-le.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  10. #30
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 757
    Points : 208
    Points
    208
    Par défaut
    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 :
    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
    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
    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 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
     
    nbre_control = Reports("TAB_Ch_Exp_Sp").Count
    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...

  11. #31
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 600
    Points
    24 600
    Par défaut
    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.

    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  12. #32
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 757
    Points : 208
    Points
    208
    Par défaut
    Bonjour et merci pour ton suivi, j'ai pris en compte ton idée de compter les zones de texte voulues :
    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
    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.
    je supprime les zones voulues et connues :
    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 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
     
    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
    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
    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
    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.
    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+

  13. #33
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 600
    Points
    24 600
    Par défaut
    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.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [AC-2003] Supprimer plusieurs controls dans un formulaire
    Par lex89 dans le forum VBA Access
    Réponses: 10
    Dernier message: 03/05/2012, 15h16
  2. Réponses: 2
    Dernier message: 12/10/2010, 18h50
  3. ajouter et supprimer des données dans un tcd avec vba
    Par pscoool dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 09/12/2009, 18h14
  4. [VBA] controle visible ou non dans un etat
    Par choubak dans le forum IHM
    Réponses: 2
    Dernier message: 27/05/2007, 17h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo