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 :

Creation d'un tableau [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    361
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 361
    Par défaut Creation d'un tableau
    Bonjour,

    j'ai quelque question sur le code suivant (du tuto) :
    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
    Function CreationTableau(ParamArray Cellules1()) As Variant
        'Adapté de:
        'http://support.microsoft.com/?kbid=213403
        '
        Dim VarTab() As Variant
        Dim Temp As Variant
        Dim i As Integer
        Dim w As Integer, X As Integer, y As Integer, z As Integer
     
        i = 1
     
        'Boucle sur les éléments du tableau de paramètres.
        For X = 0 To UBound(Cellules1)
            If TypeName(Cellules1(X)) = "Range" Then
                Set Temp = Cellules1(X)
                'Vérifie si le paramètre passé à la fonction est une cellule simple
                'ou une plage.
                If IsArray(Temp) Then
                    'Intègre chaque cellule de la plage dansle tableau.
                    For y = 1 To UBound(Temp.Value)
                        For z = 1 To UBound(Temp.Value, 2)
                            'Permet de filtrer les cellules vides.
                            'If Not IsEmpty(Temp(y, z).Value) Then
                                ReDim Preserve VarTab(1 To i)
                                VarTab(i) = Temp(y, z).Value
                                i = i + 1
                            'End If
                        Next z
                    Next y
                    Else
                        'Permet de filtrer les cellules vides.
                        'If Not IsEmpty(Temp) Then
                            'Intègre la cellule dans le tableau.
                            ReDim Preserve VarTab(1 To i)
                            VarTab(i) = Temp
                            i = i + 1
                        'End If
                End If
            Else
                ReDim Preserve VarTab(1 To i)
                VarTab(i) = Cellules1(X)
                i = i + 1
            End If
        Next X
     
        CreationTableau = VarTab
    End Function
    tout d'abord j'aimerais savoir la différence dans excel entre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If TypeName(Cellules1(X)) = "Range" Then
    et , pour moi une plage de donnée peut être vu comme un tableau.

    Ensuite j'aimerais la différence entre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    To UBound(Temp.Value, 1)
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    To UBound(Temp.Value, 2)
    (Temp.Value, 1) correspond aux lignes et (Temp.Value, 2) aux colonnes?

    merci beaucoup!

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If TypeName(Cellules1(X)) = "Range" Then
    Teste si l'argument passé est bien un Range
    =============
    si c'est le cas, teste s'il s'agit d'un Range comportant plusieurs cellules (ce peut être un Range d'une seule cellule et la suite du traitement n'est pas effectuée)
    **************
    Temp est un variant qui, dans le cas présent, contient un tableau bidimensionnel (2 dimensions). Le deuxième argument de la fonction Ubound indique :
    pour 1, la première dimension (lignes)
    pour 2, la deuxième dimension (colonnes)

  3. #3
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    361
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 361
    Par défaut
    Merci , c'est beaucoup plus clair maintenant,

    une dernière incompréhension :

    dans le cas où notre Range correspondrait à une seule cellule à quoi servirai de d'incrémenter notre VarTab(i) alors?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
     ReDim Preserve VarTab(1 To i)
                            VarTab(i) = Temp
                            i = i + 1

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Par défaut
    C'est pour cette raison qu'il y a une condition qui vérifie si c'est un tableau
    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
       If IsArray(Temp) Then  'on effectue à la seule condition que ce soit un tableau
                    'Intègre chaque cellule de la plage dansle tableau.
                    For y = 1 To UBound(Temp.Value)
                        For z = 1 To UBound(Temp.Value, 2)
                            'Permet de filtrer les cellules vides.
                            'If Not IsEmpty(Temp(y, z).Value) Then
                                ReDim Preserve VarTab(1 To i)
                                VarTab(i) = Temp(y, z).Value
                                i = i + 1
                            'End If
                        Next z
                    Next y
                    Else
                        'Permet de filtrer les cellules vides.
                        'If Not IsEmpty(Temp) Then
                            'Intègre la cellule dans le tableau.
                            ReDim Preserve VarTab(1 To i)
                            VarTab(i) = Temp
                            i = i + 1
                        'End If
                End If

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 28/12/2006, 16h29
  2. [Tableaux] Création dynamique de tableau type array()
    Par Pahcixam dans le forum Langage
    Réponses: 7
    Dernier message: 29/11/2006, 14h34
  3. controle ActiveX pour la Creation d'un tableau
    Par sundjata dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 11/08/2006, 08h40
  4. Réponses: 1
    Dernier message: 30/01/2005, 11h00
  5. [VB.NET] Création d'un tableau en code behind
    Par netr dans le forum ASP.NET
    Réponses: 6
    Dernier message: 11/05/2004, 10h02

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