Remplir list = Array automatiquement

Dim Var(1 To 1000) As String
inc = 3
Sheets("Dossier").Activate

For A = 0 To 50
inc = inc + 1
Var(inc) = Cells(inc, 1).Value
list.Add = Var(inc)
Next
Sheets("Feuil1").Activate

list = Array()

Bonjour,

Je cherche à remplir "list", je m'explique: j'ai des chemins de fichier dans la colonne A de ma feuille "Dossier" le nombre de chemin varie ça peut aller la ligne 4 jusqu'a à un nombre variant, j'aimerai pouvoir mettre tout ces chemins dans des variables, et ajouter toute ces variables à "list". Mon problème étant la boucle à utiliser +la condition à mettre(surtout la condition), et la fonction à utliser pour pouvoir remplir "list".

Ps:j'ai essayé la fonction "ArrayAdd list, Var(inc)" mais excel me dit que Arrayadd existe pas

voila merci de votre aide :)

Bonjour,

Pas tout compris ...

List , c'est quoi ? un tableau (array), une ListBox , ... ??

On peut mettre les chemins dans des variables mais, pas sûr qu'on puisse mettre ces variables dans List.

Par contre on peut mettre directement les chemins dans List. Pour le faire, ça dépend de ce qu'est List ...

A+

Bonjour,

je sais que array fait office de tableau mais de base dans ma macro qui fonctionnait correctement j'avais list = Array(Var(1),Var(2).....) déjà rentré et je mettais les chemins directement dans mes variables, maintenant j'aimerai partir avec "list" qui est vide et qui se remplie automatiquement

Ps: Dim list as Variant

Ok donc List est un tableau qui contiendra tous les chemins.

solution rapide :

Dim List
With Worksheets("Dossier")
 List = .Range("A4:A" & .Range("A" & Rows.Count).End(xlUp).Row)
End With

solution on insère chaque élément :

Dim List, DerL As Long, i As Long
With Worksheets("Dossier")
 DerL = .Range("A" & Rows.Count).End(xlUp).Row
 ReDim List(1 To DerL - 3)
 For i = 4 To DerL
    List(i - 3) = .Range("A4" & i).Value
 Next
End With

edit:

Pour lire le contenu du tableau List, on peut utiliser

For i = LBound(List) to UBound(List)
      MsgBox List(i) 'pour la solution par élément
                    'OU
      MsgBox List(i , 1) 'pour la solution directe (rapide)
Next
With Worksheets("Dossier")
 DerL = .Range("A" & Rows.Count).End(xlUp).Row
 ReDim list(1 To DerL - 3)
 For A = 4 To DerL
    list(A - 3) = .Range("A4" & A).Value
 Next
End With
Sheets("Feuil1").Activate

list2 = Array(0, 2, 3, 6, 7, 8, 20, 21, 22)
list3 = Array(2, 3, 4, 7, 8, 9, 11, 12, 13)
Item = InputBox("item")
'================================================================================================
'''''''''''''''''''''alimentation des données''''''''''''''''''''''''''''''''''''''''
ReDim tdata(UBound(list), UBound(list2))
For i = LBound(list) To UBound(list)
    With Workbooks.Open(list(i), 0)
        With .Sheets(1)
            Set x = .Columns(1).Find(Item, , xlValues, xlWhole)
            For J = LBound(list2) To UBound(list2)
                tdata(i, J) = .Cells(x.Row, x.Column + list2(J))
            Next J
        End With
        .Close True
    End With
Next i

Merci beaucoup ça fonctionne mais pour la suite de ma macro ça fct plus à la ligne "With Workbooks.open(list(i),0)" ça me met "désolé ne nous le trouvons pas, peut être l'avez vous déplacé, supprimé..."

Bonjour Dignis,

Que vaut ''list(i)" lors de l'erreur ?

Bonjour,

list(i)=vide

Voilà l'erreur , "Derl" va peut être trop loin et pointe sur une cellule vide ou une cellule avec un espace.

Pour s'assurer qu'il y a bien une présence de texte dans la cellule je ferais comme ceci:

 x = 1
 For A = 4 To DerL
    If Len(.Range("A4" & A)) > 0 Then
        ReDim Preserve List(1 To x)
        List(x) = .Range("A4" & A).Value
        x = x + 1
    End If
 Next A
