Problème de remplissage d'un tableau deux D

Résolu
reno421 Messages postés 47 Statut Membre -  
reno421 Messages postés 47 Statut Membre -
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

  1. reno421 Messages postés 47 Statut Membre
     
    au fait, le 0 est en réalité un J
    0
  2. Paf
     
    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
    1. reno421 Messages postés 47 Statut Membre
       
      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
  3. paf
     
    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
    1. reno421 Messages postés 47 Statut Membre
       
      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