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 :

Initialisation de variable array


Sujet :

Macros et VBA Excel

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 7
    Par défaut Initialisation de variable array
    Bonjour à tous,

    Je suis tombé sur une situation que je ne comprends pas du tout, ça ne me semble pas logique mais j'imagine que quelque chose m'échappe.. Est ce que vous auriez une explication ?

    Désolé si je ne suis pas clair, j'essaye de faire au mieux mais je ne suis pas sur du tout de réussir Pour expliquer la situation :



    J'ai besoin d'initialiser et remplir deux tableaux en fonction de la condition suivante : Est ce que les cellules d'où l'on tire les valeurs sont en gras ou non ?

    Si oui (les cellules en gras), on envoie ces valeurs de cellules dans un 1er tableau (TCharge)
    Si non (les cellules pas en gras), on envoie ces valeurs de cellules dans un 2e tableau (Charge)

    Et ce ne sont pas toujours les mêmes cellules qui sont en gras, donc ça change à chaque fois. Donc parfois l'un de mes tableaux est vide.

    Le problème : Parfois le remplissage/vidage ne se fait pas au moment attendu et vraiment je ne comprend pas.

    J'ai mis en vert dans l'image le cas où ce n'est pas logique.

    Dans la 3e ligne de mon image, certaines cellules n'étaient pas en gras, et si j'active ma macro sans rien changer, c'est tout bon : Le 2e tableau est plein car rempli par les cellules pas en gras comme prévu, c'est OK

    Mais si après je met les valeurs en gras et que j'active ma macro, alors mon test me dit que mon 2e tableau est toujours plein alors que je n'ai plus aucune cellule qui n'est pas gras. Et là je ne comprend pas du tout !

    Surtout que si directement après je ré-active ma macro (alors que j'ai laissé en gras sans rien rechanger), cette fois mes tests considèrent bien que le 2e tableau est vide.

    Nom : comprendre2.png
Affichages : 130
Taille : 37,7 Ko

    Voici le code correspondant : (P.S : je ne maitrise pas le test, c'est du copier coller pour le "On error resume Next")

    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
     
    Dim TCharge() As Variant
    Dim Charge() As Variant
     
    Sub initialisation()
     
     
    '--------Le test---------
    On Error Resume Next
    'VarTab va prendre la valeur Empty si le tableau est vide.
    VarTab = UBound(Charge)
    On Error GoTo 0
     
    If IsEmpty(VarTab) = True Then
        MsgBox ("1:vide" & TypeName(VarTab) & TypeName(Charge))
    Else
        MsgBox ("1:plein" & TypeName(VarTab) & TypeName(Charge))
    End If
     
     
    '--------Tente de remettre à zero les tables---------
     
    Erase Charge, TCharge
     
     
     
    '--------Le même test pour voir le résultat---------
    On Error Resume Next
    'VarTab va prendre la valeur Empty si le tableau est vide.
    VarTab = UBound(Charge)
    On Error GoTo 0
     
    If IsEmpty(VarTab) = True Then
        MsgBox ("1:vide" & TypeName(VarTab) & TypeName(Charge))
    Else
        MsgBox ("1:plein" & TypeName(VarTab) & TypeName(Charge))
    End If
     
     
    '--------La fonction qui sert à répartir entre le tableau TCharge et Charge si c'est en gras ou non ---------
    i = 0
    a = 0
    For Each objet In Range("TCharge")
        If objet.Font.Bold = True Then
            i = i + 1
            ReDim Preserve TCharge(i)
            TCharge(i) = objet
        Else
            MsgBox ("la condition s'est activée")     'Pour tester 
            a = a + 1
            ReDim Preserve Charge(a)
            Charge(a) = objet
        End If
    Next
     
     
    '--------Le même test pour voir le résultat final---------
    On Error Resume Next
    'VarTab va prendre la valeur Empty si le tableau est vide.
    VarTab = UBound(Charge)
    On Error GoTo 0
     
    If IsEmpty(VarTab) = True Then
        MsgBox ("1:vide" & TypeName(VarTab) & TypeName(Charge))
    Else
        MsgBox ("1:plein" & TypeName(VarTab) & TypeName(Charge))
    End If
    Je me dis que c'est dû à ce que "devienne" les variables après l'execution de la macro (je ne sais pas du tout ce qui se passe). Elles sont enregistrées ? Perdues ? Réinitalisées ?

    Si quelqu'un peut m'éclairer, merci beaucoup d'avance parce que je sens que je rate un principe important là.. Merci !
    Images attachées Images attachées  

Discussions similaires

  1. Filtrer une requete avec une variable array
    Par hugo69 dans le forum Requêtes
    Réponses: 7
    Dernier message: 04/11/2005, 14h33
  2. Réponses: 11
    Dernier message: 07/04/2005, 10h20
  3. [VB.NET] Initialiser les variables
    Par Dnx dans le forum ASP.NET
    Réponses: 8
    Dernier message: 06/04/2005, 16h22
  4. [VB6]Initialiser une variable Static dans un évenement
    Par loverdose dans le forum VB 6 et antérieur
    Réponses: 16
    Dernier message: 20/01/2005, 14h57
  5. Réponses: 9
    Dernier message: 29/06/2004, 08h40

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