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 :

Test sur une variable tableau évoluée


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 15
    Par défaut Test sur une variable tableau évoluée
    Bonjour,

    mon problème: j'abuse du laxisme de vba. je m'explique dans le cadre d'un programme de "copier/coller retravaillés de données entre classeurs", je selectionne des lignes de feuille dans une variable (var1(i)).

    Plus loin dans le programe, je veux tester la premiere cellule de la ligne enregistrée en variable... ca marche très bien sauf si la variable est vide.

    Donc je voudrais tester si la variable est vide ou non.

    Voila ce que j'ai fais mais qui ne marche pas:

    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
    Private Sub CommandButton1_Click()
    Dim var1() 'je ne connais pas le type
    Dim i As Integer
     
    'on dimensionne le tableau à 4
    ReDim var1(4)
     
    'les trois premieres cases du tableau prenne en valeur le contenu de la ligne
    For i = 1 To 3
        var1(i) = Sheets(1).Rows(i)
        ' j'affiche le contenu de la premiere cellule de la ligne
        MsgBox var1(i)(1, 1)
    Next i
     
    ' j'essaye de tester les cases vides du tableau
    If var1(4)(1, 1) Is Empty Then MsgBox "toto" 'probleme erreur d'execution 424 ; objet requis
    End Sub


    Quelqu'un aurait une idée sur l'origine du problème?


    Ps: je sais que normalement je n'ai pas a tester ce genre de chose car je devrais savoir ou commence et s'arrete mes boucles mais il y en a plein d'imbriquées et j'ai de petits problemes d'effets de bord.


    merci

  2. #2
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 192
    Par défaut
    Hmmm je ne connais pas cette syntaxe. T'as essayé de caler un bon vieux .value?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If var1(4)(1, 1).Value = "" Then
    MsgBox "toto"

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 572
    Par défaut
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If var1(4)(1, 1) Is Empty then

    essaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if is empty var1(4)(1,1) then

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Je te conseille de lire cet article de Silkyroad : http://silkyroad.developpez.com/vba/tableaux/

    Tu verras que ta syntaxe comme celle-là : est fausse.

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 572
    Par défaut
    désolé de te contredire starec mais j'ai déja utilisé cette forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tab_identifiant(i) = tableau_import(i)(1, dernierecolonne) ' je cale, je sais pas pourquoi c'est pas tableau_import(i)(dernierecolonne)
    j'avais écris ça a l'éposque parce que je comprenais pas vraiment le pourquoi, d'ailleurs c'est encore un peu vrai

  6. #6
    Invité
    Invité(e)
    Par défaut
    C'est possible, mais je ne l'ai jamais vu, ni utilisé. De plus je ne trouve pas cela logique.

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 572
    Par défaut
    j'avais creusé a l'époque, j'arrivais pas a trouver la deuxieme dimension du tableau

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Alors voilà
    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
    Sub Tableauxdetableaux()
    Dim Montab, Tablo1, Tablo2(3, 3)
        Tablo1 = Array(0, 1, 2, 3)
        Tablo2(0, 0) = "un"
        Tablo2(0, 1) = "deux"
        Tablo2(0, 2) = "trois"
        Tablo2(0, 3) = "quatre"
        Tablo2(1, 0) = "cinq"
        Tablo2(1, 1) = "six"
        Tablo2(1, 2) = "sept"
        Tablo2(1, 3) = "huit"
        'etc... (3, 3) = "seize"
        Tablo3 = Array(Tablo1, Tablo2)
        MsgBox Tablo3(1)(1, 2)
    End Sub
    Si, dans ces conditions, c'est possible
    A+

  9. #9
    Membre Expert
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 572
    Par défaut
    mais revenons au probleme
    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
     
    Private Sub CommandButton1_Click()
    Dim var1() 'je ne connais pas le type
    Dim i As Integer
     
    'on dimensionne le tableau à 4
    ReDim var1(4)
     
    'les trois premieres cases du tableau prenne en valeur le contenu de la ligne
    For i = 1 To 4
    var1(i) = Sheets(1).Rows(i)
    ' j'affiche le contenu de la premiere cellule de la ligne
    MsgBox var1(i)(1, 1)
    Next i
     
    ' j'essaye de tester les cases vides du tableau
    If IsEmpty(var1(4)(1, 1)) Then MsgBox "toto" 'probleme erreur d'execution 424 ; objet requis
    End Sub
    avec ce code ça marche, mais tu dois remplir le 4 parce que vide et pas remplie c'est pas pareil

  10. #10
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    SAlut
    Et tout simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If var1(4)(1, 1) = "" Then
    J'ai fait le teste ca semble fonctionner tres bien

    Pour la syntaxe, je l'avait deja vu mais ne l'avais pas comprise, mais en faite en vu des infos fournies, si, elle est correct et logique, Var1 contenant un objet range qui se caracterise par un tableau (Row,Col)

    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  11. #11
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Si quelqu'un a un lien ou une doc sur cette syntaxe, cela m'intéresse.
    Le lien que j'ai donné était une information générale sur les tableaux, car je croyais que la syntaxe était erronée.

    Merci pour ceux qui me donneront des informations complémentaires.

  12. #12
    Membre Expert
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 572
    Par défaut
    moi, je peux pas t'en dire plus, je l'utilise exactement comme p12345 pour prendre des ranges en tableau et en ressortir la cellule qui m'interresse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for i = 1 to 2
    tab(i) = Sheets(1).Rows(i)
    next i
    et tu ressort disons c1 par
    msgbox tab(1)(1,3)

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 15
    Par défaut
    Bonjour à tous et merci d’avoir passé du temps sur mon « petit » problème ,

    Qwazerty :de mon coté ce ne marche pas. Peut être t’es tu basé sur le code de alsimbad qui a modifié la borne supérieure de la boucle

    D’ailleurs alsimbad, je confirme : si on prend 4, il n’y a plus de problème.

    Sash6 : désolé mais ca ne marche pas.


    De mon coté j’ai creusé aussi. Je pense que le principal problème vient du fait que j’utilise des variants : c’est l’effet boomerang.

    Tant que je n’ai pas affecté une « valeur » a ma case de tableau (ici var1(4)), il ne la type pas !
    Le niveau 1 (la ligne) est un variant (ex : var1(i) est un variant/variant (1 to 1, 1 to 256)
    Le niveau 2 (la cellule) est aussi un variant (ex :var1(i)(1) est variant(1 to 256))
    Le niveau 3 est lui dépendant du contenu de la cellule (ex :var1(i)(1,1) peut être un variant/string)

    Donc si je test au niveau 3 alors que pour la quatrième case du tableau je ne suis qu’au niveau 1, il ne reconnaît pas le type.

    D’ou la solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If IsEmpty(var1(4)) Then MsgBox "tito"

  14. #14
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    C'est normal, si ton niveau 4 n'est pas renseigné, tu n'as pas de tableau à l'intérieur, et tu ne peux donc pas lui demander de lire un élément d'un tableau qui n'existe pas.
    Désolé d'arriver si tard mais j'étais resté sur l'affirmation que ta syntaxe était fausse. Et comme alsimbad avait donné une solution qui me paraissait bien...
    Si ton pb est résolu, alors un petit clic sur soldera la discussion

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

Discussions similaires

  1. [XL-2003] Erreur sur une variable tableau
    Par hobine dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/03/2011, 17h52
  2. Test sur une variable dans la session
    Par midou159 dans le forum Struts 2
    Réponses: 3
    Dernier message: 17/01/2011, 22h26
  3. [Tableaux] Problème de test sur une variable
    Par Laurent64 dans le forum Langage
    Réponses: 7
    Dernier message: 20/05/2007, 15h04
  4. faire un test sur une variable
    Par donny dans le forum Langage
    Réponses: 3
    Dernier message: 04/12/2006, 16h55

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