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 :

[VB-Excel]problème de syntaxe avec Array


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 37
    Points : 19
    Points
    19
    Par défaut [VB-Excel]problème de syntaxe avec Array
    J'essai de déclarer un tableau qui va représenter ma feuille excel, soit avec 2 dimensions: lignes et colonnes. Le tableau n'a pas de chiffre fixe pcq mon nombre de ligne va sans cèsse varier. Je défini ensuite une 2e dimension pour chacune des lignes du tableau. Lorsque je tente de remplir mon tableau avec la ligne "tableau[i][x] = Worksheet("candidature").cell(i, x)" j'ai une erreur de compilation: Attendu: fin d'instruction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim tableau As Variant
    tableau = Array()
    Do While Not Worksheet("candidature").cell(i, 3) = Empty
      i = i + 1
      tableau [i] = Array(20)
      For x = 0 To 19
    ##############################################
       tableau[i][x] = Worksheet("candidature").cell(i, x)
    ##############################################
      Next x 
    Loop
    Ma syntaxe est p-e très loin de ce à quoi elle devrait ressembler, c'est la première fois que jme sert d'un array en VB

  2. #2
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Essai de t'inspirer du code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Sub test()
    Dim tableau() As Variant
    ReDim Preserve tableau(2, 1)
    tableau(1, 1) = "1"
    ReDim Preserve tableau(2, 5)
    tableau(2, 5) = "5"
    End Sub

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 37
    Points : 19
    Points
    19
    Par défaut
    donc, je pourait faire comme cela:

    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
     
    Dim tableau() As Variant
    tableau = Array()
     
    Do While Not Worksheet("candidature").cell(i, 3) = Empty
      i = i + 1
      tableau [i] = Array(20)
     
      For x = 0 To 19
       ReDim tableau(i, x)
       tableau(i, x) = Worksheet("candidature").cell(i, x)
     
      Next x
     
    Loop
    mais je ne suis aps sur davoir compris le Preserve....

  4. #4
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Preserve c'est pour conserver les données déjà présente lors du redimensionnement d'un tableau...


    que ve tu faire avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tableau [i] = Array(20)
    rajoute un s à WorksheetS

  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 37
    Points : 19
    Points
    19
    Par défaut
    et bien...je croyais que c'était la façon de donné une 2e dimension au tableau, pour représenté les lignes avec la première dimension
    et les colonnes avec la deuxième dimension
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tableau [i] = Array(20)
    je croyais qu'il fallais ajouter cette ligne dans la boucle pour créer une 2e dimension de 20 cases à chaque ligne de la première dimension. Quel serait la bonne syntaxe à utiliser pour effectuer ce que j'explique ci-dessus!? Merci

  6. #6
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 37
    Points : 19
    Points
    19
    Par défaut
    J'ai vraiment besoin de savoir la facon de déclarer une variable de type array (ca porte aussi le nom de vecteur) avec 2 dimensions au plus vite....si qq1 connait un tutoriel ou une référence qui pourrait m'aider, sa serait vraiment apprécié.

    Je vais tenter de vous expliquer du mieux que je peux ce que je veux faire, p-e que ca vous aidera à comprendre mon intérrogation:
    J'ai une feuille qui comprend des clients, un par ligne, et les colonnes représentent différentes informations des clients. J'ai besoin de mettre ces clients et leurs informations dans un vecteur à 2 dimensions (une dimension pour les lignes et l'autre pour les colonnes) pour pouvoir les trier pour ensuite les tranférer dans une autre feuille de mon classeur. Les trier dans un vecteur à 2 dimensions va probablement être plus rapide que d'insérer des nouvelles lignes, qui prend bcp de temps de recalcul pour Excel.

    Merci pour votre aide à l'avance

  7. #7
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    bonjour

    j'espere que cet exemple pourra t'aider


    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    Option Explicit
    Option Base 0
     
    Sub triMulticolonnes()
    Dim Tableau()
    Dim i As Integer, j As Integer, y As Integer, x As Integer
    Dim indexColTri As Byte
    Dim t As Variant
     
     x = 50 'définit le nombre de lignes dans le tableau
     
     'redimensionne le tableau (4 colonnes et x lignes)
     ReDim Preserve Tableau(4, x)
     
    '-----chargement d'un tableau à partir de valeurs aleatoires ------
    For i = 0 To x - 1
        Randomize
        Tableau(0, i) = Chr(Int((26 * Rnd) + 1) + 64)
        Randomize
        Tableau(1, i) = Chr(Int((26 * Rnd) + 1) + 64)
        Randomize
        Tableau(2, i) = Chr(Int((26 * Rnd) + 1) + 64)
        Randomize
        Tableau(3, i) = Chr(Int((26 * Rnd) + 1) + 64)
    Next i
    '--------------------------------------------
     
     
    '---- Appliquer un tri sur une des colonnes du tableau -----
    'choisir la colonne à trier: 0=1ere colonne ,  1=2eme colonne...etc ...
    indexColTri = 0
     
     
    For i = 0 To x - 1
         For j = 0 To x - 2
     
              '---------
              'synthaxe pour tri données date
              'If CDate(Tableau(indexColTri, j)) > _
                    CDate(Tableau(indexColTri, j + 1)) Then
     
              'synthaxe pour tri données numériques
              'If CDec(Tableau(indexColTri, j)) > _
                    CDec(Tableau(indexColTri, j + 1)) Then
     
              'synthaxe pour tri données texte
              If Tableau(indexColTri, j) > Tableau(indexColTri, j + 1) Then
              '---------
     
                For y = 0 To 3
                    t = Tableau(y, j)
                    Tableau(y, j) = Tableau(y, j + 1)
                    Tableau(y, j + 1) = t
                Next y
     
              End If
        Next j
    Next i
    '------------------------------------------------------------
     
     
    '---- afficher le resultat -----------------------------------
    For i = 0 To x - 1
    Debug.Print Tableau(0, i) & vbTab & Tableau(1, i) & vbTab & Tableau(2, i) & _
    vbTab & Tableau(3, i)
    Next i
    '-------------------------------------------------------------
     
    End Sub



    bonne journée
    michel

  8. #8
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 37
    Points : 19
    Points
    19
    Par défaut
    Merci bcp Silkyroad, ton code m'a bcp aidé. Merci a Bbil aussi pour ton aide.

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

Discussions similaires

  1. Problème de syntaxe avec des nombres
    Par baleiney dans le forum Langage
    Réponses: 7
    Dernier message: 09/07/2006, 10h48
  2. Problème de syntaxe avec le composant TCppWebBrowser
    Par Ptite Développeuse dans le forum C++Builder
    Réponses: 10
    Dernier message: 19/04/2006, 15h48
  3. problème de syntaxe avec champ date
    Par mussara dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 03/02/2006, 16h19
  4. [VBA EXCEL] Problème d'éxécution avec graphiques
    Par RedBurn dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/11/2005, 09h55
  5. [VBA Excel] problème de range avec find
    Par loacast dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 23/11/2005, 13h56

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