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 :

Barre de progression lors d'un INSERT


Sujet :

IHM

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Avril 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2012
    Messages : 43
    Points : 36
    Points
    36
    Par défaut Barre de progression lors d'un INSERT
    Bonjour tout le monde,

    Je cherche à créer une barre de progression qui est en lien avec un insert SQL.
    Je m'explique.

    J'ai un fichier Excel que j'importe dans Access et qui contient 8000 lignes sur 37 colonnes et j'aimerai afficher une barre de progression lors de l'insertion des lignes du fichier dans TBL_Excel.

    J'ai essayé de me baser sur l'article de arkham46 http://arkham46.developpez.com/artic...s/formattente/
    mais je ne sais pas comment changer les paramètres en fonction du nombre de lignes du fichier Excel.

    Voici la procédure que j'utilise pour faire la lecture du fichier Excel et l'nsertion dans TBL_Excel.

    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
    Function ImportXL(xlPath As String, wsName As String, startRow As Integer, pKeyCol As String, acTable As String, pKey As String) As Boolean
    '-> La fonction renvoie vrai si l'import réussit et faux dans le cas contraire
    'xlPath : chemin du fichier Excel
    'wsName : nom de la feuille Excel qui contient les données à importer
    'startRow : ligne du fichier Excel où commence l'import
    'pKeyCol : colonne du fichier Excel qui est la clé primaire de la table Access
    'acTable : table Access qui reçoit les données
    'pKey : nom du champ "identifiant"
     
        'active la routine de gestion d'erreur.
        On Error GoTo erreur
     
        'déclaration des variables
        Dim app As Excel.Application
        Dim wkb As Excel.Workbook
        Dim wks As Excel.Worksheet
     Dim Nb_Lignes As Integer
     Nb_Lignes
        'initialisation des variables
        Set app = New Excel.Application
        Set wkb = app.Workbooks.Open(xlPath)
        Set wks = wkb.Worksheets(wsName)
     
        Dim i As Integer, cSQL As String
        i = startRow
     
        'pour éviter les messages lors de l'ajout des enregistrements
        DoCmd.SetWarnings False
         With wks
            'arrêter l'importation lorsque l'on rencontre une case vide
            While .Range(pKeyCol & i).Value <> "" '(où pKeyCol représente la colonne et i la ligne)
            Nb_Lignes = Nb_Lignes + 1
            Wend
         End With
     
     
        With wks
            'arrêter l'importation lorsque l'on rencontre une case vide
            While .Range(pKeyCol & i).Value <> "" '(où pKeyCol représente la colonne et i la ligne)
     
                'condition de remplissage de la table => eviter les doublons
                'si l'enregistrement existe déjà dans la table destination,
                'on passe à la ligne suivante sans l'importer
                'If DCount("*", acTable, pKey & " LIKE '" & .Range(pKeyCol & i).Value & "'") = 0 Then
     
                    'requête SQL (ajouter autant de champs que nécessaire)
                    cSQL = "INSERT INTO " & acTable & " (
    '.......
                    cSQL = cSQL & "[Fk_Contrat]"
     
                    cSQL = cSQL & ") VALUES ("
    '.......                
                    cSQL = cSQL & Code_Global.GET_PK_Num_Contrat & "); "
     
     
     
     
     
                    'Forms![FRM_Accueil]![Texte424].Value = cSQL
     
                    'exécute la requète
                    DoCmd.RunSQL cSQL
     
                'End If
     
                'on incrémente la variable i pour passer à la ligne suivante
                i = i + 1
            Wend
     
        End With
     
        'on réactive les messages d'erreurs
        DoCmd.SetWarnings True
     
        'libération variables
        Set wks = Nothing
        Set wkb = Nothing
        Set app = Nothing
     
        MsgBox "Import du fichier Excel réussi.", vbInformation + vbOKOnly, "Opération terminée..."
     
        ImportXL = True
        Exit Function
     
    erreur:    ' Routine de gestion d'erreur.
        MsgBox "Erreur: " & Err.Number & vbCrLf & Err.Description, vbOKOnly + vbInformation
        MsgBox ("LIGNE DU FICHIER EXCEL NUM" + Str(i))
        ImportXL = False
    End Function
    et voici le code de arkham46 pour la barre de progression

    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
    Public Sub Barre()
    Dim oProgress As clProgress
    Dim lCptIteration1 As Long
    Dim lCptIteration2 As Long
    Dim lString As String
    Const lNbIterations As Long = 10000
    On Error GoTo Gestion_Erreurs
    ' Ouverture et initialisation du formulaire d'attente
    Set oProgress = New clProgress
    oProgress.ProgressMin = 1
    oProgress.ProgressMax = lNbIterations
    oProgress.ProgressValue = 0
    oProgress.GeneralInfo = "Veuillez patienter durant le traitement ... "
    oProgress.Visible = True
    ' Boucle de traitement
    For lCptIteration1 = 1 To lNbIterations
        For lCptIteration2 = 1 To 1000
            lString = Chr((lCptIteration1 + lCptIteration2) Mod 256)
        Next
        ' Met à jour la progression
        oProgress.ProgressValue = lCptIteration1
        ' Met à jour l'étiquette
        oProgress.ProgressInfo = "Traitement en cours ... " & Format(oProgress.ProgressPercent, "00%")
        ' Repaint le formulaire
        oProgress.Repaint
    Next
    ' Fermeture du formulaire d'attente
    Set oProgress = Nothing
    Exit Sub
    Gestion_Erreurs:
        If Err.Source Like "clProgress" Then
            ' Ajoutez ici un éventuel code de journalisation des erreurs (fichier log)
            ' XXXXXX
            ' Puis on continue le traitement
            Resume Next
        Else
            MsgBox "Erreur dans le traitement n° " & Err.Number & ", " & Err.Description, vbCritical
        End If
        Set oProgress = Nothing
     
    End Sub
    En fait c'est la première fois que je vais utiliser une barre de progression dans Access.

    Merci d'avance

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    634
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2011
    Messages : 634
    Points : 361
    Points
    361
    Par défaut
    Il y a plus simple
    SysCmd acSysCmdUpdateMeter avec quelques paramètres au choix

    exemple si tu parcours un recordset :
    SysCmd acSysCmdUpdateMeter, Int(TonRecordSet.PercentPosition)

  3. #3
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 222
    Points
    58 222
    Billets dans le blog
    11
    Par défaut
    Salut,

    Pour ma part, j'ai une petite appli (jointe) qui fonctionne bien...

    Il te suffit d'exécuter la fonction Function Test() pour voir le résultat.

    @+.
    Fichiers attachés Fichiers attachés

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Avril 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2012
    Messages : 43
    Points : 36
    Points
    36
    Par défaut
    Bonjour à vous !

    Merci beaucoup guys pour les réponses

    Pour Fclus:
    Corrige moi si je trompe, mais je suis en train de faire des insert, j'ai juste la requête INSERT et enseuite "docmd.runsql REQ_SQL", je n'ai pas de recordset

    Pour Zoom61:
    Ta solution me semble pertinente sauf que mon seul hic, c'est que tu as déterminé ton incrementation en mettant "NivTot = 13" alors que pour mon cas je cherche à connaître le nombre de lignes de mon fichier Excel pour que je puisse incrémenter la barre en fonction des nombre de lignes du fichier Excel

    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
        Dim app As Excel.Application
        Dim wkb As Excel.Workbook
        Dim wks As Excel.Worksheet
     Dim Nb_Lignes As Long
     Nb_Lignes = 0
        'initialisation des variables
        Set app = New Excel.Application
        Set wkb = app.Workbooks.Open(xlPath)
        Set wks = wkb.Worksheets(wsName)
        DoCmd.SetWarnings False
        With wks
            'arrêter l'importation lorsque l'on rencontre une case vide
            While .Range(pKeyCol & i).Value <> "" '(où pKeyCol représente la colonne et i la ligne)
                    DoCmd.RunSQL cSQL
     
                'End If
     
                'on incrémente la variable i pour passer à la ligne suivante
                i = i + 1
            Wend
     
        End With
     
        'on réactive les messages d'erreurs
        DoCmd.SetWarnings True
     
        'libération variables
        Set wks = Nothing
        Set wkb = Nothing
        Set app = Nothing
    Donc mon problème se résume pour l'instant à connaître le nombre de lignes du fichier Excel que je ne sais pas encore comment le faire !
    J'ai créé une boucle qui parcourt le fichier Excel tant que c'est différent de "" et il incrémente, sauf que ça bug !

    Auriez-vous une idée là-dessus ?

    Merci beaucoup et bonne journée

  5. #5
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 222
    Points
    58 222
    Billets dans le blog
    11
    Par défaut
    Citation Envoyé par mehdiyou1985 Voir le message
    Pour Zoom61:
    Ta solution me semble pertinente sauf que mon seul hic, c'est que tu as déterminé ton incrementation en mettant "NivTot = 13" alors que pour mon cas je cherche à connaître le nombre de lignes de mon fichier Excel pour que je puisse incrémenter la barre en fonction des nombre de lignes du fichier Excel
    Tu peux trouver le nombre de ligne du ton fichier, et modifier cette valeur par la valeur trouvée !

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Avril 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2012
    Messages : 43
    Points : 36
    Points
    36
    Par défaut
    Exactement !!

    C'est ce que je suis en train de chercher maintenant !!

    Je te remercie beaucoup cher ami !

    Bonne journée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Batch] Barre de progression lors d'un téléchargement
    Par Pyroman_Goliath dans le forum Scripts/Batch
    Réponses: 20
    Dernier message: 21/11/2013, 10h27
  2. Barre de progression lors d'un upload
    Par CherInfo dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 18/04/2011, 10h26
  3. Afficher une barre de progression lors d'un téléchargement
    Par khayyam90 dans le forum Contribuez
    Réponses: 0
    Dernier message: 28/12/2010, 19h29
  4. Réponses: 4
    Dernier message: 11/03/2010, 16h49
  5. [web] Barre de Progression ASCII
    Par Red Bull dans le forum Web
    Réponses: 13
    Dernier message: 05/06/2003, 12h56

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