Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Tableau(Array)

16 réponses
Avatar
ABED HADDOU
Bonjour tout le monde
je débute avec les tableaux, j'utilise le code suivant, parcourir la colone
A et trouvé l'occurrence de la chaîne de caractère "D1405"
s'il éxiste obtenir la valeur de la cellule à côté C et D et mêtre ces deux
valeurs dans un tableau pour les affichées après.
Alors dans la colonne A si la valeur cherché existe une fois le code
fonctionne normal pas d'erreur
s'il ya des doublons l'erreur n°9 se déclanche un message apparaît disant
que l'indice n'appartient pas à la selection.
ou est l'erreur quelqu'un pourait il m'aider ? de faire des correction dans
mon code et m'indiqué ou se trouve l'erreur.
Merci par d'avance.

Abed_H

Sub test()
Dim Tablo() As String
i = 1
For Each c In Range("A1:A20")
If c.Value = "D1405" Then
For j = 1 To 3
ReDim Preserve Tablo(i, j)
Tablo(i, j) = c.Offset(, j)
Next j
i = i + 1
End If
Next c
Range("h5").Resize(i, j).Value = Tablo
End Sub

10 réponses

1 2
Avatar
JB
Bonjour,

Pourquoi un tableau?

i = 0
x = "D1405"
For Each c In [a1:a20]
If c = x Then
[h5].Offset(i, 0) = x
[h5].Offset(i, 1) = c.Offset(0, 2)
[h5].Offset(i, 2) = c.Offset(0, 3)
i = i + 1
End If
Next c

