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 :

tableau a 2 dimensions [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 239
    Points : 95
    Points
    95
    Par défaut tableau a 2 dimensions
    Bonjour,

    je voudrais créer un tableau à deux dimensions. Le problème est que la taille du tableau n'est pas fixe. C'est facile me direz vous, il suffit de faire un tableau dynamique.

    le problème c'est que voilà, j'ai des données qui change en fonction d'un bouton option:
    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
    If (OptionButton_lot.Value = True) Then
            montant_ht = "lot 1 : " + TextBox_ht + "€"
        ElseIf (OptionButton_bon_commande.Value = True) Then
            montant_ht = "min : " + TextBox_ht + "€"
        Else
            montant_ht = TextBox_ht
        End If
    ------------------------------------------------
     
    If (OptionButton_lot.Value = True) Then
            montant_ht_max = "lot 2 : " + TextBox_ht_max + "€"
        ElseIf (OptionButton_bon_commande.Value = True) Then
            montant_ht_max = "max : " + TextBox_ht_max + "€"
        End If
     
    -----------------------------------------------------
     
    montant_lot_3 = "lot 3 : " + TextBox_lot_3 + "€"
     
    ------------------------------------------------------
     
    montant_lot_4 = "lot 4 : " + TextBox_lot_4 + "€"
    Normalement que j'ai 1, 2, 3 ou 4 montant je devrais afficher les 4(ou les 2, ou les 3 selon les cas les une en dessous des autres avec ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    montant = IIf(montant_ht <> vbNullString, montant_ht & Chr(10), vbNullString) & _
          IIf(montant_ht_max <> vbNullString, montant_ht_max & Chr(10), vbNullString) & _
          IIf(montant_lot_3 <> vbNullString, montant_lot_3 & Chr(10), vbNullString) & _
          IIf(montant_lot_4 <> vbNullString, montant_lot_4 & Chr(10), vbNullString)
    Cela me permettait en plus de les mettre en forme comme je le souhaite mais cela ne fonctionne pas.

    D'où le post et la question comment faire un tableau à deux dimension qui me permettrait de faire ça? J'ai bien pensé à faire une ou quatre fonctions avec chaque fois un tableau mais n'étant pas un cador je souhaiterais avoir un (des) avis sur la solutions à employer.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 207
    Points : 251
    Points
    251
    Par défaut
    Je n'ai pas exactement compris ce que tu veux.

    Toujours est-il que tu peux effectivement utiliser un tableau dynamique à plusieurs dimensions et que tu peux garder le contenu lorsque tu le redimensionnes avec 'Preserve' (mais je ne dois rien t'apprendre)...quel est donc ton problème?

  3. #3
    Membre expérimenté Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Points : 1 455
    Points
    1 455
    Par défaut
    Bonjour,

    je ne vois pas le contenue de ton tableau 2D...
    si ton tabealu s'arréte a 4-5 valeurs tu peux sans probléme créer un tableau de dimensions 10*10

    c'est qu'a partir de plusieurs centaines voir miliers de lignes qu'on va essayer de faire attention à la taille d'un tableau, l'appli risque de saturer

    voial ça c'est la méthode bourin

    aprés tu a effectivement la possibilité de faire ça proprement mais c'est pplus long

    Si la première déclaration est :
    Dim MonTableau(10,10)

    On peut redimensionner le tableau et en gardant les données stockés par :
    Dim Preserve MonTableau(10,50)

    Par contre, on ne peut pas faire :
    Dim Preserve MonTableau(50,50)
    Pour un tableau 1 dimension c'est plus simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim MonTableau() As String
     
    'On dimensionne le nombre d'élément
    ReDim MonTableau(50)
     
    'Puis on redimensionne à 100 éléments en gardant les anciennes
    ReDim Preserve MonTableau(100)

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 239
    Points : 95
    Points
    95
    Par défaut
    Effectivement mon tableau ne fait pas une taille de (10000*10000).

    En fait, je rempli un maximum de 4 textbox avec un montant du style 123.00 ou 123.59 ou encore 158.50.

    Le fait est que si j'en ai qu'un pas besoin de tableau, mais à partir de deux (ou quatre selon l'option choisie) la dénomination du premier se fait et apparait ainsi que la valeur qu'il contient mais pas les autres. D'où le tableau.

    Donc dans mon tableau d'un coté je vais me retrouve avec min (ou lot 1 selon l'option),max (ou lot2), lot3, lot 4. et de l'autre coté une valeur numérique correspondant à un prix et en cherchant un peu le symbole monétaire €.

    J'espère avoir été plus clair.

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 207
    Points : 251
    Points
    251
    Par défaut
    Toujours pas compris ...j'ai du mal à comprendre le lien entre ton tableau et les TextBox.

    Mais je rejoins hunteshiva...pour un tableau de dimension au plus 4, pas besoin de se prendre la tête, fais un tableau statique.

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 239
    Points : 95
    Points
    95
    Par défaut
    Juste pour l'explication. J'ai plusieurs texbox qui doivent afficher ce qu'elle contiennent dans une seule cellule de ma feuille ( 4textbox au max dans une seule cellule)

    Comme ce que j'ai fait ne fonctionne pas, je vais passer mes données dans un tableau puis mettre mon tableau dans un string et affiché mon string dans ma cellule.

    Si je merde pas dans ce que je fais je devrais avoir mes données les unes sous les autres avec en faces de chaque valeur un intitulé du style
    max: valeur €
    min: valeur €...

    A y être autant mettre ceci pour voir si cela marcherait ou pas (juste une verif sur le code)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub min_max()
     
        Dim tableau1(1, 1) As String, montant As String
     
        tableau1(0, 0) = "min : "
        tableau1(0, 1) = montant_ht + " €"
        tableau1(1, 0) = "max : "
        tableau1(1, 1) = montant_ht_max + " €"
        montant = tableau1() 'je suis pas sur ici
    End Sub

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 207
    Points : 251
    Points
    251
    Par défaut
    Pour ce qui est de ton code, je ne pense pas que cela fonctionnerait...bien que ça n'existe pas vraiment en VB (enfin, à ma connaissance), tableau1 - mais pas tableau1() - doit être un pointeur constant vers la première case du tableau donc aucune chance de pouvoir l'assigner à une variable de type string.

    Par contre, je pense que ce code là doit fonctionner:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For i=0 To 4
     
    montant = montant & tableau1(Floor(i/2), i%2)
     
    Next i

  8. #8
    Membre expérimenté Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Points : 1 455
    Points
    1 455
    Par défaut
    effectivement ça ne marchera pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    montant = tableau1() 'je suis pas sur ici
    si j'ai bien compris tu veux mettre tes données à la suite
    la encore tu a plusieurs possibilités *tout dépend le résultat que tu veux*

    perso je ne voit pas l’intérêt de passer par un tableaux... *surtout de string*
    si tu veux afficher ta donnée à la suite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim montant as string
    montant = "min : " & montant_ht & " €" & "max : " & montant_ht_max & " €"
    ' si c'est pour afficher dans une texBox un retour à la ligne serrait le bienvenu
    montant = "min : " & montant_ht & " €" & vbCrLf & "max : " & montant_ht_max & " €"
    tu peux séparer min et max avec un tableaux *pourquoi pas*
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim montant(1) as string
    montant(0) = "min : " & montant_ht & " €" 
    montant(1) = "max : " & montant_ht_max & " €"
    mais passer par un tableau 2D pour ça je ne vois pas....

  9. #9
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 239
    Points : 95
    Points
    95
    Par défaut
    Je veux afficher mes donner à la suite (les unes en dessous des autres avec une ligne vide entre elles) mais vu qu'elles ne sont pas situés au même endroit et vu ce que j'ai déjà tenté avant ça ne passe pas.

    Le tableau en 2D c'était pour mettre le texte min, max, lot3, lot 4 d'un coté et de l'autre les valeurs correspondantes.

    Mais actuellement mon souci est de savoir ou placer mon sub tableau (module ou dans ma feuille) ainsi que l'appeler. Ou si je doit plutôt faire une fonction.

  10. #10
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 239
    Points : 95
    Points
    95
    Par défaut
    Finalement je suis passé sur un tableau à une dimension.

    Mais comment le renvoyer pour alimenter la variable qui appelle ma fonction?
    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
    Public Function tableau_montant(montant_ht As String, montant_ht_max As String, Optional montant_lot_3 As String, Optional montant_lot4 As String) As String
    
        Dim montant(3) As String
        
        If (montant_lot_3 = montant_lot_4 = "") Then
            montant(0) = "min : " & montant_ht & " €"
            montant(1) = Chr(10) & "max : " & montant_ht_max & " €"
        ElseIf (montant_lot_4 = "") Then
            montant(0) = "lot 1 : " & montant_ht & "€"
            montant(1) = Chr(10) & "lot 2 : " & montant_ht_max & "€"
            montant(2) = Chr(10) & "lot 3 : " & montant_lot_3 & "€"
            Else
               montant(0) = "lot 1 : " & montant_ht & "€"
               montant(1) = Chr(10) & "lot 2 : " & montant_ht_max & "€"
               montant(2) = Chr(10) & "lot 3 : " & montant_lot_3 & "€"
               montant(3) = Chr(10) & "lot 4 : " & montant_lot_4 & "€"
        End If
            
        tableau_montant = montant(4)  'aucune erreur de compilation mais est-ce autorisé en vba
        
    End Function

  11. #11
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Pourquoi ce détour par un tableau?
    Il suffirait de concaténer les divers possibilités.
    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
    Function Tableau_Montant(Montant_HT As String, Montant_HT_Max As String, Optional Montant_lot_3 As String, Optional Montant_lot_4 As String) As String
    Dim RES As String
     
    If Montant_lot_3 = "" And Montant_lot_4 = "" Then
        RES = "Min : " & Montant_HT & " €"
        RES = RES & Chr(10) & "Max : " & Montant_HT_Max & " €"
    Else
        RES = "Lot 1 : " & Montant_HT & "€"
        RES = RES & Chr(10) & "Lot 2 : " & Montant_HT_Max & "€"
        RES = RES & Chr(10) & "Lot 3 : " & Montant_lot_3 & "€"
        If Montant_lot_4 <> "" Then RES = RES & Chr(10) & "Lot 4 : " & Montant_lot_4 & "€"
    End If
    Tableau_Montant = RES
    End Function

  12. #12
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 239
    Points : 95
    Points
    95
    Par défaut
    Tout simplement parce que je n'y ai même pas songé un instant. Mais effectivement c'est plus simple que ce que j'ai essayé de faire.


    Merci pour le coup de main

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 26/11/2005, 20h55
  2. Réponses: 13
    Dernier message: 13/10/2005, 17h03
  3. Tableau a trois dimension!!!
    Par krfa1 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 03/10/2005, 16h52
  4. Réponses: 1
    Dernier message: 30/09/2005, 20h17
  5. [Tableau]comment connaitre la taille d'un tableau à 2 dimensions
    Par Kyti dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 22/04/2005, 11h27

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