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 régulier 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
    Points : 74
    Points
    74
    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 : 163
Taille : 82,3 Ko


    En effet ici nous avons une colonne et 252 ligne.

    Et j'ai ceci:

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

    Avec 252 lignes et une 1 colonne aussi.

    Alors ou est la différence?

    Merci

  2. #2
    Expert éminent sénior
    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
    Points : 18 677
    Points
    18 677
    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 …


    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  3. #3
    Membre régulier 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
    Points : 74
    Points
    74
    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 émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    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/
    Cordialement

    Docmarti.

  5. #5
    Expert éminent sénior
    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
    Points : 18 677
    Points
    18 677
    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 …

    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  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 : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    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 régulier 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
    Points : 74
    Points
    74
    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 : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    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 régulier 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
    Points : 74
    Points
    74
    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 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    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 régulier 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
    Points : 74
    Points
    74
    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 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    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 sénior
    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
    Points : 18 677
    Points
    18 677
    Par défaut





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


    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

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

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    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 émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    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
    Cordialement

    Docmarti.

  17. #17
    Membre régulier 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
    Points : 74
    Points
    74
    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