(ou Filtre élaboré si'il y a des noms de colonnes)

Cordialement JB


Bonjour tout le monde
je débute avec les tableaux, j'utilise le code suivant, parcourir la co lone
A et trouvé l'occurrence de la chaîne de caractère "D1405"
s'il éxiste obtenir la valeur de la cellule à côté C et D et m être ces deux
valeurs dans un tableau pour les affichées après.
Alors dans la colonne A si la valeur cherché existe une fois le code
fonctionne normal pas d'erreur
s'il ya des doublons l'erreur n°9 se déclanche un message apparaît disant
que l'indice n'appartient pas à la selection.
ou est l'erreur quelqu'un pourait il m'aider ? de faire des correction da ns
mon code et m'indiqué ou se trouve l'erreur.
Merci par d'avance.

Abed_H

Sub test()
Dim Tablo() As String
i = 1
For Each c In Range("A1:A20")
If c.Value = "D1405" Then
For j = 1 To 3
ReDim Preserve Tablo(i, j)
Tablo(i, j) = c.Offset(, j)
Next j
i = i + 1
End If
Next c
Range("h5").Resize(i, j).Value = Tablo
End Sub


Avatar
ABED HADDOU
Bonjour Monsieur JB

merci pour ta réponse, mais je voulais utilisé les tableaux, uniquement pour
comprendre leurs fonctionnement puiseque j'ai dis je débute avec les
tableaux.
svp Monsieur JB une autre exemple dans le même concept qui utilise un tableau
merci beaucoup.

Abed_H





Bonjour,

Pourquoi un tableau?

i = 0
x = "D1405"
For Each c In [a1:a20]
If c = x Then
[h5].Offset(i, 0) = x
[h5].Offset(i, 1) = c.Offset(0, 2)
[h5].Offset(i, 2) = c.Offset(0, 3)
i = i + 1
End If
Next c

(ou Filtre élaboré si'il y a des noms de colonnes)

Cordialement JB


Bonjour tout le monde
je débute avec les tableaux, j'utilise le code suivant, parcourir la colone
A et trouvé l'occurrence de la chaîne de caractère "D1405"
s'il éxiste obtenir la valeur de la cellule à côté C et D et mêtre ces deux
valeurs dans un tableau pour les affichées après.
Alors dans la colonne A si la valeur cherché existe une fois le code
fonctionne normal pas d'erreur
s'il ya des doublons l'erreur n°9 se déclanche un message apparaît disant
que l'indice n'appartient pas à la selection.
ou est l'erreur quelqu'un pourait il m'aider ? de faire des correction dans
mon code et m'indiqué ou se trouve l'erreur.
Merci par d'avance.

Abed_H

Sub test()
Dim Tablo() As String
i = 1
For Each c In Range("A1:A20")
If c.Value = "D1405" Then
For j = 1 To 3
ReDim Preserve Tablo(i, j)
Tablo(i, j) = c.Offset(, j)
Next j
i = i + 1
End If
Next c
Range("h5").Resize(i, j).Value = Tablo
End Sub






Avatar
JLuc
Bonjour tout le monde
je débute avec les tableaux, j'utilise le code suivant, parcourir la colone
A et trouvé l'occurrence de la chaîne de caractère "D1405"
s'il éxiste obtenir la valeur de la cellule à côté C et D et mêtre ces deux
valeurs dans un tableau pour les affichées après.
Alors dans la colonne A si la valeur cherché existe une fois le code
fonctionne normal pas d'erreur
s'il ya des doublons l'erreur n°9 se déclanche un message apparaît disant
que l'indice n'appartient pas à la selection.
ou est l'erreur quelqu'un pourait il m'aider ? de faire des correction dans
mon code et m'indiqué ou se trouve l'erreur.
Merci par d'avance.

Abed_H

Sub test()
Dim Tablo() As String
i = 1
For Each c In Range("A1:A20")
If c.Value = "D1405" Then
For j = 1 To 3
ReDim Preserve Tablo(i, j)
Tablo(i, j) = c.Offset(, j)
Next j
i = i + 1
End If
Next c
Range("h5").Resize(i, j).Value = Tablo
End Sub


Ton probleme se reduit à une seule chose : on ne peut redimentionner
que la premiere dimention d'un tableau ;-)

Dim Tablo(1, 3)
i=1
For Each c In Range("A1:A20")
If c.Value = "D1405" Then
ReDim Preserve Tablo(i, 3)
For j = 1 To 3
Tablo(i, j) = c.Offset(, j)
Next j
i = i + 1
End If
Next c

Ceci devrait convenir, pas tester

--
JLuc

Avatar
ABED HADDOU
Bonjour JLuc
j'ai testé ton code mais quand il ya des doublons dans la colonne A c'est à
dire deux fois "D1405" l'erreur 9 se déclenche disant que l'indice
n'apartient pas à la selèction.merci si tu me donné un autre code pour bien
comprendre le fonctionnement des tableaux.
Bonne journnée

Abed_H



Bonjour tout le monde
je débute avec les tableaux, j'utilise le code suivant, parcourir la colone
A et trouvé l'occurrence de la chaîne de caractère "D1405"
s'il éxiste obtenir la valeur de la cellule à côté C et D et mêtre ces deux
valeurs dans un tableau pour les affichées après.
Alors dans la colonne A si la valeur cherché existe une fois le code
fonctionne normal pas d'erreur
s'il ya des doublons l'erreur n°9 se déclanche un message apparaît disant
que l'indice n'appartient pas à la selection.
ou est l'erreur quelqu'un pourait il m'aider ? de faire des correction dans
mon code et m'indiqué ou se trouve l'erreur.
Merci par d'avance.

Abed_H

Sub test()
Dim Tablo() As String
i = 1
For Each c In Range("A1:A20")
If c.Value = "D1405" Then
For j = 1 To 3
ReDim Preserve Tablo(i, j)
Tablo(i, j) = c.Offset(, j)
Next j
i = i + 1
End If
Next c
Range("h5").Resize(i, j).Value = Tablo
End Sub


Ton probleme se reduit à une seule chose : on ne peut redimentionner
que la premiere dimention d'un tableau ;-)

Dim Tablo(1, 3)
i=1
For Each c In Range("A1:A20")
If c.Value = "D1405" Then
ReDim Preserve Tablo(i, 3)
For j = 1 To 3
Tablo(i, j) = c.Offset(, j)
Next j
i = i + 1
End If
Next c

Ceci devrait convenir, pas tester

--
JLuc






Avatar
anonymousA
Bonjour,

il me semble qu'il y a une confusion
Ton probleme se reduit à une seule chose : on ne peut redimentionner
que la premiere dimention d'un tableau ;-)


En effet, ci-dessous, un extrait de l'aide d'Excel sur Redim
Si vous utilisez le mot clé Preserve, vous ne pouvez redimensionner
que la dernière dimension du tableau. Vous ne pouvez en aucun cas
modifier le nombre de dimensions.


Par ailleurs, l'exemple suivant permet de se rendre compte de ce qu'on
peut fair ou pas

1) sans le mot clé Preserve , on peut tout faire y.c changer les
limites de toutes les dimensions. Si on exécute le code suivant , VBA
ne plantera pas

Dim MyArray() As Integer

ReDim MyArray(10, 20)
ReDim MyArray(10, 15)
ReDim MyArray(15, 15)

2) avec le mot clé Preserve , on peut tout faire y.c changer les
limites de toutes les dimensions. Si on exécute le code suivant , VBA
plantera sur la dernière ligne car on tente de changer la limite de
la 1ere dimension ( donc pas la dernière) ce qui est interdit

