OVH Cloud OVH Cloud

Recopier une matrice dans une autre

15 réponses
Avatar
Daniel
Bonjour.
Pouvez-vous me dire comment recopier le tableau "tablo1" dans le tableau
d'origine ?

Sub test()
Dim tablo()
ReDim tablo(8)
tablo(0) = "toto"
tablo(1) = "uoup"
tablo(2) = "toto"
tablo(3) = "tata"
tablo(4) = "azer"
tablo(5) = "zzzz"
tablo(6) = "toto"
tablo(7) = "toto"
tablo(8) = "toto"
tablo1 = Filter(tablo, "toto", False)
tablo = tablo1
End Sub

La ligne "tablo = tablo1" renvoie l'erreur "Incompatibilité de type".
J'ai essayé de redimensionner "tablo" sans changer l'erreur.
Merci d'avance.
Daniel

10 réponses

1 2
Avatar
Garette
Bonjour,

Je ne sais pas s'il y a mieux mais ceci fonctionne :

Sub test()
Dim tablo()
ReDim tablo(8)
tablo(0) = "toto"
tablo(1) = "uoup"
tablo(2) = "toto"
tablo(3) = "tata"
tablo(4) = "azer"
tablo(5) = "zzzz"
tablo(6) = "toto"
tablo(7) = "toto"
tablo(8) = "toto"
tablo1 = Filter(tablo, "toto", False)

ReDim tablo(UBound(tablo1, 1) + 1)
For i = 0 To UBound(tablo1, 1)
tablo(i) = tablo1(i)
Next
End Sub
Avatar
Garette
Re,
Ouups ..

Il fait remplacer ReDim tablo(UBound(tablo1, 1) + 1) par ReDim
tablo(UBound(tablo1, 1))
Avatar
Daniel
Bonjour et merci pour ta solution.
Je me suis mal exprimé, je voulais savoir s'il était possible de recopier le
tableau en bloc, genre tablo=tablo1, ce qui fonctionne pour un nouveau
tableau (eg. tablo2=tablo1), mais pas pour le premier exemple (parce que le
tableau est dimensionné ?)
Daniel
"Garette" a écrit dans le message de news:

Bonjour,

Je ne sais pas s'il y a mieux mais ceci fonctionne :

Sub test()
Dim tablo()
ReDim tablo(8)
tablo(0) = "toto"
tablo(1) = "uoup"
tablo(2) = "toto"
tablo(3) = "tata"
tablo(4) = "azer"
tablo(5) = "zzzz"
tablo(6) = "toto"
tablo(7) = "toto"
tablo(8) = "toto"
tablo1 = Filter(tablo, "toto", False)

ReDim tablo(UBound(tablo1, 1) + 1)
For i = 0 To UBound(tablo1, 1)
tablo(i) = tablo1(i)
Next
End Sub




Avatar
MichDenis
Un petit exemple :

'---------------------------
Dim Tblo(), T()

ReDim Tblo(1 To 2)
Tblo(1) = "toto1"
Tblo(2) = "toto2"

ReDim T(1 To UBound(Tblo))
T = Tblo
'---------------------------


"Daniel" a écrit dans le message de news:

Bonjour et merci pour ta solution.
Je me suis mal exprimé, je voulais savoir s'il était possible de recopier le
tableau en bloc, genre tablo=tablo1, ce qui fonctionne pour un nouveau
tableau (eg. tablo2=tablo1), mais pas pour le premier exemple (parce que le
tableau est dimensionné ?)
Daniel
"Garette" a écrit dans le message de news:

Bonjour,

Je ne sais pas s'il y a mieux mais ceci fonctionne :

Sub test()
Dim tablo()
ReDim tablo(8)
tablo(0) = "toto"
tablo(1) = "uoup"
tablo(2) = "toto"
tablo(3) = "tata"
tablo(4) = "azer"
tablo(5) = "zzzz"
tablo(6) = "toto"
tablo(7) = "toto"
tablo(8) = "toto"
tablo1 = Filter(tablo, "toto", False)

ReDim tablo(UBound(tablo1, 1) + 1)
For i = 0 To UBound(tablo1, 1)
tablo(i) = tablo1(i)
Next
End Sub




Avatar
Daniel
Bonjour.
Mon code est presque semblable au tien. Les différences sont :
- Je travaille en base 0 (la commande "filter" envoie un tableau en base 0)
- Je ne peux pas déclarer T (plantage sur la commande "filter") :

Sub test()
Dim Tblo()

ReDim Tblo(0 To 1)
Tblo(0) = "toto1"
Tblo(1) = "toto2"

T = Filter(Tblo, "toto1", False)

