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 :

Quel est la diférence entre ces deux tableaux ? [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé Avatar de Nono Sto
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 350
    Par défaut Quel est la diférence entre ces deux tableaux ?
    Chères amies, chers amis du forum

    J'ai deux tableaux qui me semble t il sont tous deux des vecteurs colonnes:

    Nom : Sans titre 2.PNG
Affichages : 197
Taille : 82,3 Ko


    En effet ici nous avons une colonne et 252 ligne.

    Et j'ai ceci:

    Nom : Sans titre 3.PNG
Affichages : 169
Taille : 83,7 Ko

    Avec 252 lignes et une 1 colonne aussi.

    Alors ou est la différence?

    Merci

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut




    Bonjour,

    erreur sur le premier car il s'agit d'une ligne de 252 colonnes et le second est bien un tableau de 252 lignes sur une colonne …



  3. #3
    Membre éclairé Avatar de Nono Sto
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 350
    Par défaut
    Merci

    Je me disais biens que cela ressembler à un vecteur ligne, cepandant a quoi tu vois sa, car normalement la premiere coordonnée sont les lignes.

  4. #4
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Bonjour

    3 Exemples:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub Tableaux()
     
    Dim t1
    Dim t2
    Dim t3
     
     ReDim t1(10) 'Tableau à une dimension
     
     t2 = Range("A1:X1") 'Tableau à 2 dimensions
     
     t3 = Range("B1:B10") 'Tableau à 2 dimensions
     
    Stop
    End Sub
    Pour plus d'infos :
    http://silkyroad.developpez.com/vba/tableaux/

  5. #5
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Citation Envoyé par Nono Sto Voir le message
    cepandant a quoi tu vois sa, car normalement la premiere coordonnée sont les lignes.

    Pour VBA, une seule dimension équivaut aux colonnes (cellules) d'une unique ligne …


  6. #6
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Bonjour,

    Le premier est un Array de String, le second un Variant contenant des Variant/String.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  7. #7
    Membre éclairé Avatar de Nono Sto
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 350
    Par défaut
    Merci

    Quel est la differrence entre un tableau Array et un tableau Variant. De plus je souhaitent préciser a chaque tableau un type unique de variable (String, Long, date..) et non des variant comment fais t on SVP?

  8. #8
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Bonjour,

    Un élément de réponse à ta portée:
    Comment déclares-tu les 2 tableaux?
    La différence est là.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  9. #9
    Membre éclairé Avatar de Nono Sto
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 350
    Par défaut
    Merci


    pour le premier j'ai fais ceci:

    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
     
    Dim Testab() As String
    Dim Testab2() As String
    Dim i intRow As Long
     
    Worksheets("Feuil2").Select
     
    intRow = Range(Cells(1, 2), Cells(1, 2).End(xlDown)).Count - 1
    intRow2 = Range(Cells(1, 3), Cells(1, 3).End(xlDown)).Count - 1
     
    ReDim Testab(intRow) 
     
    'Initialisation du tableau 
    For i = 0 To intRow
        Testab(i) = Cells(i + 1, 2).Value
    Next i

    et pour le second:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim Testab() As variant
     
     Testab = Range(Cells(1, 3), Cells(1, 3).End(xlDown))
    La différence serais du a ma declaration de variable?

    Est ce que je peux affecté un range directement a un tableau de string? ou suis je obligé de passé par un redim et une boucle?

    Quel est le plus efficace? et le plus propre sachant que je souhaite affecté des tableau de type unique (long, double, string...) et non de type variant.

  10. #10
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    défini un tableau à 1 dimension.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Testab = Range(Cells(1, 3), Cells(1, 3).End(xlDown))
    Un tableau issu d'une plage à toujours 2 dimensions (lignes,colonnes) même si tu n'as qu'une seule colonne (auquel cas dimension 2 = 1 to 1)

    eric

  11. #11
    Membre éclairé Avatar de Nono Sto
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 350
    Par défaut
    Merci

    Cependant quel est le plus efficace, l'affectation en boucle, ou l’affectation direct par une plage?

    - la boucle prend plus de temps pour l'affectation mais ensuite on gere des tableaux de type "simple": long, string,... donc des tableaux moins lourd en mémoire

    - affectation par plage plus rapide mais tableaux variant lourd?

    Merci

  12. #12
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Avis personnel :
    Si c'est un petit tableau peu importe.
    Si c'est un grand mieux vaut privilégier la vitesse.
    Conclusion : lecture de la totalité plage en une fois, plus simple et plus rapide.
    A moins d'avoir un énorme tableau mais là excel n'est pas forcément le plus adapté...
    eric

  13. #13
    Invité
    Invité(e)
    Par défaut Bonjour,
    cet formulation ne prend pas de place en mémoire car elle fait référence à une plage de cellule Excel!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub test()
    Dim L As Integer
    Dim tb As Range
    Set tb = ActiveSheet.UsedRange
    For L = 1 To tb.Rows.Count
        Debug.Print tb(L, 1).Value
    Next
    End Sub

  14. #14
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut





    J'ai déjà utilisé des tableaux de type Variant comportant peu de colonnes mais dépassant les 70 000 lignes …



  15. #15
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    cet formulation ne prend pas de place en mémoire car elle fait référence à une plage de cellule Excel!
    Mais c'est aussi lent que de faire directement Debug.Print Cells(L, 1).Value non ?
    eric

  16. #16
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Citation Envoyé par Nono Sto Voir le message
    Merci

    Cependant quel est le plus efficace, l'affectation en boucle, ou l’affectation direct par une plage?

    - la boucle prend plus de temps pour l'affectation mais ensuite on gere des tableaux de type "simple": long, string,... donc des tableaux moins lourd en mémoire

    - affectation par plage plus rapide mais tableaux variant lourd?

    Merci
    Le mieux c'est de faire des tests et de voir ce qui convient le mieux.
    Moi je ne vois pas de différence de rapidité entre le type DOUBLE et le type VARIANT.
    Par contre la lecture cellule par cellule est lente.


    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
    Sub TableauLuEnBloc()
     m = Timer
     
     Dim t1
     
     maxi = 100000
     
    'lire en bloc le contenu d'une plage de plusieurs cellules dans un tableau variant
     t1 = Cells(1, 1).Resize(maxi, 10).Value
     
     Cells(1, 5).Resize(UBound(t1, 1), UBound(t1, 2)).Value = t1
     dur = Timer - m
     Debug.Print "Lecture en bloc "; dur
     
    End Sub
     
    Sub TableauDeDouble()
     m = Timer
     
     maxi = 100000
     ReDim t1(1 To maxi, 1 To 10) As Double
     
      'Lecture cellule par cellule vers un tableau Double
     For r = 1 To UBound(t1, 1)
      For L = 1 To UBound(t1, 2)
       t1(r, L) = Cells(r, L)
      Next
     Next
     
     Cells(1, 5).Resize(UBound(t1, 1), UBound(t1, 2)).Value = t1
     dur = Timer - m
     Debug.Print "Double "; dur
     
    End Sub
     
    Sub TableauDeVariant()
     m = Timer
     
     maxi = 100000
     ReDim t1(1 To maxi, 1 To 10) As Double
     
     'Lecture cellule par cellule vers un tableau Variant
     For r = 1 To UBound(t1, 1)
      For L = 1 To UBound(t1, 2)
       t1(r, L) = Cells(r, L)
      Next
     Next
     
     Cells(1, 5).Resize(UBound(t1, 1), UBound(t1, 2)).Value = t1
     dur = Timer - m
     Debug.Print "Variant "; dur
     
    End Sub

  17. #17
    Membre éclairé Avatar de Nono Sto
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 350
    Par défaut
    Merci à tous

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

Discussions similaires

  1. Quelle est la différence entre ces deux DSP?
    Par eclipse2007 dans le forum Signal
    Réponses: 2
    Dernier message: 17/02/2015, 19h26
  2. Quelle est la différence entre ces deux choses
    Par pierrot10 dans le forum jQuery
    Réponses: 3
    Dernier message: 26/01/2012, 11h37
  3. Quelle est la différence entre ces deux déclarations ?
    Par sidahmed dans le forum Débuter
    Réponses: 15
    Dernier message: 04/10/2007, 19h59
  4. Quel est la différence entre ces deux écritures ?
    Par TocTocKiéLà? dans le forum C++
    Réponses: 5
    Dernier message: 06/08/2007, 14h11
  5. Réponses: 6
    Dernier message: 13/05/2007, 23h14

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