Problème de remplissage d'un tableau deux D

Résolu/Fermé
reno421 Messages postés 41 Date d'inscription vendredi 30 janvier 2015 Statut Membre Dernière intervention 16 septembre 2015 - Modifié par pijaku le 24/02/2015 à 10:29
reno421 Messages postés 41 Date d'inscription vendredi 30 janvier 2015 Statut Membre Dernière intervention 16 septembre 2015 - 27 févr. 2015 à 13:47
Bonjour,

Voici mon problème. J'essaie de remplir un tableau deux D à partir des cellules d'une feuille excel.
Il me semble que mon code est correcte pour tant j'obtient l'erreur 1004.
L'un d'entre vous peu-t-il m'aider SVP.
D'avance merci.

Sub utilisation_tableau_3D()

    Dim Tab_zones_contacts() As Variant
    Dim i, j As Integer
    Dim fin_lg, fin_col As Integer
    
    Sheets("Zones").Select
    Range("A1").Select
    
    fin_lg = Range("A" & Rows.Count).End(xlUp).Row - 2  ' -2  car tableau démarre de 0 et on décompte la ligne titre
    fin_col = Cells(1, Cells.Columns.Count).End(xlToLeft).Column - 1  ' -1  car tableau démarre de 0
    
    ReDim Tab_zone(fin_lg, fin_col)
    
    For i = 0 To fin_lg
        For j = 0 To fin_col
                               
            Tab_zones_contacts(i, 0) = Sheets("Zones").Range(i + 2, j + 2).Value
            
          
        Next
    
    Next

End Sub

3 réponses

reno421 Messages postés 41 Date d'inscription vendredi 30 janvier 2015 Statut Membre Dernière intervention 16 septembre 2015
24 févr. 2015 à 09:13
au fait, le 0 est en réalité un J
0
Bonjour

Plusieurs soucis:
- ReDim Tab_zone(fin_lg, fin_col), le tableau ne s'appelle pas Tab_zone mais Tab_zones_contacts

-Sheets("Zones").Range(i + 2, j + 2).Value la syntaxe du range n'est pas la bonne, utiliser Sheets("Zones").Cells(i + 2, j + 2).Value

En plus simple on pourrait avoir
Sub utilisation_tableau_3D() 
Dim Tab_zones_contacts
Dim fin_lg, fin_col As Integer
With Sheets("Zones")
fin_lg = .Range("A" & .Rows.Count).End(xlUp).Row
fin_col = .Cells(1, .Cells.Columns.Count).End(xlToLeft).Column
Tab_zones_contacts = Range(.Cells(2, 1), .Cells(fin_lg, fin_col))
End With
End Sub


à noter que dans ces conditions les indices de tableau commencent à 1

A+
0
reno421 Messages postés 41 Date d'inscription vendredi 30 janvier 2015 Statut Membre Dernière intervention 16 septembre 2015
26 févr. 2015 à 13:35
Waouw, la, tu m'en bouches un coin, c'est hyper rapide comme solution. Tu es balaises.
Peux-tu, juste, SPV, m'expliquer car je ne conprends pas les . que tu mets devant Cells et Range.
D'avance merci.

Au fait, désolé de t'avoir répondu si tard
0
Re bonjour

With Sheets("Zones")
fin_lg = .Range("A" & .Rows.Count).End(xlUp).Row
fin_col = .Cells(1, .Cells.Columns.Count).End(xlToLeft).Column
Tab_zones_contacts = Range(.Cells(2, 1), .Cells(fin_lg, fin_col))
End With


C'est comme si on avait écrit


 fin_lg = Sheets("Zones").Range("A" & .Rows.Count).End(xlUp).Row
fin_col = Sheets("Zones").Cells(1, Sheets("Zones").Cells.Columns.Count).End(xlToLeft).Column
Tab_zones_contacts = Range(Sheets("Zones").Cells(2, 1),Sheets("Zones").Cells(fin_lg, fin_col))


en utilisant With Sheets("Zones") (sans oublier le End With), on n'est pas obligé de répéter ce terme à chaque fois (mais il faut conserver le ".".
ça allège la lisibilité et l'écriture du code.

A+
0
reno421 Messages postés 41 Date d'inscription vendredi 30 janvier 2015 Statut Membre Dernière intervention 16 septembre 2015
27 févr. 2015 à 13:47
Super, merci pour l'explication. Par contre, d'après ce que je vois, pour que ça fonctionne, les tableaux doivent être de type variant, ce qui prend plus de place mais pas grave dans mon cas
0