ReDim Tblo(0 To UBound(T))
Tblo = T
End Sub

L'erreur "Incompatibilité de type se produit sur la ligne Tblo=T
Merci d'avance.
Daniel
"MichDenis" a écrit dans le message de news:
OPm%
Un petit exemple :

'---------------------------
Dim Tblo(), T()

ReDim Tblo(1 To 2)
Tblo(1) = "toto1"
Tblo(2) = "toto2"

ReDim T(1 To UBound(Tblo))
T = Tblo
'---------------------------


"Daniel" a écrit dans le message de news:

Bonjour et merci pour ta solution.
Je me suis mal exprimé, je voulais savoir s'il était possible de recopier
le
tableau en bloc, genre tablo=tablo1, ce qui fonctionne pour un nouveau
tableau (eg. tablo2=tablo1), mais pas pour le premier exemple (parce que
le
tableau est dimensionné ?)
Daniel
"Garette" a écrit dans le message de news:

Bonjour,

Je ne sais pas s'il y a mieux mais ceci fonctionne :

Sub test()
Dim tablo()
ReDim tablo(8)
tablo(0) = "toto"
tablo(1) = "uoup"
tablo(2) = "toto"
tablo(3) = "tata"
tablo(4) = "azer"
tablo(5) = "zzzz"
tablo(6) = "toto"
tablo(7) = "toto"
tablo(8) = "toto"
tablo1 = Filter(tablo, "toto", False)

ReDim tablo(UBound(tablo1, 1) + 1)
For i = 0 To UBound(tablo1, 1)
tablo(i) = tablo1(i)
Next
End Sub









Avatar
MichDenis
Tes 2 tableaux doivent être de même dimension avant de pouvoir
copier l'un vers l'autre

Si tu utilises cette ligne de code comme tu l'as fait dans ton code :
ReDim Tblo(0 To UBound(T))

Comme tu n'as pas utilisé le mot "Preserve", ton Tblo est vidé...
je ne comprends pas pourquoi tu passes des lignes de code
pour le remplir

Que contient ton tableau T ? Si c'est une plage de cellule, ton
tableau T à 2 dimensions et le tableau Tblo en a qu'une.

Que puis-je ajouter de plus ?


"Daniel" a écrit dans le message de news:

Bonjour.
Mon code est presque semblable au tien. Les différences sont :
- Je travaille en base 0 (la commande "filter" envoie un tableau en base 0)
- Je ne peux pas déclarer T (plantage sur la commande "filter") :

Sub test()
Dim Tblo()

ReDim Tblo(0 To 1)
Tblo(0) = "toto1"
Tblo(1) = "toto2"

T = Filter(Tblo, "toto1", False)

ReDim Tblo(0 To UBound(T))
Tblo = T
End Sub

L'erreur "Incompatibilité de type se produit sur la ligne Tblo=T
Merci d'avance.
Daniel
"MichDenis" a écrit dans le message de news:
OPm%
Un petit exemple :

'---------------------------
Dim Tblo(), T()

ReDim Tblo(1 To 2)
Tblo(1) = "toto1"
Tblo(2) = "toto2"

ReDim T(1 To UBound(Tblo))
T = Tblo
'---------------------------


"Daniel" a écrit dans le message de news:

Bonjour et merci pour ta solution.
Je me suis mal exprimé, je voulais savoir s'il était possible de recopier
le
tableau en bloc, genre tablo=tablo1, ce qui fonctionne pour un nouveau
tableau (eg. tablo2=tablo1), mais pas pour le premier exemple (parce que
le
tableau est dimensionné ?)
Daniel
"Garette" a écrit dans le message de news:

Bonjour,

Je ne sais pas s'il y a mieux mais ceci fonctionne :

Sub test()
Dim tablo()
ReDim tablo(8)
tablo(0) = "toto"
tablo(1) = "uoup"
tablo(2) = "toto"
tablo(3) = "tata"
tablo(4) = "azer"
tablo(5) = "zzzz"
tablo(6) = "toto"
tablo(7) = "toto"
tablo(8) = "toto"
tablo1 = Filter(tablo, "toto", False)

ReDim tablo(UBound(tablo1, 1) + 1)
For i = 0 To UBound(tablo1, 1)
tablo(i) = tablo1(i)
Next
End Sub









Avatar
Daniel
Je cherche à supprimer certains items d'un tableau.
L'idéal serait d'écrire :
Tblo = Filter(Tblo, "toto1", False) , ce qui malheureusement ne fonctionne
pas.

Comme tu n'as pas utilisé le mot "Preserve", ton Tblo est vidé...
je ne comprends pas pourquoi tu passes des lignes de code
pour le remplir


