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 :

Dimensionnement de tableau


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2008
    Messages : 73
    Par défaut Dimensionnement de tableau
    Bonjour à tous !

    Voila j'ai le code suivant, et à la compilation il me sort l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
              Tableau déja dimensionné
    en me surlignant le bout de code que j'ai mis en gras.

    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
    Sub test()
        
        Dim i As Integer, j As Integer
        Dim VarTab(1 To 2, 1 To 1) As String
        Set plage = ActiveSheet.UsedRange.Columns(1).Cells
        
        For Each cel In plage
            parcours = 1
            n = 0
            bernard = cel.Offset(0, 6).Value
            Do Until parcours > UBound(VarTab, 2)
                If bernard = VarTab(1, parcours) Then
                    VarTab(2, parcours) = VarTab(2, parcours) + 1
                Else
                    n = n + 1
                    If n = UBound(VarTab, 2) Then
                        ReDim Preserve VarTab(2, UBound(VarTab, 2) + 1)
                        VarTab(1, n) = bernard
                        VarTab(2, n) = 1
                    End If
                End If
                parcours = parcours + 1
            Loop
        Next
    
    End Sub

    Je m'essaye aux tableaux, docn je ne sais pas encore bien les maitriser, à quoi est dûe cette erreur ?!

    (je joint un fichier exemple)
    Fichiers attachés Fichiers attachés

  2. #2
    Membre chevronné Avatar de J.Michel
    Inscrit en
    Septembre 2007
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 62

    Informations forums :
    Inscription : Septembre 2007
    Messages : 279
    Par défaut
    Lorsqu'on utilise Redim, le premier Dim ne doit pas être "sans borne" ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2008
    Messages : 73
    Par défaut
    Je viens de tester avec ce code, sans la premiére dimension et en redimensionnant en string.

    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
    Sub test()
     
        Dim i As Integer, j As Integer
        Dim VarTab(1 To 2, 1 To 1)
        Set plage = ActiveSheet.UsedRange.Columns(1).Cells
     
        For Each cel In plage
            parcours = 1
            n = 0
            bernard = cel.Offset(0, 6).Value
            Do Until parcours > UBound(VarTab, 2)
                If bernard = VarTab(1, parcours) Then
                    VarTab(2, parcours) = VarTab(2, parcours) + 1
                Else
                    n = n + 1
                    If n = UBound(VarTab, 2) Then
                        ReDim Preserve VarTab(2, UBound(VarTab, 2) + 1) As String
                        VarTab(1, n) = bernard
                        VarTab(2, n) = 1
                    End If
                End If
                parcours = parcours + 1
            Loop
        Next
     
    End Sub
    Et il me ressort la même erreur. o.O

    edit : même sans le "As String" il me ressort la même erreur.

  4. #4
    Membre chevronné Avatar de J.Michel
    Inscrit en
    Septembre 2007
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 62

    Informations forums :
    Inscription : Septembre 2007
    Messages : 279
    Par défaut
    Essaye comme Ca:
    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
    Sub test()
     
        Dim i As Integer, j As Integer
        Dim VarTab() As String
        Set plage = ActiveSheet.UsedRange.Columns(1).Cells
     
        For Each cel In plage
            parcours = 1
            n = 0
            bernard = cel.Offset(0, 6).Value
            Do Until parcours > UBound(VarTab, 2)
                If bernard = VarTab(1, parcours) Then
                    VarTab(2, parcours) = VarTab(2, parcours) + 1
                Else
                    n = n + 1
                    If n = UBound(VarTab, 2) Then
                        ReDim Preserve VarTab(2, UBound(VarTab, 2) + 1)
                        VarTab(1, n) = bernard
                        VarTab(2, n) = 1
                    End If
                End If
                parcours = parcours + 1
            Loop
        Next
     
    End Sub
    Pas de précision As String lors du Redim et pas de dimension lors du Dim

  5. #5
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Je confirme ce que dit J.Michel.

    Extrait de l'aide sur redim :
    Array already dimensioned


    A static array can only be dimensioned once. This error has the following causes and solutions:

    You attempted to change the dimensions of a static array with a ReDim statement; only dynamic arrays can be redimensioned.
    Either remove the redimensioning or use a dynamic array. To define a dynamic array, use a Dim, Public, Private, or Static statement with empty parentheses. For example:

    Dim MyArray()

    In a procedure, you can define a dynamic array with the ReDim or Static statement using a variable for the number of elements:

    ReDim MyArray(n)

    An Option Base statement occurs after array dimensions are set.
    Make sure any Option Base statement precedes all array declarations.

    For additional information, select the item in question and press F1 (in Windows) or HELP (on the Macintosh).

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2008
    Messages : 73
    Par défaut
    Voila le code que je viens de modifier, et là BIM, excel plante et windows va suivre je pense, l'explorer est déja tombé ! xD

    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
    Sub test()
     
        Dim i As Integer, j As Integer
        Dim VarTab() As String
        Set plage = ActiveSheet.UsedRange.Columns(1).Cells
        ReDim VarTab(1 To 2, 1 To 1)
     
        For Each cel In plage
            parcours = 1
            n = 0
            bernard = cel.Offset(0, 6).Value
            MsgBox (UBound(VarTab, 2))
     
            Do Until parcours > UBound(VarTab, 2)
                If bernard = VarTab(1, parcours) Then
                    VarTab(2, parcours) = VarTab(2, parcours) + 1
                Else
                    n = n + 1
                    If n = UBound(VarTab, 2) Then
                        ReDim Preserve VarTab(1 To 2, 1 To (UBound(VarTab, 2) + 1))
                        VarTab(1, n) = bernard
                        VarTab(2, n) = 1
                    End If
                End If
                parcours = parcours + 1
            Loop
        Next
     
    End Sub
    une idée de ce qu'il ce passe ?

    Apparemment c'est cette ligne qui me fais planter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ReDim Preserve VarTab(1 To 2, 1 To (UBound(VarTab, 2) + 1))
    Maintenant, pourquoi ?! Une idée ?! Une solution ?!

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 31/03/2015, 14h58
  2. Dimensionnement de tableau
    Par al9000 dans le forum Langage
    Réponses: 5
    Dernier message: 23/06/2014, 18h09
  3. [Toutes versions] Dimensionner un tableau Excel dans document Word
    Par jphcrutzen dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 14/12/2009, 15h38
  4. Dimensionner un tableau
    Par ben_skywalker dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 12/04/2007, 16h17
  5. Réponses: 7
    Dernier message: 19/01/2006, 18h57

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