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 Discussion :

traitements séquentiels un peu de méthode requise


Sujet :

VBA

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 48
    Points : 30
    Points
    30
    Par défaut traitements séquentiels un peu de méthode requise
    Dans le code suivant je cherche à récupérer une valeur dans la listbox (qui s'appelle lboCycle).
    Je récupère bien cela dans la sub lboCycle_Click.
    Ensuite je veux rentrer dans la clause where d'une rêquête sql cette valeur (RCCycleName = cycle)
    Pour récupérer et afficher dans le spredsheet le résultat de la requête.
    Je pense que je me suis un peu mélangé les pinceaux car j'ai "0" dans la valeur de cycle
    Il faudrait que j'éxécute d'abord la sélection sur la listbox et ensuite seulement que je charge mon spreadsheet.
    Je sais que les courageux qui vont se pencher sur mon code vont pleurer mais bon je cours le risque des remarques désobligeantes mais néanmoins constructives.

    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
    Option Compare Database
    Option Explicit
     
    Private Sub Form_Open(Cancel As Integer)
       lblOpenArgs.Caption = ""
       ' ======================================================================================
         ' Description   : Cette routine va permettre de préparer la feuille pour qu'elle
        '                 ressemble à une grille d'un sous-formulaire en mode feuille de donnée
        '=======================================================================================
     
        ' ===== déclaration =====
     
        Dim Spreadsheet6 As OWC11.Spreadsheet
        Dim db As DAO.Database
        Dim rst As DAO.Recordset
        Dim strSql As String
        Dim intIRow As Long
        Dim intICol As Long
        Dim lDernLig, lDernCol As Long
     
     
        Dim CleBDiv, CleStep, CleSite, CleAsset As String
     
     
        ' ===== affectation =====
        intIRow = 0
        intICol = 0
     
        Set Spreadsheet6 = Me.Spreadsheet6.Object
     
        ' ==== décomposition de l'argument transmis pour former la clé ====
        CleBDiv = Split(Me.Parent.FormArgs, ";")(0)
        CleStep = Split(Me.Parent.FormArgs, ";")(1)
        CleSite = Split(Me.Parent.FormArgs, ";")(2)
        CleAsset = Split(Me.Parent.FormArgs, ";")(3)
     
       ' MsgBox (CleBDiv & CleStep & CleSite & CleAsset)
       MsgBox cycle
     
     
        'strSql = " SELECT * FROM tbl_ReferenceCapacity WHERE RCBD = '" & CleBDiv & "' AND RCStep = '" & CleStep & "'AND RCSite = '" & CleSite & "' AND RCAsset = '" & CleAsset & "' ;"
     strSql = " SELECT * FROM tbl_ReferenceCapacity WHERE RCBD = '" & CleBDiv & "' AND RCStep = '" & CleStep & "'AND RCSite = '" & CleSite & "' AND RCAsset = '" & CleAsset & "'AND RCCycleName = '" & cycle & "' ;"
     
        Set rst = CurrentDb.OpenRecordset(strSql)
     
     
        ' ===== préparation de l'aspect =====
        With Spreadsheet6
            .DisplayToolbar = True                      ' on désactive/active la barre d'outils
            With .Windows(1)
                .DisplayHorizontalScrollBar = True      ' on désactive/active la barre de défilement horizontale
                .DisplayWorkbookTabs = True             ' on désactive/active la visualisation des onglets
                .DisplayColumnHeadings = True           ' on désactive/active les entêtes de colonnes
                .DisplayRowHeadings = True              ' on désactive/active les entêtes de lignes
            End With
            lDernLig = .Cells(.Cells.Rows.Count, 1).End(xlUp).Row
            lDernCol = .Cells(lDernLig, 1).End(xlToRight).Column
     
     
     
       ' ===== on vide la feuille =====
     
        .ActiveSheet.Cells(1, 1).Select
        .ActiveSheet.UsedRange.Clear
     
        ' ===== on fige les volets pour avoir l'entête fixe =====
        .Range("A1").Select
        .Windows(1).FreezePanes = True
     
        End With
     
        ' ===== on remplit maintenant la feuille =====
       With Spreadsheet6
     
                For intICol = 1 To rst.Fields.Count - 1
                    ' on alimente la première ligne avec le nom des champs
                    .Cells(1, intICol).Value = rst.Fields(intICol).Name
                    ' mise en forme de la couleur de l'entête
                    .Cells(1, intICol).Interior.Color = RGB(220, 200, 250)
                    .Cells(1, intICol).Borders.LineStyle = xlContinuous
                Next intICol
     
     
           intIRow = 1
        While Not rst.EOF
     
            intIRow = intIRow + 1
            For intICol = 1 To rst.Fields.Count - 1
     
                    .Cells(intIRow, intICol).Value = rst.Fields(intICol).Value
                    .Cells(intIRow, intICol).Borders.LineStyle = xlContinuous
            Next intICol
            rst.MoveNext
        Wend
     
        ' ===== formatage de la feuille =====
       With .Range(.Cells(1, 1), .Cells(lDernLig, lDernCol))
            .Columns.AutoFit
            .Borders.LineStyle = xlContinuous
       End With
     
       End With
     
     
     
     
     
        ' ===== libération =====
        rst.Close
        Set rst = Nothing
        Set Spreadsheet6 = Nothing
     
     
     
    End Sub
     
     
    Public Sub RefreshInfo()
     
     
     On Error Resume Next
       lblOpenArgs.Caption = "Info pulled from switchboard-node: " & vbCrLf & Me.Parent.FormArgs
     
     
       End Sub
     
     
    Public Sub lboCycle_Click()
    Dim cycle As String
    If lboCycle.ListIndex = -1 Then Exit Sub
     cycle = lboCycle.Column(1, lboCycle.ListIndex)
     MsgBox cycle
    End Sub

  2. #2
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Bonjour,

    Tu déclares ta variable cycle dans la sub lboCycle_Click().
    Sa portée est donc limitée à cette sub et ne sera pas reconnue dans une autre sub.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 48
    Points : 30
    Points
    30
    Par défaut
    Ok, mais si je la déclare avec mes autres variables en entrée du code, elle n'est pas visible dans la sub lboCycle_Click
    où et comment je dois la déclarer ?
    Merci

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 48
    Points : 30
    Points
    30
    Par défaut
    J'ai essayé de déclarer cette variable juste sous Option Explicit mais le résultat n'est pas mieux ma form ne s'affiche même plus.

  5. #5
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Tu as déclaré comment ta variable ?

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 48
    Points : 30
    Points
    30
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Option Compare Database
    Option Explicit
    Dim cycle as string

    et dans ce cas ma form ne s'ouvre même plus, mais sans message d'erreur

  7. #7
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Re,

    Je déclarerai la variable comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public cycle as string

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 48
    Points : 30
    Points
    30
    Par défaut
    Merci,
    J'ai testé comme indiqué mais là encore la feuille reste blanche rien ne s'affiche.
    Je remets ici le code tel qu'il est maintenant.
    Je réexplique ce que je souhaite.
    J'ai une forme en deux parties, sur la partie de gauche j'affiche un treeview et sur la partie de droite j'affiche un spreadshhet rempli avec des informations détaillées correspondant au dernier noeud enfant du tree view.
    Ce que je souhaite c'est établir une sorte de filtre avant d'afficher le spreadsheet.
    En effet les informations à afficher correspondent à des cycles, j'ai donc une ligne dans mon spreadsheet par cycle.
    Je souhaite donc avant d'afficher les informations pouvoir sélectionner à partir d'une listbox, le cycle qui me convient. La valeur ainsi receuillie rentre ensuite dans la clause where d'une requête sql qui ramène les informations filtrées.
    Pas de souci pour alimenter la listbox et receuillir la valeur.
    Le problème est dans l'ordre des choses
    je veux d'abord aller sur la listbox et ensuite exécuter la requête pour pouvoir enfin afficher les infos dans le spreadsheet.

    Evidemment je peux toujours m'en tirer en filtrant dans le spreadsheet mais ce n'est pas mon choix.

    voici le code actuel qui ne marche pas
    on notera la déclaration de la variable cycle en public
    le setfocus sur la listbox
    la composition de la requête
    et la Public Sub lboCycle_click()

    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
    143
    144
    145
    146
    147
    Option Compare Database
    Option Explicit
    Public cycle As String
     
     
     
     
    Private Sub Form_Open(Cancel As Integer)
       lblOpenArgs.Caption = ""
       ' ======================================================================================
         ' Description   : Cette routine va permettre de préparer la feuille pour qu'elle
        '                 ressemble à une grille d'un sous-formulaire en mode feuille de donnée
        '=======================================================================================
     
        ' ===== déclaration =====
     
        Dim Spreadsheet6 As OWC11.Spreadsheet
        Dim db As DAO.Database
        Dim rst As DAO.Recordset
        Dim strSql As String
        ' Dim cycle As String
        Dim intIRow As Long
        Dim intICol As Long
        Dim lDernLig, lDernCol As Long
     
     
        Dim CleBDiv, CleStep, CleSite, CleAsset As String
     
        ' setfocus sur la listbox
     
        lboCycle.SetFocus
     
     
     
     
     
     
        ' ===== affectation =====
        intIRow = 0
        intICol = 0
     
        Set Spreadsheet6 = Me.Spreadsheet6.Object
     
        ' ==== décomposition de l'argument transmis pour former la clé ====
        CleBDiv = Split(Me.Parent.FormArgs, ";")(0)
        CleStep = Split(Me.Parent.FormArgs, ";")(1)
        CleSite = Split(Me.Parent.FormArgs, ";")(2)
        CleAsset = Split(Me.Parent.FormArgs, ";")(3)
     
       ' MsgBox (CleBDiv & CleStep & CleSite & CleAsset)
       MsgBox cycle
     
     
     
        'strSql = " SELECT * FROM tbl_ReferenceCapacity WHERE RCBD = '" & CleBDiv & "' AND RCStep = '" & CleStep & "'AND RCSite = '" & CleSite & "' AND RCAsset = '" & CleAsset & "' ;"
     strSql = " SELECT * FROM tbl_ReferenceCapacity WHERE RCBD = '" & CleBDiv & "' AND RCStep = '" & CleStep & "'AND RCSite = '" & CleSite & "' AND RCAsset = '" & CleAsset & "'AND RCCycleName = '" & cycle & "' ;"
     
        Set rst = CurrentDb.OpenRecordset(strSql)
     
     
        ' ===== préparation de l'aspect =====
        With Spreadsheet6
            .DisplayToolbar = True                      ' on désactive/active la barre d'outils
            With .Windows(1)
                .DisplayHorizontalScrollBar = True      ' on désactive/active la barre de défilement horizontale
                .DisplayWorkbookTabs = True             ' on désactive/active la visualisation des onglets
                .DisplayColumnHeadings = True           ' on désactive/active les entêtes de colonnes
                .DisplayRowHeadings = True              ' on désactive/active les entêtes de lignes
            End With
            lDernLig = .Cells(.Cells.Rows.Count, 1).End(xlUp).Row
            lDernCol = .Cells(lDernLig, 1).End(xlToRight).Column
     
     
     
       ' ===== on vide la feuille =====
     
        .ActiveSheet.Cells(1, 1).Select
        .ActiveSheet.UsedRange.Clear
     
        ' ===== on fige les volets pour avoir l'entête fixe =====
        .Range("A1").Select
        .Windows(1).FreezePanes = True
     
        End With
     
        ' ===== on remplit maintenant la feuille =====
       With Spreadsheet6
     
                For intICol = 1 To rst.Fields.Count - 1
                    ' on alimente la première ligne avec le nom des champs
                    .Cells(1, intICol).Value = rst.Fields(intICol).Name
                    ' mise en forme de la couleur de l'entête
                    .Cells(1, intICol).Interior.Color = RGB(220, 200, 250)
                    .Cells(1, intICol).Borders.LineStyle = xlContinuous
                Next intICol
     
     
           intIRow = 1
        While Not rst.EOF
     
            intIRow = intIRow + 1
            For intICol = 1 To rst.Fields.Count - 1
     
                    .Cells(intIRow, intICol).Value = rst.Fields(intICol).Value
                    .Cells(intIRow, intICol).Borders.LineStyle = xlContinuous
            Next intICol
            rst.MoveNext
        Wend
     
        ' ===== formatage de la feuille =====
       With .Range(.Cells(1, 1), .Cells(lDernLig, lDernCol))
            .Columns.AutoFit
            .Borders.LineStyle = xlContinuous
       End With
     
       End With
     
     
     
     
     
        ' ===== libération =====
        rst.Close
        Set rst = Nothing
        Set Spreadsheet6 = Nothing
     
     
     
    End Sub
     
     
    Public Sub RefreshInfo()
     
     
     On Error Resume Next
       lblOpenArgs.Caption = "Info pulled from switchboard-node: " & vbCrLf & Me.Parent.FormArgs
     
     
       End Sub
     
     
    Public Sub lboCycle_Click()
        Dim cycle As String
        If lboCycle.ListIndex = -1 Then Exit Sub
        cycle = lboCycle.Column(1, lboCycle.ListIndex)
        MsgBox cycle
    End Sub

Discussions similaires

  1. [XL-2010] Un peu de méthode
    Par guigol dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/07/2014, 19h27
  2. Traitement séquentiel algorithme (avec pas en ms)
    Par coco673 dans le forum EDT/SwingWorker
    Réponses: 4
    Dernier message: 12/01/2013, 19h33
  3. Traitement séquentiel des mails
    Par Thierry_94 dans le forum VBA Outlook
    Réponses: 1
    Dernier message: 26/11/2008, 11h07
  4. A quoi sert le traitement générique à la fin des méthodes
    Par Lucas Panny dans le forum W4 Express
    Réponses: 7
    Dernier message: 26/07/2007, 09h57
  5. [Méthode] Non traitement de données
    Par GLDavid dans le forum Langage
    Réponses: 11
    Dernier message: 11/08/2006, 17h27

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