Il est rempli dans un premier temps pour être filtré.

Que contient ton tableau T ? Si c'est une plage de cellule, ton
tableau T à 2 dimensions et le tableau Tblo en a qu'une.

Non, le tableau T a la même structure que Tblo, comme on peut le voir dans

la fenêtre des variables.
T contient la partie filtrée de Tblo :
T = Filter(Tblo, "toto1", False)
recopie dans T les éléments différents de "toto1" dans T.
Je veux maintenant recopier T dans Tblo, c'est pourquoi, que Tblo soit vide
ou non n'a plus d'importance. Donc, pour éviter une boucle, écrire quelque
chose comme :
Tblo=T
Daniel

Avatar
Daniel
J'ai trouvé.
Il faut déclarer :
Dim Tblo() As String au lieu de Dim Tblo()
Merci à tous.
Daniel
"MichDenis" a écrit dans le message de news:

Tes 2 tableaux doivent être de même dimension avant de pouvoir
copier l'un vers l'autre

Si tu utilises cette ligne de code comme tu l'as fait dans ton code :
ReDim Tblo(0 To UBound(T))

Comme tu n'as pas utilisé le mot "Preserve", ton Tblo est vidé...
je ne comprends pas pourquoi tu passes des lignes de code
pour le remplir

Que contient ton tableau T ? Si c'est une plage de cellule, ton
tableau T à 2 dimensions et le tableau Tblo en a qu'une.

Que puis-je ajouter de plus ?


"Daniel" a écrit dans le message de news:

Bonjour.
Mon code est presque semblable au tien. Les différences sont :
- Je travaille en base 0 (la commande "filter" envoie un tableau en base
0)
- Je ne peux pas déclarer T (plantage sur la commande "filter") :

Sub test()
Dim Tblo()

ReDim Tblo(0 To 1)
Tblo(0) = "toto1"
Tblo(1) = "toto2"

T = Filter(Tblo, "toto1", False)

ReDim Tblo(0 To UBound(T))
Tblo = T
End Sub

L'erreur "Incompatibilité de type se produit sur la ligne Tblo=T
Merci d'avance.
Daniel
"MichDenis" a écrit dans le message de news:
OPm%
Un petit exemple :

'---------------------------
Dim Tblo(), T()

ReDim Tblo(1 To 2)
Tblo(1) = "toto1"
Tblo(2) = "toto2"

ReDim T(1 To UBound(Tblo))
T = Tblo
'---------------------------


"Daniel" a écrit dans le message de news:

Bonjour et merci pour ta solution.
Je me suis mal exprimé, je voulais savoir s'il était possible de recopier
le
tableau en bloc, genre tablo=tablo1, ce qui fonctionne pour un nouveau
tableau (eg. tablo2=tablo1), mais pas pour le premier exemple (parce que
le
tableau est dimensionné ?)
Daniel
"Garette" a écrit dans le message de news:

Bonjour,

Je ne sais pas s'il y a mieux mais ceci fonctionne :

Sub test()
Dim tablo()
ReDim tablo(8)
tablo(0) = "toto"
tablo(1) = "uoup"
tablo(2) = "toto"
tablo(3) = "tata"
tablo(4) = "azer"
tablo(5) = "zzzz"
tablo(6) = "toto"
tablo(7) = "toto"
tablo(8) = "toto"
tablo1 = Filter(tablo, "toto", False)

ReDim tablo(UBound(tablo1, 1) + 1)
For i = 0 To UBound(tablo1, 1)
tablo(i) = tablo1(i)
Next
End Sub














Avatar
Garette
Oui, mais pourquoi ?

"Daniel" a écrit dans le message de news:

J'ai trouvé.
Il faut déclarer :
Dim Tblo() As String au lieu de Dim Tblo()
Merci à tous.
Daniel


Avatar
Daniel
C'est vrai que ce n'est pas clair. L'aide sur "filter" dit :
"Renvoie un tableau de base zéro contenant un sous-ensemble d'un tableau de
chaîne..."
J'ai donc, à toout hasard, déclaré comme string... et ça fonctionne. C'est
la première fois que je vois qu'on ne peut pas copier du string dans du
variant...
L'explication définitive viendra peut-être d'un des gourous qui hantent ce
forum... ;-))
Daniel
"Garette" a écrit dans le message de news:
%23fKQa%
Oui, mais pourquoi ?

"Daniel" a écrit dans le message de news:

J'ai trouvé.
Il faut déclarer :
Dim Tblo() As String au lieu de Dim Tblo()
Merci à tous.
Daniel






1 2