[VBA] Dimensionnement de tableaux

deniooo

XLDnaute Occasionnel
Bonjour à tous !

Voila j'ai le code suivant, et à la compilation il me sort l'erreur :


Code:
         Tableau déja dimensionné
en me surlignant le bout de code que j'ai mis en gras

Code:
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)
 

Pièces jointes

  • TestTableaux.xls
    18.5 KB · Affichages: 95
  • TestTableaux.xls
    18.5 KB · Affichages: 97
  • TestTableaux.xls
    18.5 KB · Affichages: 96

Pierrot93

XLDnaute Barbatruc
Re : [VBA] Dimensionnement de tableaux

Bonjour Denio

tu ne peux utiliser l'instruction "redim" si les dimensions de ton tableau sont déjà déclarées, cf aide vba ci dessous :

ReDim permet de dimensionner et de redimensionner un tableau dynamique ayant déjà été déclaré de manière formelle par le biais d'une instruction Private, Public ou Dim suivie de parenthèses vides (sans indices de dimension).

déclare ton tableau comme suit :
Code:
Dim VarTab() As String

pas regardé le reste...

bon après midi
@+
 

deniooo

XLDnaute Occasionnel
Re : [VBA] Dimensionnement de tableaux

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:
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(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 ?

(Merci pour vos explications !)
 
Dernière édition:

deniooo

XLDnaute Occasionnel
Re : [VBA] Dimensionnement de tableaux

J'ai bien mon premier redim,
aprés tests, je m'apperçois que lorsque je met
Code:
ReDim Preserve VarTab(1 To 2, 1 To (UBound(VarTab, 2) + 1))
Excel plante lamentablement.

Je ne pige pas pourquoi, peut-être la syntaxe
Code:
1 To (UBound(VarTab, 2) + 1
.

Une idée ?!
 
Dernière édition:

deniooo

XLDnaute Occasionnel
Re : [VBA] Dimensionnement de tableaux

Merci !

Je viens de comprendre mon erreur, sur la premiére valeur trouvée je créait un tableau infini parce que j'ai passé en paramétre la taille dynamique du tableau.
Avec le code suivant tout fonctionne !

Code:
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
        FinTab = UBound(VarTab, 2)
        
        Do Until parcours > FinTab
            If bernard = VarTab(1, parcours) Then
                If bernard = "" Then
                    VarTab(2, parcours) = 1
                Else
                    VarTab(2, parcours) = VarTab(2, parcours) + 1
                End If
            Else
                n = n + 1
                If n = UBound(VarTab, 2) Then
                    ReDim Preserve VarTab(1 To 2, 1 To (n + 1))
                    VarTab(1, n) = bernard
                    VarTab(2, n) = 1
                End If
            End If
            parcours = parcours + 1
        Loop
    Next
    For i = 1 To FinTab
        Cells(2, i + 9).Value = VarTab(1, i)
        Cells(3, i + 9).Value = VarTab(2, i)
    Next
End Sub

Merci pour l'attention que vous y avez porté ! (encore une fois :))

edit : condition si bernard est vide + affichage
 
Dernière édition:

Statistiques des forums

Discussions
312 581
Messages
2 089 917
Membres
104 306
dernier inscrit
Bouhlal