Dim MyArray() As Integer

ReDim Preserve MyArray(10, 20)
ReDim Preserve MyArray(10, 15)
ReDim Preserve MyArray(15, 15)

A+

JLuc wrote:
Bonjour tout le monde
je débute avec les tableaux, j'utilise le code suivant, parcourir la colone
A et trouvé l'occurrence de la chaîne de caractère "D1405"
s'il éxiste obtenir la valeur de la cellule à côté C et D et m être ces deux
valeurs dans un tableau pour les affichées après.
Alors dans la colonne A si la valeur cherché existe une fois le code
fonctionne normal pas d'erreur
s'il ya des doublons l'erreur n°9 se déclanche un message apparaî t disant
que l'indice n'appartient pas à la selection.
ou est l'erreur quelqu'un pourait il m'aider ? de faire des correction dans
mon code et m'indiqué ou se trouve l'erreur.
Merci par d'avance.

Abed_H

Sub test()
Dim Tablo() As String
i = 1
For Each c In Range("A1:A20")
If c.Value = "D1405" Then
For j = 1 To 3
ReDim Preserve Tablo(i, j)
Tablo(i, j) = c.Offset(, j)
Next j
i = i + 1
End If
Next c
Range("h5").Resize(i, j).Value = Tablo
End Sub


Ton probleme se reduit à une seule chose : on ne peut redimentionner
que la premiere dimention d'un tableau ;-)

Dim Tablo(1, 3)
i=1
For Each c In Range("A1:A20")
If c.Value = "D1405" Then
ReDim Preserve Tablo(i, 3)
For j = 1 To 3
Tablo(i, j) = c.Offset(, j)
Next j
i = i + 1
End If
Next c

Ceci devrait convenir, pas tester

--
JLuc



Avatar
ABED HADDOU
Bonjour anonymousA

si j'utilse le mot clé ReDim sans Preserve j'obtient uniquement la dernière
occurrence du mot cherché.
comment faire pour obtenir les n occurnce du mot cherché et les affichées ?
merci par d'avance
Bonne journée.

Abed_H


Bonjour,

il me semble qu'il y a une confusion
Ton probleme se reduit à une seule chose : on ne peut redimentionner
que la premiere dimention d'un tableau ;-)


En effet, ci-dessous, un extrait de l'aide d'Excel sur Redim
Si vous utilisez le mot clé Preserve, vous ne pouvez redimensionner
que la dernière dimension du tableau. Vous ne pouvez en aucun cas
modifier le nombre de dimensions.


