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

IHM Discussion :

J'ai des problèmes d'arguments


Sujet :

IHM

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    681
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 681
    Points : 214
    Points
    214
    Par défaut J'ai des problèmes d'arguments
    Bonjour le forum,
    Pour pouvoir remplir ma table ABC à 4 champs(ID,sDos,BaseO,BaseD) j'utilise des procédures tirées des FAQ que j'ai modifier pour pouvoir extraire d'un dossier (ici C:\Fichier_cheminots les noms des chemins vers les 2 bases de chaque sous-dossier de ce dossier. les voici:
    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
    Public Sub cmdFolder_Click()
    On Error GoTo 0
    Dim fso As FileSystemObject, dossier As Folder, sousdossier As Folder, Fichier As File
    Set fso = New FileSystemObject
    Set dossier = fso.GetFolder("c:\Fichiers_cheminots")
    LD = Len(dossier)
    AD = -1 'ligne dos
    BD = 0 'colonne dos
    AF = -1 'ligne fich
    BF = 0 'colonne fich
    C = 0
    scan dossier
    End Sub
     
    Public Sub scan(ByVal dossier As Folder) '
    BF = 0 'colonne fich
    For Each Fichier In dossier.Files
      BF = BF + 1
      LF = Len(Fichier) - LD - LS 'Len(Sdos)
     ' y = "fich      " & str(AD) & "," & str(BF) & " " & Right(Fichier, LF)
      'Debug.Print y
     Call ModTable("", str(AD), str(BF), Right(Fichier, LF))
    Next
    For Each sousdossier In dossier.SubFolders
      AD = AD + 1
      BD = BD + 1
      LS = Len(sousdossier) - LD
      'x = "Sdos  " & str(AD) & "," & str(BD) & " " & Right(sousdossier, LS)
       'Debug.Print x
       Call ModTable(str(AD), "", sousdosier, Right(Fichier, LF), Right(sousdossier, LS))
      scan sousdossier
    Next
    End Sub
    Public Sub ModTable(NN As Integer, abrev As String, sD As String, S1 As String, S2 As String)
    On Error GoTo 0
    Set rs = CurrentDb.OpenRecordset("ABC", dbOpenDynaset)
     
    With rs
        .AddNew
        !Nr = NN
        !ABR = abrev
        !sDos = sD
        !BaseO = S1
        !baseD = S2
       .Update
    End With
    End Sub
    En réactivant les lignes 20 et 21, 28 et 29 et en désactivant les lignes 22 et 30, on affiche dan la fenêtre 'Exécution' les noms des bases et sous-dossiers.
    C'est là que le problème apparaît ligne 22 avec "Erreur de compilation; argument non facultatif" sur "Call ModTable".
    L'aide avec F1 conduit à "Mot clé introuvable".
    Auriez-vous une solution ?
    Merci de l'aide éventuelle.

  2. #2
    Membre émérite Avatar de Zekraoui_Jakani
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    1 670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 670
    Points : 2 489
    Points
    2 489
    Par défaut
    la procédure appelée doit avoir le même nombre d'arguments; or :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Call ModTable("", str(AD), str(BF), Right(Fichier, LF)) 'a 4 arguments
    Call ModTable(str(AD), "", sousdosier, Right(Fichier, LF), Right(sousdossier, LS)) 'a 5 arguments, sauf erreur
    Soit vous ajustez ce nombre ou utilisez une autre sub avec nom différent
    PS: vous pouvez utiliser Chr(32) ou vbNullString, au lieu de "", comme argument

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    681
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 681
    Points : 214
    Points
    214
    Par défaut
    Merci Zekraoui_Jakani,
    Je vais corriger cela ainsi que d'autres défauts détectés depuis.
    Une question subsidiaire : ne peut-on pas se passer de ByVal et ByRef ?

    Pour une table dont le nom est ABC , que dois-je mettre pour ByVal et pour ByRef ?
    Pour une string ST="azerty" c'est clair ByVal -> "azerty", ByRef -> ST

    Amicalement

  4. #4
    Membre émérite Avatar de Zekraoui_Jakani
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    1 670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 670
    Points : 2 489
    Points
    2 489
    Par défaut
    Le mot-clef “ByRef”, implique qu’une référence à l’élément passé à la procédure est conservée, et que cet élément peut être modifié par la fonction appelée.
    ByVal signifie au contraire que lors de la passation d’un argument, celui-ci est évalué, et que seule sa valeur est prise en compte. Il en résulte que l’élément passé à la procédure ne peut être modifié par celle-ci.
    En pratique, je laisse l'application utiliser le mot-clef par défaut "ByRef", sauf nécessité.

  5. #5
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Salut.

    J'aime bien le choix du titre


    Lorsqu'un élément est passé ByRef, c'est en fait l'adresse mémoire de la variable qui est passée (un peu comme un pointeur, sauf que l'on ne peut pas réaliser de calculs sur les pointeurs, sauf manipulations tordues). Lorsqu'il est passé ByVal, c'est une copie de la variable qui est passée en argument, de sorte qu'elle peut être modifiée dans la procédure appelée sans incidence sur la procédure appelante.

    Certains éléments ne peuvent être passés ByRef (les éléments individualisés d'un tableau, par exemple), d'autres, bien que renseignés ByVal sont passés ByRef (les objets, par exemple).
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  6. #6
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonsoir,
    est-ce une erreur ces 2 variables: sousdosier et sousdossier ici: Call ModTable(str(AD), "", sousdosier, Right(Fichier, LF), Right(sousdossier, LS))

    Ci c'est le cas, pour éviter cela, il est indispensable d'utiliser l'instruction Option Explicit au début des modules standards
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    681
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 681
    Points : 214
    Points
    214
    Par défaut
    tee_grandbois
    est-ce une erreur ces 2 variables: sousdosier et sousdossier ici: Call ModTable(str(AD), "", sousdosier, Right(Fichier, LF), Right(sousdossier, LS))
    Merci de ce rappel à l'ordre, car effectivement c'est bien une erreur.

    Pierre Fauconnier & Zekraoui_Jakani
    Grâce à vos réponses j'y vois un peu plus clair.
    Dans le cas de ma mise à jour d'une table avec des strings, c'est donc ByVal qui s'imposerait, car ces données ne seront pas modifiées par la procédure, mais simplement sauvegardées.
    Beaucoup devront donc être Dim en Global, car utilisées par plusieurs modules.

    Je vais donc reprendre ma mise au point.
    Merci de vote aide

    Cordialement.

  8. #8
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par AndréPe Voir le message
    [...]
    Beaucoup devront donc être Dim en Global, car utilisées par plusieurs modules.[...]

    Surtout pas. Les variables globales sont à bannir, à de très rares exceptions près (en gros, je n'en vois qu'une). Le problème que tu rencontres n'a rien à voir avec les byref et byval (ta question à ce niveau est, comme tu l'as dit toi-même, subsidiaire).

    Ta proc ModTable requiert 5 paramètres: Public Sub ModTable(NN As Integer, abrev As String, sD As String, S1 As String, S2 As String)

    Ta ligne 22 ne lui en passe que 4: Call ModTable("", str(AD), str(BF), Right(Fichier, LF))


    Zekraoui t'avait déjà signalé cette erreur. Tu dois passer 5 paramètres en ligne 22. La question est donc: Pourquoi ne lui en passes-tu que 4? La réponse à cette question n'est liée en rien à ByVal ou ByRef. Si dans certains cas, tu n'as que 4 valeurs à passer, et pour autant que ta table accepte le Null, tu pourrais déclarer les arguments facultatifs à la fin de la liste d'argument, éventuellement avec une valeur par défaut, grâce au mot Optional => Sub MaSub(Arg1 As String, Arg2 As Long, Optional Arg3 As String = "NC") par exemple. Les arguments optionnels ont, par défaut, la valeur par défaut de leur type (String = "", Long ou Date = 0, Boolean = False).



    Au delà, il faudrait:
    • indenter ton code => décaler les lignes d'un bloc vers la droite;
    • séparer tes End Sub et Sub par un espace pour que l'on repère mieux les blocs de procédure et de fonction;
    • supprimer Call qui n'est pas nécessaire et alourdit tant la saisie que la lecture du code;
    • suppimer les On Error Goto 0 en début de proc qui ne servent à rien, puisque la gestion d'erreur est toujours contenue à l'intérieur d'une procédure;
    • corriger les noms de tes variables et placer la ligne Option Excplicit au début de ton module, comme le suggère Tee_Grandbois (J'explique à quoi ça sert dans ce billet).



    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
    Public Sub cmdFolder_Click()
      Dim fso As FileSystemObject, dossier As Folder, sousdossier As Folder, Fichier As File
     
      Set fso = New FileSystemObject
      Set dossier = fso.GetFolder("c:\Fichiers_cheminots")
      LD = Len(dossier)
      AD = -1 'ligne dos
      BD = 0 'colonne dos
      AF = -1 'ligne fich
      BF = 0 'colonne fich
      C = 0
      scan dossier
    End Sub
     
    Public Sub scan(ByVal dossier As Folder) 
      BF = 0 'colonne fich
      For Each Fichier In dossier.Files
        BF = BF + 1
        LF = Len(Fichier) - LD - LS 'Len(Sdos)
     '   y = "fich      " & str(AD) & "," & str(BF) & " " & Right(Fichier, LF)
    '    Debug.Print y
        ModTable("", str(AD), str(BF), Right(Fichier, LF))
      Next
      For Each sousdossier In dossier.SubFolders
        AD = AD + 1
        BD = BD + 1
        LS = Len(sousdossier) - LD
    '    x = "Sdos  " & str(AD) & "," & str(BD) & " " & Right(sousdossier, LS)
    '    Debug.Print x
        ModTable str(AD), "", sousdosier, Right(Fichier, LF), Right(sousdossier, LS)
        scan sousdossier
      Next
    End Sub
     
    Public Sub ModTable(NN As Integer, abrev As String, sD As String, S1 As String, S2 As String)
      Set rs = CurrentDb.OpenRecordset("ABC", dbOpenDynaset)
      With rs
        .AddNew
        !Nr = NN
        !ABR = abrev
        !sDos = sD
        !BaseO = S1
        !baseD = S2
        .Update
      End With
    End Sub
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    681
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 681
    Points : 214
    Points
    214
    Par défaut
    Au delà, il faudrait:
    indenter ton code => décaler les lignes d'un bloc vers la droite;
    séparer tes End Sub et Sub par un espace pour que l'on repère mieux les blocs de procédure et de fonction;
    supprimer Call qui n'est pas nécessaire et alourdit tant la saisie que la lecture du code;
    suppimer les On Error Goto 0 en début de proc qui ne servent à rien, puisque la gestion d'erreur est toujours contenue à l'intérieur d'une procédure;
    corriger les noms de tes variables et placer la ligne Option Excplicit au début de ton module, comme le suggère Tee_Grandbois (J'explique à quoi ça sert dans ce billet).
    J'ai mis en forme le code suivant tes suggestions 1, 2 et 5.
    J'ai conservé provisoirement les "On Error goto 0" qui permettent de savoir exactement où se trouve l'erreur.
    Quant à la 3, pour le moment elle crée une erreur de compilation lors de l'écriture du code.

    En ce qui concerne les variables global, comment les éviter quand une variable concerne plusieurs modules ?
    Merci et bonne journée.

  10. #10
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    On Error Goto 0 Réinitialise le gestionnaire d'erreurs, de sorte qu'il n'y a plus de gestion d'erreur. Comme le gestionnaire d'erreur est toujours réinitialisé en début de procédure (la portée de la gestion d'erreur est la procédure), mettre cette ligne en début de procédure ne sert à rien. Ton code bloquera sur la ligne en erreur, avec ou sans cette première ligne.

    Pour la 3 (je suppose que c'est l'histoire du Call), il faudrait que tu donnes ton code pour que l'on voit où se pose le problème. Laisse Call si tu le souhaites, mais ça ne sert à rien: Call MaProc(Par1, Par2) revient au même que MaProc Par1, Par2. Tu t'évites ainsi la saisie du Call et des ()... après, chacun son style. Perso, j'aime quand c'est léger.

    Pour ce qui est des variables globales, on les évite en utilisant les paramètres, comme tu l'a fait pour la procédure ModTable. Le problème des variables globales, outre leur persistance qui n'est pas nécessaire ici, elles créent des dépendances fortes entre tes différentes procédures, t'empêchant le réemploi aisé de ces dernières. Les variables publiques pouvant être modifiées n'importe où, elles rendent le code instable et difficilement testable. Elles ne permettent pas de tester chaque procédure de façon indépendante. Elles sont à éviter dans une architecture professionnelle de code.

    Dans ce que tu montres comme code, je ne vois nulle part le besoin de travailler avec des variables publiques. Je n'ai en général besoin de variable publique que pour la gestion dynamique d'un ruban personnalisé.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    681
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 681
    Points : 214
    Points
    214
    Par défaut
    Bonjour,
    Je suis en cours de remaniement du code pour ne plus devoir utiliser le Global, en faisant en sorte que mon appli ne concerne qu'un seul module et obtenir d'abord une liste des chemins des fichiers (en général des bases .mbd) à partir d'un répertoire donné de C:\.

    Je te tiens au courant des suites.
    J'avais trouvé un code dans des FAQ, mais je l'ai perdu et suis à sa recherche !
    Cordialement.

  12. #12
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par AndréPe Voir le message
    [...]
    J'avais trouvé un code dans des FAQ, mais je l'ai perdu et suis à sa recherche ![...]
    De quel code parles-tu?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  13. #13
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    681
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 681
    Points : 214
    Points
    214
    Par défaut
    De quel code parles-tu?
    J'aurais du être plis précis ! Du code de base pour lister dans une table les chemins complets des fichiers avec une expansion donnée (dans mon cas ".mdb").

    Comme cette appli était noyée à l'origine dans l'appli principale, je suis en train de l'isoler pour éviter quelques problèmes qui sont apparus au cours des discussions.
    Il me faut pour cela un peu de temps.
    Merci de t'intéresser à mon cas.
    Bonne journée

  14. #14
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    681
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 681
    Points : 214
    Points
    214
    Par défaut
    Pour éviter les pb de liens/dépendance, j'ai créé une appli indépendante qui extrait du répertoire donné les sous-répértoires et bases et au fur et à mesure les placent dans la table ABC.
    .
    Très simple, un form avec 2 boulons (close et crée table) , 2 objets (table ABC à créer et le répertoire à analyser (en PJ)).

    Pour la mise au point, on peut d’abord créer cette liste dans la fenêtre «*Exécution*» en neutralisant certaines lignes du code.

    Puis passer au remplissage de la table finale ABC en réactivant les lignes et en en désactivant d’autres, comme indiqué plus loin.Or, je ne parviens pas à faire fonctionner correctement la première phase*:, le clic sur l'un ou l'autre des boutons de commande conduit à "L'expression sur clic du type événement porté comme paramètre de la propriété du type événement est à l'origine d'une erreur Type défini par l'utilisateur non défini".

    Ce 'sur clic' est la première des propriétés des boutons, catégorie "événements", et la ligne est remplie avec le nom de la procédure correspondante de l'appli.

    C'est la première fois que j'ai cette erreur en créant une appli.! n'y comprend plu rien !
    Au cas où vous auriez des idées, voici le module et en PJ les 2 objets (le seconde réduite à quelques lignés car l'original en a 47).
    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
    Option Explicit
    Option Compare Database
    Dim fso As FileSystemObject, dossier As Folder, sousdossier As Folder, Fichier As File
    Public Sub cmdQuit_Click()
      On Error GoTo Err_cmdQuit_Click
      DoCmd.Close
     
    Exit_cmdQuit_Click:
       Exit Sub
     
    Err_cmdQuit_Click:
        MsgBox Err.Description
        Resume Exit_cmdQuit_Click
     
    End Sub
     
    Public Sub CmdT_Click()
      On Error GoTo 0
      Set fso = New FileSystemObject
      Set dossier = fso.GetFolder("c:\Fichiers_cheminotsR")
      LD = Len(dossier)
      AD = -1 'ligne dos
      BD = 0 'colonne dos
      AF = -1 'ligne fich
      BF = 0 'colonne fich
      C = 0
      scan dossier
    End Sub
     
    Public Sub scan(ByVal dossier As Folder) '
       BF = 1 'colonne fich
       For Each Fichier In dossier.Files
         BF = BF + 1
         If BF > 3 Then BF = 4
         AD = AD + 1
         LF = Len(Fichier) - LD - LS 'Len(Sdos)
         RSF = Right(Fichier, LF)
         y = "fich      " & str(AD) & "," & str(BF) & " " & RSF
         Debug.Print y
         'QLF = "UPDATE ABC SET  [BaseO] = '" & Right(Fichier, LF) & "'" & "  WHERE [Nr] = '" & AD & "'"
         'DoCmd.RunSQL QLF
      Next
     
      For Each sousdossier In dossier.SubFolders
        AD = AD + 1
        BD = 1
        LS = Len(sousdossier) - LD
        RSD = Right(sousdossier, LS)
        x = "Ssdos  " & str(AD) & "," & str(BD) & ", " & RSD
        Debug.Print x
        'QL = "UPDATE ABC SET  [Ssdos] = '" & RSD & "'  WHERE [Nr] = '" & str(AD) & "'"
        'DoCmd.RunSQL QL
        scan sousdossier
      Next
     
    End Sub
    Ce code concerne la phase préparatoire destinée à contrôler la liste.
    Pour phaser au code définitif, il faut
    - désactiver les lignes 38, 39, 49 et 50
    - activer les lignes 40, 41, 51 et 52
    table ABCet répertoire à analyser en PJ.

    Merci de votre aide

    PS : Regrets, mais je ne parviens pas à joindre une PJ !
    J'envoies donc tout de mëme ma réponse et dans un nouveau message espère pouvoir envoyer les PJ.

Discussions similaires

  1. Encore des problèmes avec le BDE
    Par Flint dans le forum C++Builder
    Réponses: 19
    Dernier message: 31/12/2007, 23h26
  2. Réponses: 8
    Dernier message: 10/08/2004, 11h49
  3. RegCreateKeyEx me pose des problèmes sous XP
    Par Morgatte dans le forum x86 32-bits / 64-bits
    Réponses: 3
    Dernier message: 08/07/2004, 05h28
  4. Optimiser MS SQL2000 car j'ai des problèmes de lenteurs
    Par djavaux dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 21/04/2004, 10h50
  5. Hum XMLRad RC2 deja des problèmes ?!
    Par [DreaMs] dans le forum XMLRAD
    Réponses: 2
    Dernier message: 25/02/2003, 12h23

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