With Worksheets("Dossier")
    W = 1
 For A = 4 To DerL
    If Len(.Range("A4" & A)) > 0 Then
        ReDim Preserve List(1 To W)
        List(W) = .Range("A4" & A).Value
        W = W + 1
    End If
 Next A
 End With

list2 = Array(0, 2, 3, 6, 7, 8, 20, 21, 22)
list3 = Array(2, 3, 4, 7, 8, 9, 11, 12, 13)
Item = InputBox("item")
'================================================================================================
'''''''''''''''''''''alimentation des données''''''''''''''''''''''''''''''''''''''''
ReDim tdata(UBound(List), UBound(list2))
For i = LBound(List) To UBound(List)
    With Workbooks.Open(List(i), 0)
        With .Sheets(1)
            Set x = .Columns(1).Find(Item, , xlValues, xlWhole)
            For J = LBound(list2) To UBound(list2)
                tdata(i, J) = .Cells(x.Row, x.Column + list2(J))
            Next J
        End With
        .Close True
    End With
Next i

j'ai rentré ça et il y a apparemment "incompatibilité de type" sur la ligne de Redim tdata

ReDim tdata(UBound(List,1), UBound(list2))
For i = LBound(List,1) To UBound(List,1)
    With Workbooks.Open(List(i), 0)
        With .Sheets(1)
            Set x = .Columns(1).Find(Item, , xlValues, xlWhole)
            For J = LBound(list2) To UBound(list2)
                tdata(i, J) = .Cells(x.Row, x.Column + list2(J))
            Next J
        End With
        .Close True
    End With
Next i

désolé ça me met la même chose..

Je viens de ré editer mon dernier message, j'avais fais une erreur à cette ligne :

With Workbooks.Open(List(i), 0)

Mais de mon coté ça à l'air de fonctionner, mais je vous avouerai qu'il est beaucoup plus agréable de travailler avec un fichier pour faire des essais, que de devoir en créer un fictif pour effectuer vos essais.

Ca ne fonctionne toujours pas, j'ai l'impression que la list est vide ou qu'elle est pas du même type que list2 et list3 et je comprends.. mais le problème c'est ce sont des chemins d'accès qui y sont inséré vous ne pourrez pas le faire fonctionner si vous n'avez pas les fichiers à copier je pense.. vraiment désolé

Ce n'est pas grave vous pouvez quand même le partager, pour voir comment son alimenter les tableaux.

Bonjour à tous,

Il était question d'une condition sur l'énoncé du sujet. Je pense que cette condition doit être l'existence du fichier :

dim tpath() as string
With Worksheets("Dossier")
    dl = .cells(.rows.count, 1).end(xlup).row
    For i = 4 To dl
        If dir(.cells(i, 1).value) <> "" Then
            ReDim Preserve tpath(w)
            tpath(w) = .cells(i, 1).Value
            w = w + 1
        End If
    Next i
End With

if w = 0 then msgbox "aucun fichier existant repertorié", 16: exit sub

list2 = Array(0, 2, 3, 6, 7, 8, 20, 21, 22)
list3 = Array(2, 3, 4, 7, 8, 9, 11, 12, 13)
Item = InputBox("item")
'================================================================================================
'''''''''''''''''''''alimentation des données''''''''''''''''''''''''''''''''''''''''
ReDim tdata(UBound(tpath), UBound(list2))
For i = LBound(tpath) To UBound(tpath)
    With Workbooks.Open(tpath(i), 0)
        With .Sheets(1)
            Set x = .Columns(1).Find(Item, , xlValues, xlWhole)
            For J = LBound(list2) To UBound(list2)
                tdata(i, J) = .Cells(x.Row, x.Column + list2(J))
            Next J
        End With
        .Close True
    End With
Next i

J'ai changé de nom car List est une propriété pour certains objets. Cela pourrait occasionner une erreur de compilation. D'ailleurs, si possible, il faut essayer de donner aux variables des noms désignant le contenu (ici des chemins).

Sinon, j'ai remis tpath en base 0 car tous les tableaux étaient en base 0 dans le code.

Cdlt,

Polala merci beaucoup,3GB je t'avais envoyé un message privé j'en suis navré, j'étais sur que tu serais le plus apte à répondre étant donné que tu vais écrite les lignes d'après merci mille fois et merci aux autre d'avoir pris le temps de m'aider!

Rechercher des sujets similaires à "remplir list array automatiquement"