Par ailleurs, l'exemple suivant permet de se rendre compte de ce qu'on
peut fair ou pas

1) sans le mot clé Preserve , on peut tout faire y.c changer les
limites de toutes les dimensions. Si on exécute le code suivant , VBA
ne plantera pas

Dim MyArray() As Integer

ReDim MyArray(10, 20)
ReDim MyArray(10, 15)
ReDim MyArray(15, 15)

2) avec le mot clé Preserve , on peut tout faire y.c changer les
limites de toutes les dimensions. Si on exécute le code suivant , VBA
plantera sur la dernière ligne car on tente de changer la limite de
la 1ere dimension ( donc pas la dernière) ce qui est interdit

Dim MyArray() As Integer

ReDim Preserve MyArray(10, 20)
ReDim Preserve MyArray(10, 15)
ReDim Preserve MyArray(15, 15)

A+

JLuc wrote:
Bonjour tout le monde
je débute avec les tableaux, j'utilise le code suivant, parcourir la colone
A et trouvé l'occurrence de la chaîne de caractère "D1405"
s'il éxiste obtenir la valeur de la cellule à côté C et D et mêtre ces deux
valeurs dans un tableau pour les affichées après.
Alors dans la colonne A si la valeur cherché existe une fois le code
fonctionne normal pas d'erreur
s'il ya des doublons l'erreur n°9 se déclanche un message apparaît disant
que l'indice n'appartient pas à la selection.
ou est l'erreur quelqu'un pourait il m'aider ? de faire des correction dans
mon code et m'indiqué ou se trouve l'erreur.
Merci par d'avance.

Abed_H

Sub test()
Dim Tablo() As String
i = 1
For Each c In Range("A1:A20")
If c.Value = "D1405" Then
For j = 1 To 3
ReDim Preserve Tablo(i, j)
Tablo(i, j) = c.Offset(, j)
Next j
i = i + 1
End If
Next c
Range("h5").Resize(i, j).Value = Tablo
End Sub


Ton probleme se reduit à une seule chose : on ne peut redimentionner
que la premiere dimention d'un tableau ;-)

Dim Tablo(1, 3)
i=1
For Each c In Range("A1:A20")
If c.Value = "D1405" Then
ReDim Preserve Tablo(i, 3)
For j = 1 To 3
Tablo(i, j) = c.Offset(, j)
Next j
i = i + 1
End If
Next c

Ceci devrait convenir, pas tester

--
JLuc







Avatar
JLuc
Autant pour moi, anonymousA a raison :/ j'ai peut etre repondu un peu
vite.
Voila ce que, moi, j'utiliserais :

Dim Tablo()
nb = 0
For Each c In Range("A1:A20")
' peut etre remplacer par un countif
' plus interessant si la plage est grande :oÞ
If c.Value = "D1405" Then
nb = nb + 1
End If
Next
If nb > 0 Then
Redim Tablo(1 To nb, 1 To 3)
i = 1
For Each c In Range("A1:A20")
If c.Value = "D1405" Then
For j = 1 To 3
Tablo(i, j) = c.Offset(, j)
Next j
i = i + 1
End If
Next c
End If

Bonjour anonymousA

si j'utilse le mot clé ReDim sans Preserve j'obtient uniquement la dernière
occurrence du mot cherché.
comment faire pour obtenir les n occurnce du mot cherché et les affichées ?
merci par d'avance
Bonne journée.

Abed_H


Bonjour,

il me semble qu'il y a une confusion
Ton probleme se reduit à une seule chose : on ne peut redimentionner
que la premiere dimention d'un tableau ;-)


En effet, ci-dessous, un extrait de l'aide d'Excel sur Redim
Si vous utilisez le mot clé Preserve, vous ne pouvez redimensionner
que la dernière dimension du tableau. Vous ne pouvez en aucun cas
modifier le nombre de dimensions.


