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

Macros et VBA Excel Discussion :

Pb dialogue entre 2 sub [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2012
    Messages : 23
    Par défaut Pb dialogue entre 2 sub
    Bonjour,
    Voila mon problème concerne l'échange de données entre 2 sub (només "test" et "ouvertureFichier)

    Le principe de fonctionnement est le suivant:
    -Le sub "test" charge dans 2 variables Str des valeurs récupérées
    dans le sheet 1

    -il fait appel au sub "ouvertureFichier"


    -Le sub "ouvertureFichier" utilise les valeurs des variables Str
    , ouvre le fichier correspondant et copie les valeurs dans le sheet2

    -nous retournons dans le sub "test" étudions le sheet 2 puis fin du programme.





    les 2 sub sont déclarés en Public.


    Mon problème est qu'aucun échange ne s'effectue entre ces subs
    j'ai placé des espions sur chaque variable Str.

    Dans le sub "test" ces variable sont bien chargées

    Dans le sub "ouvertureFichier" celles ci sont détectées comme vides.

    auriez vous une idée de l'origine du problème?

    J'ajouterais mon code si besoin est mais son exécution est exactement celle décrite plus haut

    Je vous remercie pour tout l'aide que vous m'avez déja apporté pour en arriver là et pour avoir pris le temps de lire ce sujet !

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    salut,

    est-il possible de voir le code VBA utilisé stp ?

    Entre les erreurs de ByRef/ByVal, les espions placés aux mauvais endroits, on a vite fait de faire des erreurs
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    et pense à rajouter en haut de toutes tes pages de codes la ligne :
    qui te permettra de mettre en évidence des éventuelles erreurs de portées de tes variables..

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2012
    Messages : 23
    Par défaut
    @bbil merci pour le "option explicit" j'avais completement zappé cette magnifique alternative qui m'as sorti de toutes les ambiguités de dialogues entre sub


    Désolé pour le temps de réponse!
    Rendre le code un temps soit peu présentable prend pas mal de temps^^

    Et encore il est loin d'etre professionnel(cf commentaires faisant office de notes perso)

    @Jpcheck voici le code si jamais tu souhaite vérifier (mais le problème est résolu!)


    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
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    Option Explicit
     
    Dim TabLigne() As String, tabCol() As String, recup As String, PosteStr As String
     
    Dim cmpt1 As Long, cmpt2 As Long
     
    Dim lanceH As Boolean, lanceV As Boolean, lanceQ As Boolean
    Dim lanceLE As Boolean, lanceV1 As Boolean, lanceV2 As Boolean, lanceV3 As Boolean, lanceNT As Boolean
    Dim lanceAL As Boolean, lanceAM As Boolean, lanceAV As Boolean
    Dim lanceH1 As Boolean, lanceH2 As Boolean
     
     
    Dim DepasSeuilStr As String, Str_Boolean As String
    Dim codeCapteurStr As Variant
     
    Dim mesure As Long, seuilMinLng As Long, seuilMaxLng As Long
     
    Dim sheetStr As String, valDepasseStr As String, dateMesure As String
     
    Dim cmpt As Integer, ligneouvert As Integer, NumFichier As Integer
     
    Private Const chemin As String = "D:\Documents and Settings\ccruz\Bureau\stephane_stagiaire\DO\"
     
    Public Sub LireFichierTexte()
    'lecture d'un fichier .txt en vue d'une récupération des données
     
     
     
    NumFichier = FreeFile
    Open chemin & codeCapteurStr & "_" & dateMesure & ".txt" For Binary Access Read As #NumFichier
    recup = String(LOF(NumFichier), Chr(9))
    Get #NumFichier, , recup
    Close #NumFichier
    'stockage temporaire des mesures dans une feuille
     
    With Worksheets("feuil1").Range("A1")
    TabLigne = Split(recup, vbCrLf)
    'démarrage d'une boucle for  pour stocker des valeurs de ligne dans un tableau
    For cmpt1 = 0 To UBound(TabLigne)
    tabCol = Split(TabLigne(cmpt1), Chr(9))
    'démarrage d'une 2ieme boucle for pour stocker des valeurs de collone dans un tableau
    For cmpt2 = 0 To UBound(tabCol)
    'recopie des valeurs dans une feuille
     
        .Offset(cmpt1, cmpt2).Value = tabCol(cmpt2)
        Next cmpt2
        Next cmpt1
        End With
     
     
     
    End Sub
     
    Public Sub Seuils()
     
     
     
    dateMesure = Sheets("metrologieNCA").Cells(20, 4)
     
     
    For ligneouvert = 2 To 450
     
    codeCapteurStr = Sheets("status").Cells(ligneouvert, 2)
    'appel de la fonction d'ouverture fichier
    Call LireFichierTexte
     
     
     
     
    'mise à faux de tous les booléens
     
    lanceH = False
    lanceV = False
    lanceQ = False
    lanceLE = False
    lanceV1 = False
    lanceV2 = False
    lanceV3 = False
    lanceNT = False
     
     lanceAL = False
     lanceAM = False
     lanceAV = False
     lanceH1 = False
     lanceH2 = False
     
     
    'chargement de la cellule cmp,2 dans codeCapteurStr
    codeCapteurStr = Sheets("status").Cells(ligneouvert, 2)
    PosteStr = Sheets("status").Cells(ligneouvert, 1)
    If codeCapteurStr = "" Then Exit For
    If PosteStr = "" Then Exit For
     
     
    Str_Boolean = Right(codeCapteurStr, 2)
    'recherche du caractère et activation du bool en fonction
     
     
        If (Str_Boolean = "_H") Then
        lanceH = True
            Sheets("status").Cells(ligneouvert, 3) = Str_Boolean & "  " & lanceH
            End If
     
     
        If (Str_Boolean = "H1") Then
        lanceH1 = True
            Sheets("status").Cells(ligneouvert, 3) = Str_Boolean & "  " & lanceH1
            End If
     
        If (Str_Boolean = "H2") Then
        lanceH2 = True
            Sheets("status").Cells(ligneouvert, 3) = Str_Boolean & "  " & lanceH2
            End If
     
     
     
        If (Str_Boolean = "_V") Then
        lanceV = True
        Sheets("status").Cells(ligneouvert, 3) = Str_Boolean & "  " & lanceV
        End If
     
     
        If (Str_Boolean = "V1") Then
        lanceV1 = True
        Sheets("status").Cells(ligneouvert, 3) = Str_Boolean & "  " & lanceV1
        End If
     
     
        If (Str_Boolean = "V2") Then
        lanceV2 = True
        Sheets("status").Cells(ligneouvert, 3) = Str_Boolean & "  " & lanceV2
        End If
     
        If (Str_Boolean = "V3") Then
        lanceV3 = True
        Sheets("status").Cells(ligneouvert, 3) = Str_Boolean & "  " & lanceV3
        End If
     
     
        If (Str_Boolean = "le") Then
        lanceLE = True
        Sheets("status").Cells(ligneouvert, 3) = Str_Boolean & "  " & lanceLE
        End If
     
    If (Str_Boolean = "nt") Then
        lanceNT = True
        Sheets("status").Cells(ligneouvert, 3) = Str_Boolean & "  " & lanceNT
        End If
     
    If (Str_Boolean = "al") Then
        lanceAL = True
        Sheets("status").Cells(ligneouvert, 3) = Str_Boolean & "  " & lanceAL
        End If
     
    If (Str_Boolean = "am") Then
        lanceAM = True
        Sheets("status").Cells(ligneouvert, 3) = Str_Boolean & "  " & lanceAM
        End If
     
        If (Str_Boolean = "av") Then
        lanceAV = True
        Sheets("status").Cells(ligneouvert, 3) = Str_Boolean & "  " & lanceAV
        End If
     
     
     
    '_______________________________________________________________________________FIN  de la partie détection
    '________________________________________________________________________________
    '----------------------------------------------------------------------------------
     
    'test en cours :
    'On lance une boucle for avec cmpt pour selection de ligne
    'a chaque ligne on viens lire la collone indiquant le nom de PNIC
    'ce nom est chargé dans  sheetStr
    'nous lançons une commande d'appel de sheet correspondant à sheetStr
    'nous allons charger les valeurs min et max de la mesure demandé dans varMin varMax
    'on compare la valeur de la ligne .txt avec varMin et varMax
    'si la valeur dépasse les seuils fixés ont écrit un texte dans le sheet statut
    'dans la collone correspondante
     
    'IMPORTANT :
    'pour le vrai programme la valeur de la ligne en question sera récupéré dans un .txt
    'toutes les lignes de ce .txt seront étudiés via une boucle for déstinée à cela
     
     
     
     
    'si H détecté on charge les valeurs associées
    If lanceH = True Then
    seuilMinLng = Sheets(PosteStr).Cells(2, 3)
    seuilMaxLng = Sheets(PosteStr).Cells(2, 4)
    End If
     
    'si H1 détecté on charge les valeurs associées
    If lanceH1 = True Then
    seuilMinLng = Sheets(PosteStr).Cells(3, 3)
    seuilMaxLng = Sheets(PosteStr).Cells(3, 4)
    End If
     
     
     
    'si H2 détecté on charge les valeurs associées
    If lanceH2 = True Then
    seuilMinLng = Sheets(PosteStr).Cells(4, 3)
    seuilMaxLng = Sheets(PosteStr).Cells(4, 4)
    End If
     
     
    'si H amont détecté on charge les valeurs associées
    If lanceNT = True Then
    seuilMinLng = Sheets(PosteStr).Cells(5, 3)
    seuilMaxLng = Sheets(PosteStr).Cells(5, 4)
    End If
     
     
     
    'si H aval détecté on charge les valeurs associées
    If lanceAL = True Then
    seuilMinLng = Sheets(PosteStr).Cells(6, 3)
    seuilMaxLng = Sheets(PosteStr).Cells(6, 4)
    End If
     
     
     
    'si D centrale détecté on charge les valeurs associées
    If lanceLE = True Then
    seuilMinLng = Sheets(PosteStr).Cells(7, 3)
    seuilMaxLng = Sheets(PosteStr).Cells(7, 4)
    End If
     
    'si V détecté on charge les valeurs associées
    If lanceV = True Then
    seuilMinLng = Sheets(PosteStr).Cells(8, 3)
    seuilMaxLng = Sheets(PosteStr).Cells(8, 4)
    End If
     
     
    'si V1 détecté on charge les valeurs associées
    If lanceV1 = True Then
    seuilMinLng = Sheets(PosteStr).Cells(9, 3)
    seuilMaxLng = Sheets(PosteStr).Cells(9, 4)
    End If
     
     
    'si V2 détecté on charge les valeurs associées
    If lanceV2 = True Then
    seuilMinLng = Sheets(PosteStr).Cells(10, 3)
    seuilMaxLng = Sheets(PosteStr).Cells(10, 4)
    End If
     
     
    'si V3 détecté on charge les valeurs associées
    If lanceV3 = True Then
    seuilMinLng = Sheets(PosteStr).Cells(11, 3)
    seuilMaxLng = Sheets(PosteStr).Cells(11, 4)
    End If
     
     
     
     
     
    'résumé du 'fonctionnement ok
    '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     
     
     
    sheetStr = Sheets("status").Cells(ligneouvert, 1)
     
     
    cmpt = 2
    For cmpt = 2 To 451
     
     
     
    'stockage de la valeur relevée dans une variable
     
    mesure = Sheets("feuil1").Cells(cmpt, 2)
     
    'si la mesure est hors limite alors  un dépassement est inscrit et l'on sort de la boucle de test
     
    If mesure < seuilMinLng Or mesure > seuilMaxLng Then
     
    Sheets("status").Cells(ligneouvert, 11) = "Dépassement"
    Exit For
    'sinon nous continuons le test
     
    Else
    Sheets("status").Cells(ligneouvert, 11) = "OK"
     
     End If
     
     
     
     
     
    Next cmpt
     
     
    Next ligneouvert
     
     
    End Sub

    Pour ce qui est des espions je les avait correctement placé c'est cela qui m'as montré qu'un transfert de données ne se faisait pas (l'espion de valStr1 placé dans sub 2 me montrai une valeur qui n'était pas présent pour l'espions de valStr1 placé dans le sub 1

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

Discussions similaires

  1. dialogue entre fenetres
    Par funkadelic dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 30/01/2006, 13h55
  2. dialogue entre frames
    Par funkadelic dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 20/12/2005, 11h09
  3. Réponses: 72
    Dernier message: 05/12/2005, 10h45
  4. Dialogue entre systemes embarqués sur un réseau.
    Par zodd dans le forum Développement
    Réponses: 1
    Dernier message: 10/11/2005, 09h34
  5. [FLASH MX2004] [AS2] Dialogue entre 2 SWF- tellTarget ???
    Par Geilgestorm dans le forum ActionScript 1 & ActionScript 2
    Réponses: 11
    Dernier message: 24/10/2004, 22h07

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