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 :

Question sur l'utilisation de Tableau en VBA


Sujet :

VBA

  1. #1
    Membre à l'essai
    Homme Profil pro
    automatitien
    Inscrit en
    Novembre 2015
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : automatitien
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Novembre 2015
    Messages : 45
    Points : 23
    Points
    23
    Par défaut Question sur l'utilisation de Tableau en VBA
    Bonjour,

    pour accélérer l'éxécution de mes programmes, j'utilise des tableau sous VBA dans un programme qui appel ensuite mes sous programmes.

    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
    Option Explicit
     
    Public TableauTag()
    Public TableauUDT()
    Public TableauCSV()
    Public TableauProcess()
    Public DBi
    Public itab As Integer
    Public Num_iD As Long
    Public iTabUDT As Long
     
    Sub Main_Récup_SymbolicTagcsv()
     
    Call Ouverture_CSV
    Call Récupération_Adresse_Tags
    Call Liste_Process
    Call Structure_UDT_Siemens
    Call Structure_CSV_KEP
    Call Generer_vers_KEP
    dans chaques sous programme j'utilise la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     'Définit la taille du tableau
                             ReDim Preserve TableauTag(1 To 6, 1 To itab)
    pour dimensionner mon tableau à la bonne taille.

    ça fonctionne jusque ici, je structure mes données dans un tableau pour ensuite les transférer dans le tableau suivant et passer l'étape.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     ...TableauCSV(9, itabComplet_CSV) = "null"                     'Index (Lecture)
                TableauCSV(16, itabComplet_CSV) = "'False'"                                                             'Tag Stilisateur(Notification)
                'TableauCSV(17, itabComplet_CSV) = temporaire                                                        'Adresse (Notification)
                TableauCSV(18, itabComplet_CSV) = "null"                                                             'Index (Notification)
                TableauCSV(19, itabComplet_CSV) = TableauUDT(9, iBoucle_UDT + iDecompte)                             'Condition
                TableauCSV(20, itabComplet_CSV) = TableauUDT(10, iBoucle_UDT + iDecompte)                             'Valeur de déclenchement
    ...
    Voilà globalement ce que contient le programme actuel, il peut probablement être amélioré, mais il est fonctionnel et me donne le résultat voulu.

    J'ai besoin aujourd'hui d'ajouter une étape intermédiaire et pour cela un nouveau sous programme.
    j'ai donc écrit le programme ci-contre qui n'est pas fini mais qui étapes par étapes me permet de tester l'intégration.

    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
    Option Explicit
     
    Sub Liste_Process()
     
    Dim iboucleListe
     
    'On boucle sur le tableauTag
    For iboucleListe = 1 To 1001
     
    'On vérifie de ne pas être au bout de la liste
    If TableauTag(1, iboucleListe - 1) = "Vide" Then
     
    Exit For
     
    Else
    'Sinon, on compléte les colonnes
     
            'Définit la taille du tableau
                ReDim Preserve TableauProcess(1)
     
                             TableauProcess(iboucleListe) = TableauTag(5, iboucleListe)
     
    End If
    Next
    End Sub
    Seulement lorsque ce code s'éxécute, je suis incapable de lire le contenue du tableau précédent "TableauTag ()"....
    le tableau est bien lisible dans la "Fenêtre Variable local" avant d'entrer dans ce sous programme mais plus du tout une fois que je suis dedans.
    je pense procéder de la même façon que pour mes codes précédents du coup je sèche un peux.....

    n'hésitez pas à m'apporter vos lumières!
    Merci d'avance!

    Valery

  2. #2
    Membre à l'essai
    Homme Profil pro
    automatitien
    Inscrit en
    Novembre 2015
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : automatitien
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Novembre 2015
    Messages : 45
    Points : 23
    Points
    23
    Par défaut
    quelqu'un aurait-il une piste de réflexion pour moi?
    - coup de pied au cul pour faute grave
    - conseille de vie sage
    - ....

    je peux envoyer mon code si vous voulez en voir plus.

    merci d'avance pour vos retour

    Edit : Erreur de débutant,
    - je récupére les données sur la feuille sélectionnée
    - Il est normal que les tableau ne soit pas lisibles pendant certaine périodes de la scrutation du programme.

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 115
    Points : 1 638
    Points
    1 638
    Par défaut
    Mon dieu, que de variables globales qui n'ont pas lieux d'être ....
    Citation Envoyé par valery.petit Voir le message
    - coup de pied au cul pour faute grave
    Ce serait trop gentil.

    Citation Envoyé par valery.petit Voir le message
    Erreur de débutant,
    Non, erreur de paresseux !!!!
    Et c'est une habitude qu'il va te falloir perdre, le plus tôt sera le mieux.

    Par pitié, utilises des paramètres, tu auras un meilleur contrôle sur ce qui se passe.
    Exemple:
    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
    Option Explicit
     
    Public Sub Test()
        Dim Tableau(10) As Integer
        Remplir Tableau
        Affiche Tableau
    End Sub
     
    Private Sub Remplir(ByRef Tableau() As Integer)
        Dim i As Integer
        For i = LBound(Tableau) To UBound(Tableau)
            Tableau(i) = i
        Next
    End Sub
     
    Private Sub Affiche(ByRef Tableau() As Integer)
        Dim i As Integer
        For i = LBound(Tableau) To UBound(Tableau)
            Debug.Print Tableau(i)
        Next
    End Sub
    Les variables globales posent d'énormes problèmes, risques de collisions, de masquage, absence de contrôle d'accès, source d'erreurs particulièrement difficile à corriger ect ....
    Fuie les comme la peste.

    Et si tu as peur de voir les paramètres se multiplier, fait des structures.
    Exemple:
    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
    Option Explicit
     
    Type MaStructure
        Tableau(10) As Integer
        Nom As String
    End Type
     
    Public Sub test()
        Dim Data As MaStructure
        Remplir Data
        Affiche Data
    End Sub
     
    Private Sub Remplir(ByRef Data As MaStructure)
        Dim i As Integer
        For i = LBound(Data.Tableau) To UBound(Data.Tableau)
            Data.Tableau(i) = i
        Next
        Data.Nom = "pifometre"
    End Sub
     
    Private Sub Affiche(ByRef Data As MaStructure)
        Dim i As Integer
        For i = LBound(Data.Tableau) To UBound(Data.Tableau)
            Debug.Print Data.Tableau(i)
        Next
        Debug.Print Data.Nom
    End Sub
    Autre points:
    Tes tableaux ne sont pas typés.

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

Discussions similaires

  1. [XL-2010] Question sur l'utilisation de WIA (gestion de ficher image) dans un forrm VBA
    Par ZX12R dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/10/2017, 12h10
  2. Question sur l'utilisation de wget
    Par berry dans le forum Réseau
    Réponses: 7
    Dernier message: 24/05/2007, 22h46
  3. question sur l'utilisation d'une listBox
    Par Mickey.jet dans le forum Delphi
    Réponses: 3
    Dernier message: 02/06/2006, 17h57
  4. Question sur l'utilisation du mot réservé static
    Par flash2590 dans le forum Langage
    Réponses: 4
    Dernier message: 10/04/2006, 00h20
  5. [Framework] Questions sur l'utilisation de spring
    Par mlequim dans le forum Spring
    Réponses: 10
    Dernier message: 01/02/2006, 15h27

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