Par ailleurs, l'exemple suivant permet de se rendre compte de ce qu'on
peut fair ou pas

1) sans le mot clé Preserve , on peut tout faire y.c changer les
limites de toutes les dimensions. Si on exécute le code suivant , VBA
ne plantera pas

Dim MyArray() As Integer

ReDim MyArray(10, 20)
ReDim MyArray(10, 15)
ReDim MyArray(15, 15)

2) avec le mot clé Preserve , on peut tout faire y.c changer les
limites de toutes les dimensions. Si on exécute le code suivant , VBA
plantera sur la dernière ligne car on tente de changer la limite de
la 1ere dimension ( donc pas la dernière) ce qui est interdit

Dim MyArray() As Integer

ReDim Preserve MyArray(10, 20)
ReDim Preserve MyArray(10, 15)
ReDim Preserve MyArray(15, 15)

A+

JLuc wrote:
Bonjour tout le monde
je débute avec les tableaux, j'utilise le code suivant, parcourir la
colone A et trouvé l'occurrence de la chaîne de caractère "D1405"
s'il éxiste obtenir la valeur de la cellule à côté C et D et mêtre ces
deux valeurs dans un tableau pour les affichées après.
Alors dans la colonne A si la valeur cherché existe une fois le code
fonctionne normal pas d'erreur
s'il ya des doublons l'erreur n°9 se déclanche un message apparaît disant
que l'indice n'appartient pas à la selection.
ou est l'erreur quelqu'un pourait il m'aider ? de faire des correction
dans mon code et m'indiqué ou se trouve l'erreur.
Merci par d'avance.

Abed_H

Sub test()
Dim Tablo() As String
i = 1
For Each c In Range("A1:A20")
If c.Value = "D1405" Then
For j = 1 To 3
ReDim Preserve Tablo(i, j)
Tablo(i, j) = c.Offset(, j)
Next j
i = i + 1
End If
Next c
Range("h5").Resize(i, j).Value = Tablo
End Sub


Ton probleme se reduit à une seule chose : on ne peut redimentionner
que la premiere dimention d'un tableau ;-)

Dim Tablo(1, 3)
i=1
For Each c In Range("A1:A20")
If c.Value = "D1405" Then
ReDim Preserve Tablo(i, 3)
For j = 1 To 3
Tablo(i, j) = c.Offset(, j)
Next j
i = i + 1
End If
Next c

Ceci devrait convenir, pas tester

--
JLuc







--
JLuc




Avatar
ABED HADDOU
Re,Bonjour
ton code renvoi uniquement la première occurrence de la valeur cherchée
voi ça http://cjoint.com/?hult1oysNY

merci pour ton aide et bonne journée

Abed_H



Autant pour moi, anonymousA a raison :/ j'ai peut etre repondu un peu
vite.
Voila ce que, moi, j'utiliserais :

Dim Tablo()
nb = 0
For Each c In Range("A1:A20")
' peut etre remplacer par un countif
' plus interessant si la plage est grande :oÞ
If c.Value = "D1405" Then
nb = nb + 1
End If
Next
If nb > 0 Then
Redim Tablo(1 To nb, 1 To 3)
i = 1
For Each c In Range("A1:A20")
If c.Value = "D1405" Then
For j = 1 To 3
Tablo(i, j) = c.Offset(, j)
Next j
i = i + 1
End If
Next c
End If

Bonjour anonymousA

si j'utilse le mot clé ReDim sans Preserve j'obtient uniquement la dernière
occurrence du mot cherché.
comment faire pour obtenir les n occurnce du mot cherché et les affichées ?
merci par d'avance
Bonne journée.

Abed_H


Bonjour,

il me semble qu'il y a une confusion
Ton probleme se reduit à une seule chose : on ne peut redimentionner
que la premiere dimention d'un tableau ;-)


En effet, ci-dessous, un extrait de l'aide d'Excel sur Redim
Si vous utilisez le mot clé Preserve, vous ne pouvez redimensionner
que la dernière dimension du tableau. Vous ne pouvez en aucun cas
modifier le nombre de dimensions.


Par ailleurs, l'exemple suivant permet de se rendre compte de ce qu'on
peut fair ou pas

1) sans le mot clé Preserve , on peut tout faire y.c changer les
limites de toutes les dimensions. Si on exécute le code suivant , VBA
ne plantera pas

Dim MyArray() As Integer

ReDim MyArray(10, 20)
ReDim MyArray(10, 15)
ReDim MyArray(15, 15)

2) avec le mot clé Preserve , on peut tout faire y.c changer les
limites de toutes les dimensions. Si on exécute le code suivant , VBA
plantera sur la dernière ligne car on tente de changer la limite de
la 1ere dimension ( donc pas la dernière) ce qui est interdit

Dim MyArray() As Integer

ReDim Preserve MyArray(10, 20)
ReDim Preserve MyArray(10, 15)
ReDim Preserve MyArray(15, 15)

A+

JLuc wrote:
Bonjour tout le monde
je débute avec les tableaux, j'utilise le code suivant, parcourir la
colone A et trouvé l'occurrence de la chaîne de caractère "D1405"
s'il éxiste obtenir la valeur de la cellule à côté C et D et mêtre ces
deux valeurs dans un tableau pour les affichées après.
Alors dans la colonne A si la valeur cherché existe une fois le code
fonctionne normal pas d'erreur
s'il ya des doublons l'erreur n°9 se déclanche un message apparaît disant
que l'indice n'appartient pas à la selection.
ou est l'erreur quelqu'un pourait il m'aider ? de faire des correction
dans mon code et m'indiqué ou se trouve l'erreur.
Merci par d'avance.

Abed_H

Sub test()
Dim Tablo() As String
i = 1
For Each c In Range("A1:A20")
If c.Value = "D1405" Then
For j = 1 To 3
ReDim Preserve Tablo(i, j)
Tablo(i, j) = c.Offset(, j)
Next j
i = i + 1
End If
Next c
Range("h5").Resize(i, j).Value = Tablo
End Sub


Ton probleme se reduit à une seule chose : on ne peut redimentionner
que la premiere dimention d'un tableau ;-)

Dim Tablo(1, 3)
i=1
For Each c In Range("A1:A20")
If c.Value = "D1405" Then
ReDim Preserve Tablo(i, 3)
For j = 1 To 3
Tablo(i, j) = c.Offset(, j)
Next j
i = i + 1
End If
Next c

Ceci devrait convenir, pas tester

--
JLuc







--
JLuc









Avatar
JLuc
Tu as oublier de modifier le range de la 2eme boucle... :')
Sinon, ca marche

Re,Bonjour
ton code renvoi uniquement la première occurrence de la valeur cherchée
voi ça http://cjoint.com/?hult1oysNY

merci pour ton aide et bonne journée

Abed_H



Autant pour moi, anonymousA a raison :/ j'ai peut etre repondu un peu
vite.
Voila ce que, moi, j'utiliserais :

Dim Tablo()
nb = 0
For Each c In Range("A1:A20")
' peut etre remplacer par un countif
' plus interessant si la plage est grande :oÞ
If c.Value = "D1405" Then
nb = nb + 1
End If
Next
If nb > 0 Then
Redim Tablo(1 To nb, 1 To 3)
i = 1
For Each c In Range("A1:A20")
If c.Value = "D1405" Then
For j = 1 To 3
Tablo(i, j) = c.Offset(, j)
Next j
i = i + 1
End If
Next c
End If

Bonjour anonymousA

si j'utilse le mot clé ReDim sans Preserve j'obtient uniquement la dernière
occurrence du mot cherché.
comment faire pour obtenir les n occurnce du mot cherché et les affichées ?
merci par d'avance
Bonne journée.

Abed_H


Bonjour,

il me semble qu'il y a une confusion
Ton probleme se reduit à une seule chose : on ne peut redimentionner
que la premiere dimention d'un tableau ;-)


En effet, ci-dessous, un extrait de l'aide d'Excel sur Redim
Si vous utilisez le mot clé Preserve, vous ne pouvez redimensionner
que la dernière dimension du tableau. Vous ne pouvez en aucun cas
modifier le nombre de dimensions.


Par ailleurs, l'exemple suivant permet de se rendre compte de ce qu'on
peut fair ou pas

1) sans le mot clé Preserve , on peut tout faire y.c changer les
limites de toutes les dimensions. Si on exécute le code suivant , VBA
ne plantera pas

Dim MyArray() As Integer

ReDim MyArray(10, 20)
ReDim MyArray(10, 15)
ReDim MyArray(15, 15)

2) avec le mot clé Preserve , on peut tout faire y.c changer les
limites de toutes les dimensions. Si on exécute le code suivant , VBA
plantera sur la dernière ligne car on tente de changer la limite de
la 1ere dimension ( donc pas la dernière) ce qui est interdit

Dim MyArray() As Integer

ReDim Preserve MyArray(10, 20)
ReDim Preserve MyArray(10, 15)
ReDim Preserve MyArray(15, 15)

A+

JLuc wrote:
Bonjour tout le monde
je débute avec les tableaux, j'utilise le code suivant, parcourir la
colone A et trouvé l'occurrence de la chaîne de caractère "D1405"
s'il éxiste obtenir la valeur de la cellule à côté C et D et mêtre ces
deux valeurs dans un tableau pour les affichées après.
Alors dans la colonne A si la valeur cherché existe une fois le code
fonctionne normal pas d'erreur
s'il ya des doublons l'erreur n°9 se déclanche un message apparaît
disant que l'indice n'appartient pas à la selection.
ou est l'erreur quelqu'un pourait il m'aider ? de faire des correction
dans mon code et m'indiqué ou se trouve l'erreur.
Merci par d'avance.

Abed_H

Sub test()
Dim Tablo() As String
i = 1
For Each c In Range("A1:A20")
If c.Value = "D1405" Then
For j = 1 To 3
ReDim Preserve Tablo(i, j)
Tablo(i, j) = c.Offset(, j)
Next j
i = i + 1
End If
Next c
Range("h5").Resize(i, j).Value = Tablo
End Sub


Ton probleme se reduit à une seule chose : on ne peut redimentionner
que la premiere dimention d'un tableau ;-)

Dim Tablo(1, 3)
i=1
For Each c In Range("A1:A20")
If c.Value = "D1405" Then
ReDim Preserve Tablo(i, 3)
For j = 1 To 3
Tablo(i, j) = c.Offset(, j)
Next j
i = i + 1
End If
Next c

Ceci devrait convenir, pas tester

--
JLuc







--
JLuc







--
JLuc






Avatar
anonymousA
Bonjour,

Pas forcément l'exercice le + complet sur les tableaux mais ca résoud
ce que tu essayes de faire

Sub test()

Dim Tablo() As String

I = 0
For Each c In Range("A1:A20")
If c.Value = "D1405" Then I = I + 1
Next

ReDim Tablo(I - 1, 3)

I = 0

For Each c In Range("A1:A20")
If c.Value = "D1405" Then
For J = 1 To 3
Tablo(I, J) = c.Offset(, J)
Next
I = I + 1
End If
Next c

Range("H5").Resize(I, J).Value = Tablo

End Sub

A+

ABED HADDOU wrote:
Re,Bonjour
ton code renvoi uniquement la première occurrence de la valeur cherch ée
voi ça http://cjoint.com/?hult1oysNY

merci pour ton aide et bonne journée

Abed_H



Autant pour moi, anonymousA a raison :/ j'ai peut etre repondu un peu
vite.
Voila ce que, moi, j'utiliserais :

Dim Tablo()
nb = 0
For Each c In Range("A1:A20")
' peut etre remplacer par un countif
' plus interessant si la plage est grande :oÞ
If c.Value = "D1405" Then
nb = nb + 1
End If
Next
If nb > 0 Then
Redim Tablo(1 To nb, 1 To 3)
i = 1
For Each c In Range("A1:A20")
If c.Value = "D1405" Then
For j = 1 To 3
Tablo(i, j) = c.Offset(, j)
Next j
i = i + 1
End If
Next c
End If

Bonjour anonymousA

si j'utilse le mot clé ReDim sans Preserve j'obtient uniquement la dernière
occurrence du mot cherché.
comment faire pour obtenir les n occurnce du mot cherché et les aff ichées ?
merci par d'avance
Bonne journée.

Abed_H


Bonjour,

il me semble qu'il y a une confusion
Ton probleme se reduit à une seule chose : on ne peut redimention ner
que la premiere dimention d'un tableau ;-)


En effet, ci-dessous, un extrait de l'aide d'Excel sur Redim
Si vous utilisez le mot clé Preserve, vous ne pouvez redimensionner
que la dernière dimension du tableau. Vous ne pouvez en aucun cas
modifier le nombre de dimensions.


Par ailleurs, l'exemple suivant permet de se rendre compte de ce qu' on
peut fair ou pas

1) sans le mot clé Preserve , on peut tout faire y.c changer les
limites de toutes les dimensions. Si on exécute le code suivant , VBA
ne plantera pas

Dim MyArray() As Integer

ReDim MyArray(10, 20)
ReDim MyArray(10, 15)
ReDim MyArray(15, 15)

2) avec le mot clé Preserve , on peut tout faire y.c changer les
limites de toutes les dimensions. Si on exécute le code suivant , VBA
plantera sur la dernière ligne car on tente de changer la limite de
la 1ere dimension ( donc pas la dernière) ce qui est interdit

Dim MyArray() As Integer

ReDim Preserve MyArray(10, 20)
ReDim Preserve MyArray(10, 15)
ReDim Preserve MyArray(15, 15)

A+

JLuc wrote:
Bonjour tout le monde
je débute avec les tableaux, j'utilise le code suivant, parcouri r la
colone A et trouvé l'occurrence de la chaîne de caractère "D1405"
s'il éxiste obtenir la valeur de la cellule à côté C et D et mêtre ces
deux valeurs dans un tableau pour les affichées après.
Alors dans la colonne A si la valeur cherché existe une fois le code
fonctionne normal pas d'erreur
s'il ya des doublons l'erreur n°9 se déclanche un message appa raît disant
que l'indice n'appartient pas à la selection.
ou est l'erreur quelqu'un pourait il m'aider ? de faire des correc tion
dans mon code et m'indiqué ou se trouve l'erreur.
Merci par d'avance.

Abed_H

Sub test()
Dim Tablo() As String
i = 1
For Each c In Range("A1:A20")
If c.Value = "D1405" Then
For j = 1 To 3
ReDim Preserve Tablo(i, j)
Tablo(i, j) = c.Offset(, j)
Next j
i = i + 1
End If
Next c
Range("h5").Resize(i, j).Value = Tablo
End Sub


Ton probleme se reduit à une seule chose : on ne peut redimention ner
que la premiere dimention d'un tableau ;-)

Dim Tablo(1, 3)
i=1
For Each c In Range("A1:A20")
If c.Value = "D1405" Then
ReDim Preserve Tablo(i, 3)
For j = 1 To 3
Tablo(i, j) = c.Offset(, j)
Next j
i = i + 1
End If
Next c

Ceci devrait convenir, pas tester

--
JLuc







--
JLuc











1 2