OVH Cloud OVH Cloud

Tableaux dans VBA

11 réponses
Avatar
Helene
Bonjour =E0 tous
J'ai encore beaucoup de mal =E0 utiliser des tableaux dans=20
VBA.
Voici mon probl=E8me : J'initialise un 1er tableau avec par=20
exemple les valeurs 1 =E0 100.
Puis un second tableau avec les valeurs 3 =E0 97
Je voudrais obtenir un 3 eme tableau qui contiendrai les=20
valeurs 1,2,98,99 et 100. Comment puis-je m'y prendre ?
Par ailleurs =E0 partir de ce 3 eme tableau pourrais obtenir=20
les s=E9ries restantes : ex: de 1=E02 et de 98 =E0 100 ?

Merci pour votre aide.

10 réponses

1 2
Avatar
michdenis
Bonjour Hélène,

Je ne suis pas sûr d'avoir compris le sens de ta question mais essaie ceci :

Pour les valeurs 1,2,98,99 et 100
Dim Arr()
arr = Array(1, 2, 98, 99, 100)

Et pour les valeurs de 1à2 et de 98 à 100
Dim Arr1()
Arr1 = Array(1, 2, 98, 99, 100)


Tu cherches autre chose ?



Salutations!




"Helene" a écrit dans le message de
news:2389b01c45e89$ca38b120$
Bonjour à tous
J'ai encore beaucoup de mal à utiliser des tableaux dans
VBA.
Voici mon problème : J'initialise un 1er tableau avec par
exemple les valeurs 1 à 100.
Puis un second tableau avec les valeurs 3 à 97
Je voudrais obtenir un 3 eme tableau qui contiendrai les
valeurs 1,2,98,99 et 100. Comment puis-je m'y prendre ?
Par ailleurs à partir de ce 3 eme tableau pourrais obtenir
les séries restantes : ex: de 1à2 et de 98 à 100 ?

Merci pour votre aide.
Avatar
Merci pour la réponse je vais essayer de préciser ma
demande.

Le tableau1() que j'initialise contient une série continue
de nombres (de 1 à 100)Cela pouuait être par exemple une
série de tickets numérotés de 1 à 100
le tableau2() serait alors la liste des tickets vendus
dans mon exemple 3 à 97
je voudrais obtenir dans un 3 eme tableau, les tickets
resatnts soit dans mon exemple (1,2,98,99,100) et pouvoir
ensuite récuperer dans des cellules du classeur les séries
obtenues soit par exemple en A1 1 en B1 2; en A2 : 98 et
en B2 :100. est ce possible.
J'avais pensé utiliser If IsError(Application.Match()Mais
je n'arrive pas à trouver ce que je dois mettre après
Match.

Je serais très heureuse d'y parvenir
Merci
-----Message d'origine-----
Bonjour Hélène,

Je ne suis pas sûr d'avoir compris le sens de ta question
mais essaie ceci :


Pour les valeurs 1,2,98,99 et 100
Dim Arr()
arr = Array(1, 2, 98, 99, 100)

Et pour les valeurs de 1à2 et de 98 à 100
Dim Arr1()
Arr1 = Array(1, 2, 98, 99, 100)


Tu cherches autre chose ?



Salutations!




"Helene" a écrit
dans le message de

news:2389b01c45e89$ca38b120$
Bonjour à tous
J'ai encore beaucoup de mal à utiliser des tableaux dans
VBA.
Voici mon problème : J'initialise un 1er tableau avec par
exemple les valeurs 1 à 100.
Puis un second tableau avec les valeurs 3 à 97
Je voudrais obtenir un 3 eme tableau qui contiendrai les
valeurs 1,2,98,99 et 100. Comment puis-je m'y prendre ?
Par ailleurs à partir de ce 3 eme tableau pourrais obtenir
les séries restantes : ex: de 1à2 et de 98 à 100 ?

Merci pour votre aide.


.



Avatar
michdenis
Bonjour,

Pourquoi ne transmets-tu pas ici la procédure que tu utilises ?


Salutations!



a écrit dans le message de news:23a6a01c45eab$c5de8650$
Merci pour la réponse je vais essayer de préciser ma
demande.

Le tableau1() que j'initialise contient une série continue
de nombres (de 1 à 100)Cela pouuait être par exemple une
série de tickets numérotés de 1 à 100
le tableau2() serait alors la liste des tickets vendus
dans mon exemple 3 à 97
je voudrais obtenir dans un 3 eme tableau, les tickets
resatnts soit dans mon exemple (1,2,98,99,100) et pouvoir
ensuite récuperer dans des cellules du classeur les séries
obtenues soit par exemple en A1 1 en B1 2; en A2 : 98 et
en B2 :100. est ce possible.
J'avais pensé utiliser If IsError(Application.Match()Mais
je n'arrive pas à trouver ce que je dois mettre après
Match.

Je serais très heureuse d'y parvenir
Merci
-----Message d'origine-----
Bonjour Hélène,

Je ne suis pas sûr d'avoir compris le sens de ta question
mais essaie ceci :


Pour les valeurs 1,2,98,99 et 100
Dim Arr()
arr = Array(1, 2, 98, 99, 100)

Et pour les valeurs de 1à2 et de 98 à 100
Dim Arr1()
Arr1 = Array(1, 2, 98, 99, 100)


Tu cherches autre chose ?



Salutations!




"Helene" a écrit
dans le message de

news:2389b01c45e89$ca38b120$
Bonjour à tous
J'ai encore beaucoup de mal à utiliser des tableaux dans
VBA.
Voici mon problème : J'initialise un 1er tableau avec par
exemple les valeurs 1 à 100.
Puis un second tableau avec les valeurs 3 à 97
Je voudrais obtenir un 3 eme tableau qui contiendrai les
valeurs 1,2,98,99 et 100. Comment puis-je m'y prendre ?
Par ailleurs à partir de ce 3 eme tableau pourrais obtenir
les séries restantes : ex: de 1à2 et de 98 à 100 ?

Merci pour votre aide.


.



Avatar
Rv
Salut,

Pour la première partie
Voici un exemple à insérer dans un nouveau module.


Option Explicit
Option Base 1
Const BORNESUP = 100


Sub testDiff()
Dim tabA(BORNESUP) As Long
Dim tabB(BORNESUP) As Long
Dim tabC() As Long
Dim i As Long

' Initialisation des tableaux
For i = 1 To BORNESUP
tabA(i) = i
Next
For i = 1 To BORNESUP - 5
tabB(i) = i + 2
Next

' Insertion des éléments dans le tableau résultant (tabC)
tabC = differenceTableau(tabA(), tabB())

' Affichage du le tableau résultant (tabC)
For i = LBound(tabC) To UBound(tabC)
Debug.Print tabC(i)
Next

End Sub


Function differenceTableau(a() As Long, b() As Long) As Long()
Dim res() As Long
Dim indA As Long
Dim indRes As Long

indRes = 1
' Parcours des éléments de a
For indA = 1 To UBound(a)
' Si l'élément en cours n'est pas dans b
If Not rechercheVal(a(indA), b) Then
' On l'insère dans le tableau résultat
ReDim Preserve res(indRes)
res(indRes) = a(indA)
indRes = indRes + 1
End If
Next

differenceTableau = res
End Function


Function rechercheVal(val As Long, tableRes() As Long) As Boolean
Dim i As Long

rechercheVal = False
For i = 1 To UBound(tableRes)
If val = tableRes(i) Then
rechercheVal = True
Exit For
End If
Next
End Function

En lançant la procédure testDiff. Ca doit marcher?

Pour l'écriture dans la feuille excel je ne comprends pas la logique qui
permet de passer d'un tableau à une dimension (tabC) à une feuille excel sur
deux dimensions?

A+

Rv



a écrit dans le message de
news:23a6a01c45eab$c5de8650$
Merci pour la réponse je vais essayer de préciser ma
demande.

Le tableau1() que j'initialise contient une série continue
de nombres (de 1 à 100)Cela pouuait être par exemple une
série de tickets numérotés de 1 à 100
le tableau2() serait alors la liste des tickets vendus
dans mon exemple 3 à 97
je voudrais obtenir dans un 3 eme tableau, les tickets
resatnts soit dans mon exemple (1,2,98,99,100) et pouvoir
ensuite récuperer dans des cellules du classeur les séries
obtenues soit par exemple en A1 1 en B1 2; en A2 : 98 et
en B2 :100. est ce possible.
J'avais pensé utiliser If IsError(Application.Match()Mais
je n'arrive pas à trouver ce que je dois mettre après
Match.

Je serais très heureuse d'y parvenir
Merci
-----Message d'origine-----
Bonjour Hélène,

Je ne suis pas sûr d'avoir compris le sens de ta question
mais essaie ceci :


Pour les valeurs 1,2,98,99 et 100
Dim Arr()
arr = Array(1, 2, 98, 99, 100)

Et pour les valeurs de 1à2 et de 98 à 100
Dim Arr1()
Arr1 = Array(1, 2, 98, 99, 100)


Tu cherches autre chose ?



Salutations!




"Helene" a écrit
dans le message de

news:2389b01c45e89$ca38b120$
Bonjour à tous
J'ai encore beaucoup de mal à utiliser des tableaux dans
VBA.
Voici mon problème : J'initialise un 1er tableau avec par
exemple les valeurs 1 à 100.
Puis un second tableau avec les valeurs 3 à 97
Je voudrais obtenir un 3 eme tableau qui contiendrai les
valeurs 1,2,98,99 et 100. Comment puis-je m'y prendre ?
Par ailleurs à partir de ce 3 eme tableau pourrais obtenir
les séries restantes : ex: de 1à2 et de 98 à 100 ?

Merci pour votre aide.


.



Avatar
bonjour,
Voici la procédure mais je suis bloquée pour le tableau2()
qui doit afficher la différence entre tableau et tableau1
soit les éléments 1,2,98,99,100

Option Explicit
Option Base 1
Sub tableaux()
Dim i As Variant
Dim Tableau() As Variant
Dim Tableau1() As Variant
Dim Tableau2() As Variant
Dim ArrayResultat() As Variant

For i = 1 To 100
ReDim Preserve Tableau(0 To i)
Tableau(i) = i
Next i
For i = 3 To 97
ReDim Preserve Tableau1(0 To i)
Tableau1(i) = i
Next i
End Sub

Salutations
LN
-----Message d'origine-----
Bonjour,

Pourquoi ne transmets-tu pas ici la procédure que tu
utilises ?



Salutations!



a écrit dans le
message de news:23a6a01c45eab$c5de8650$

Merci pour la réponse je vais essayer de préciser ma
demande.

Le tableau1() que j'initialise contient une série continue
de nombres (de 1 à 100)Cela pouuait être par exemple une
série de tickets numérotés de 1 à 100
le tableau2() serait alors la liste des tickets vendus
dans mon exemple 3 à 97
je voudrais obtenir dans un 3 eme tableau, les tickets
resatnts soit dans mon exemple (1,2,98,99,100) et pouvoir
ensuite récuperer dans des cellules du classeur les séries
obtenues soit par exemple en A1 1 en B1 2; en A2 : 98 et
en B2 :100. est ce possible.
J'avais pensé utiliser If IsError(Application.Match()Mais
je n'arrive pas à trouver ce que je dois mettre après
Match.

Je serais très heureuse d'y parvenir
Merci
-----Message d'origine-----
Bonjour Hélène,

Je ne suis pas sûr d'avoir compris le sens de ta question
mais essaie ceci :


Pour les valeurs 1,2,98,99 et 100
Dim Arr()
arr = Array(1, 2, 98, 99, 100)

Et pour les valeurs de 1à2 et de 98 à 100
Dim Arr1()
Arr1 = Array(1, 2, 98, 99, 100)


Tu cherches autre chose ?



Salutations!




"Helene" a écrit
dans le message de

news:2389b01c45e89$ca38b120$
Bonjour à tous
J'ai encore beaucoup de mal à utiliser des tableaux dans
VBA.
Voici mon problème : J'initialise un 1er tableau avec par
exemple les valeurs 1 à 100.
Puis un second tableau avec les valeurs 3 à 97
Je voudrais obtenir un 3 eme tableau qui contiendrai les
valeurs 1,2,98,99 et 100. Comment puis-je m'y prendre ?
Par ailleurs à partir de ce 3 eme tableau pourrais
obtenir


les séries restantes : ex: de 1à2 et de 98 à 100 ?

Merci pour votre aide.


.




.




Avatar
Bonjour

J'ai essayé testDiff mais j'ai le message Type d'argument
ByRef incompatible !!!lorsque la procédure arrive à la
ligne tabC = differenceTableau....
Salutations

-----Message d'origine-----
Salut,

Pour la première partie
Voici un exemple à insérer dans un nouveau module.


Option Explicit
Option Base 1
Const BORNESUP = 100


Sub testDiff()
Dim tabA(BORNESUP) As Long
Dim tabB(BORNESUP) As Long
Dim tabC() As Long
Dim i As Long

' Initialisation des tableaux
For i = 1 To BORNESUP
tabA(i) = i
Next
For i = 1 To BORNESUP - 5
tabB(i) = i + 2
Next

' Insertion des éléments dans le tableau résultant
(tabC)

tabC = differenceTableau(tabA(), tabB())

' Affichage du le tableau résultant (tabC)
For i = LBound(tabC) To UBound(tabC)
Debug.Print tabC(i)
Next

End Sub


Function differenceTableau(a() As Long, b() As Long) As
Long()

Dim res() As Long
Dim indA As Long
Dim indRes As Long

indRes = 1
' Parcours des éléments de a
For indA = 1 To UBound(a)
' Si l'élément en cours n'est pas dans b
If Not rechercheVal(a(indA), b) Then
' On l'insère dans le tableau résultat
ReDim Preserve res(indRes)
res(indRes) = a(indA)
indRes = indRes + 1
End If
Next

differenceTableau = res
End Function


Function rechercheVal(val As Long, tableRes() As Long) As
Boolean

Dim i As Long

rechercheVal = False
For i = 1 To UBound(tableRes)
If val = tableRes(i) Then
rechercheVal = True
Exit For
End If
Next
End Function

En lançant la procédure testDiff. Ca doit marcher?

Pour l'écriture dans la feuille excel je ne comprends pas
la logique qui

permet de passer d'un tableau à une dimension (tabC) à
une feuille excel sur

deux dimensions?

A+

Rv



a écrit dans le
message de

news:23a6a01c45eab$c5de8650$
Merci pour la réponse je vais essayer de préciser ma
demande.

Le tableau1() que j'initialise contient une série continue
de nombres (de 1 à 100)Cela pouuait être par exemple une
série de tickets numérotés de 1 à 100
le tableau2() serait alors la liste des tickets vendus
dans mon exemple 3 à 97
je voudrais obtenir dans un 3 eme tableau, les tickets
resatnts soit dans mon exemple (1,2,98,99,100) et pouvoir
ensuite récuperer dans des cellules du classeur les séries
obtenues soit par exemple en A1 1 en B1 2; en A2 : 98 et
en B2 :100. est ce possible.
J'avais pensé utiliser If IsError(Application.Match()Mais
je n'arrive pas à trouver ce que je dois mettre après
Match.

Je serais très heureuse d'y parvenir
Merci
-----Message d'origine-----
Bonjour Hélène,

Je ne suis pas sûr d'avoir compris le sens de ta question
mais essaie ceci :


Pour les valeurs 1,2,98,99 et 100
Dim Arr()
arr = Array(1, 2, 98, 99, 100)

Et pour les valeurs de 1à2 et de 98 à 100
Dim Arr1()
Arr1 = Array(1, 2, 98, 99, 100)


Tu cherches autre chose ?



Salutations!




"Helene" a écrit
dans le message de

news:2389b01c45e89$ca38b120$
Bonjour à tous
J'ai encore beaucoup de mal à utiliser des tableaux dans
VBA.
Voici mon problème : J'initialise un 1er tableau avec par
exemple les valeurs 1 à 100.
Puis un second tableau avec les valeurs 3 à 97
Je voudrais obtenir un 3 eme tableau qui contiendrai les
valeurs 1,2,98,99 et 100. Comment puis-je m'y prendre ?
Par ailleurs à partir de ce 3 eme tableau pourrais
obtenir


les séries restantes : ex: de 1à2 et de 98 à 100 ?

Merci pour votre aide.


.




.




Avatar
Bonjour

J'ai essayé testDiff mais j'ai le message Type d'argument
ByRef incompatible !!!lorsque la procédure arrive à la
ligne tabC = differenceTableau....
Salutations

-----Message d'origine-----
Salut,

Pour la première partie
Voici un exemple à insérer dans un nouveau module.


Option Explicit
Option Base 1
Const BORNESUP = 100


Sub testDiff()
Dim tabA(BORNESUP) As Long
Dim tabB(BORNESUP) As Long
Dim tabC() As Long
Dim i As Long

' Initialisation des tableaux
For i = 1 To BORNESUP
tabA(i) = i
Next
For i = 1 To BORNESUP - 5
tabB(i) = i + 2
Next

' Insertion des éléments dans le tableau résultant
(tabC)

tabC = differenceTableau(tabA(), tabB())

' Affichage du le tableau résultant (tabC)
For i = LBound(tabC) To UBound(tabC)
Debug.Print tabC(i)
Next

End Sub


Function differenceTableau(a() As Long, b() As Long) As
Long()

Dim res() As Long
Dim indA As Long
Dim indRes As Long

indRes = 1
' Parcours des éléments de a
For indA = 1 To UBound(a)
' Si l'élément en cours n'est pas dans b
If Not rechercheVal(a(indA), b) Then
' On l'insère dans le tableau résultat
ReDim Preserve res(indRes)
res(indRes) = a(indA)
indRes = indRes + 1
End If
Next

differenceTableau = res
End Function


Function rechercheVal(val As Long, tableRes() As Long) As
Boolean

Dim i As Long

rechercheVal = False
For i = 1 To UBound(tableRes)
If val = tableRes(i) Then
rechercheVal = True
Exit For
End If
Next
End Function

En lançant la procédure testDiff. Ca doit marcher?

Pour l'écriture dans la feuille excel je ne comprends pas
la logique qui

permet de passer d'un tableau à une dimension (tabC) à
une feuille excel sur

deux dimensions?

A+

Rv



a écrit dans le
message de

news:23a6a01c45eab$c5de8650$
Merci pour la réponse je vais essayer de préciser ma
demande.

Le tableau1() que j'initialise contient une série continue
de nombres (de 1 à 100)Cela pouuait être par exemple une
série de tickets numérotés de 1 à 100
le tableau2() serait alors la liste des tickets vendus
dans mon exemple 3 à 97
je voudrais obtenir dans un 3 eme tableau, les tickets
resatnts soit dans mon exemple (1,2,98,99,100) et pouvoir
ensuite récuperer dans des cellules du classeur les séries
obtenues soit par exemple en A1 1 en B1 2; en A2 : 98 et
en B2 :100. est ce possible.
J'avais pensé utiliser If IsError(Application.Match()Mais
je n'arrive pas à trouver ce que je dois mettre après
Match.

Je serais très heureuse d'y parvenir
Merci
-----Message d'origine-----
Bonjour Hélène,

Je ne suis pas sûr d'avoir compris le sens de ta question
mais essaie ceci :


Pour les valeurs 1,2,98,99 et 100
Dim Arr()
arr = Array(1, 2, 98, 99, 100)

Et pour les valeurs de 1à2 et de 98 à 100
Dim Arr1()
Arr1 = Array(1, 2, 98, 99, 100)


Tu cherches autre chose ?



Salutations!




"Helene" a écrit
dans le message de

news:2389b01c45e89$ca38b120$
Bonjour à tous
J'ai encore beaucoup de mal à utiliser des tableaux dans
VBA.
Voici mon problème : J'initialise un 1er tableau avec par
exemple les valeurs 1 à 100.
Puis un second tableau avec les valeurs 3 à 97
Je voudrais obtenir un 3 eme tableau qui contiendrai les
valeurs 1,2,98,99 et 100. Comment puis-je m'y prendre ?
Par ailleurs à partir de ce 3 eme tableau pourrais
obtenir


les séries restantes : ex: de 1à2 et de 98 à 100 ?

Merci pour votre aide.


.




.




Avatar
Rv
Salut,

Je l'ai testé avec Excel2000 et XP. Quelle est votre version?

Sinon voila une version moins découpée:

Option Explicit
Option Base 1
Const BORNESUP = 1000

Sub test()
Dim tabA(BORNESUP) As Long
Dim tabB(BORNESUP) As Long
Dim tabC() As Long
Dim val As Long

Dim indA As Long
Dim indB As Long
Dim indC As Long
Dim i As Long

Dim booTrouve As Boolean


' ------------ Initialisation des tableaux ----------------
For i = 1 To BORNESUP
tabA(i) = i
Next
For i = i To BORNESUP - 5
tabB(i) = i + 2
Next

' -------- Remplissage de tabC ------------
indC = 1
' Parcours des éléments de a
For indA = 1 To UBound(tabA)
val = tabA(indA)
' Recherche de l'élément en cours de tabA dans tabB
booTrouve = False
For i = 1 To UBound(tabB)
If val = tabB(i) Then
booTrouve = True
Exit For
End If
Next

' Si l'élément en cours de tabA n'est pas dans tabB
If Not booTrouve Then
' On l'insère dans le tableau résultant : tabC
ReDim Preserve tabC(indC)
tabC(indC) = val
indC = indC + 1
End If

Next

' --------- Affichage du tableau résultant : tabC ------------------
For i = LBound(tabC) To UBound(tabC)
Debug.Print tabC(i)
Next
End Sub

A+

Rv

a écrit dans le message de
news:2425401c45f36$5a2f79b0$
Bonjour

J'ai essayé testDiff mais j'ai le message Type d'argument
ByRef incompatible !!!lorsque la procédure arrive à la
ligne tabC = differenceTableau....
Salutations

-----Message d'origine-----
Salut,

Pour la première partie
Voici un exemple à insérer dans un nouveau module.


Option Explicit
Option Base 1
Const BORNESUP = 100


Sub testDiff()
Dim tabA(BORNESUP) As Long
Dim tabB(BORNESUP) As Long
Dim tabC() As Long
Dim i As Long

' Initialisation des tableaux
For i = 1 To BORNESUP
tabA(i) = i
Next
For i = 1 To BORNESUP - 5
tabB(i) = i + 2
Next

' Insertion des éléments dans le tableau résultant
(tabC)

tabC = differenceTableau(tabA(), tabB())

' Affichage du le tableau résultant (tabC)
For i = LBound(tabC) To UBound(tabC)
Debug.Print tabC(i)
Next

End Sub


Function differenceTableau(a() As Long, b() As Long) As
Long()

Dim res() As Long
Dim indA As Long
Dim indRes As Long

indRes = 1
' Parcours des éléments de a
For indA = 1 To UBound(a)
' Si l'élément en cours n'est pas dans b
If Not rechercheVal(a(indA), b) Then
' On l'insère dans le tableau résultat
ReDim Preserve res(indRes)
res(indRes) = a(indA)
indRes = indRes + 1
End If
Next

differenceTableau = res
End Function


Function rechercheVal(val As Long, tableRes() As Long) As
Boolean

Dim i As Long

rechercheVal = False
For i = 1 To UBound(tableRes)
If val = tableRes(i) Then
rechercheVal = True
Exit For
End If
Next
End Function

En lançant la procédure testDiff. Ca doit marcher?

Pour l'écriture dans la feuille excel je ne comprends pas
la logique qui

permet de passer d'un tableau à une dimension (tabC) à
une feuille excel sur

deux dimensions?

A+

Rv



a écrit dans le
message de

news:23a6a01c45eab$c5de8650$
Merci pour la réponse je vais essayer de préciser ma
demande.

Le tableau1() que j'initialise contient une série continue
de nombres (de 1 à 100)Cela pouuait être par exemple une
série de tickets numérotés de 1 à 100
le tableau2() serait alors la liste des tickets vendus
dans mon exemple 3 à 97
je voudrais obtenir dans un 3 eme tableau, les tickets
resatnts soit dans mon exemple (1,2,98,99,100) et pouvoir
ensuite récuperer dans des cellules du classeur les séries
obtenues soit par exemple en A1 1 en B1 2; en A2 : 98 et
en B2 :100. est ce possible.
J'avais pensé utiliser If IsError(Application.Match()Mais
je n'arrive pas à trouver ce que je dois mettre après
Match.

Je serais très heureuse d'y parvenir
Merci
-----Message d'origine-----
Bonjour Hélène,

Je ne suis pas sûr d'avoir compris le sens de ta question
mais essaie ceci :


Pour les valeurs 1,2,98,99 et 100
Dim Arr()
arr = Array(1, 2, 98, 99, 100)

Et pour les valeurs de 1à2 et de 98 à 100
Dim Arr1()
Arr1 = Array(1, 2, 98, 99, 100)


Tu cherches autre chose ?



Salutations!




"Helene" a écrit
dans le message de

news:2389b01c45e89$ca38b120$
Bonjour à tous
J'ai encore beaucoup de mal à utiliser des tableaux dans
VBA.
Voici mon problème : J'initialise un 1er tableau avec par
exemple les valeurs 1 à 100.
Puis un second tableau avec les valeurs 3 à 97
Je voudrais obtenir un 3 eme tableau qui contiendrai les
valeurs 1,2,98,99 et 100. Comment puis-je m'y prendre ?
Par ailleurs à partir de ce 3 eme tableau pourrais
obtenir


les séries restantes : ex: de 1à2 et de 98 à 100 ?

Merci pour votre aide.


.




.




Avatar
Rv
Petite correction:

For i = i To BORNESUP - 5
tabB(i) = i + 2
Next


For i = 1 To BORNESUP - 5

A+

Rv

"Rv" a écrit dans le message de
news:
Salut,

Je l'ai testé avec Excel2000 et XP. Quelle est votre version?

Sinon voila une version moins découpée:

Option Explicit
Option Base 1
Const BORNESUP = 1000

Sub test()
Dim tabA(BORNESUP) As Long
Dim tabB(BORNESUP) As Long
Dim tabC() As Long
Dim val As Long

Dim indA As Long
Dim indB As Long
Dim indC As Long
Dim i As Long

Dim booTrouve As Boolean


' ------------ Initialisation des tableaux ----------------
For i = 1 To BORNESUP
tabA(i) = i
Next
For i = i To BORNESUP - 5
tabB(i) = i + 2
Next

' -------- Remplissage de tabC ------------
indC = 1
' Parcours des éléments de a
For indA = 1 To UBound(tabA)
val = tabA(indA)
' Recherche de l'élément en cours de tabA dans tabB
booTrouve = False
For i = 1 To UBound(tabB)
If val = tabB(i) Then
booTrouve = True
Exit For
End If
Next

' Si l'élément en cours de tabA n'est pas dans tabB
If Not booTrouve Then
' On l'insère dans le tableau résultant : tabC
ReDim Preserve tabC(indC)
tabC(indC) = val
indC = indC + 1
End If

Next

' --------- Affichage du tableau résultant : tabC ------------------
For i = LBound(tabC) To UBound(tabC)
Debug.Print tabC(i)
Next
End Sub

A+

Rv

a écrit dans le message de
news:2425401c45f36$5a2f79b0$
Bonjour

J'ai essayé testDiff mais j'ai le message Type d'argument
ByRef incompatible !!!lorsque la procédure arrive à la
ligne tabC = differenceTableau....
Salutations

-----Message d'origine-----
Salut,

Pour la première partie
Voici un exemple à insérer dans un nouveau module.


Option Explicit
Option Base 1
Const BORNESUP = 100


Sub testDiff()
Dim tabA(BORNESUP) As Long
Dim tabB(BORNESUP) As Long
Dim tabC() As Long
Dim i As Long

' Initialisation des tableaux
For i = 1 To BORNESUP
tabA(i) = i
Next
For i = 1 To BORNESUP - 5
tabB(i) = i + 2
Next

' Insertion des éléments dans le tableau résultant
(tabC)

tabC = differenceTableau(tabA(), tabB())

' Affichage du le tableau résultant (tabC)
For i = LBound(tabC) To UBound(tabC)
Debug.Print tabC(i)
Next

End Sub


Function differenceTableau(a() As Long, b() As Long) As
Long()

Dim res() As Long
Dim indA As Long
Dim indRes As Long

indRes = 1
' Parcours des éléments de a
For indA = 1 To UBound(a)
' Si l'élément en cours n'est pas dans b
If Not rechercheVal(a(indA), b) Then
' On l'insère dans le tableau résultat
ReDim Preserve res(indRes)
res(indRes) = a(indA)
indRes = indRes + 1
End If
Next

differenceTableau = res
End Function


Function rechercheVal(val As Long, tableRes() As Long) As
Boolean

Dim i As Long

rechercheVal = False
For i = 1 To UBound(tableRes)
If val = tableRes(i) Then
rechercheVal = True
Exit For
End If
Next
End Function

En lançant la procédure testDiff. Ca doit marcher?

Pour l'écriture dans la feuille excel je ne comprends pas
la logique qui

permet de passer d'un tableau à une dimension (tabC) à
une feuille excel sur

deux dimensions?

A+

Rv



a écrit dans le
message de

news:23a6a01c45eab$c5de8650$
Merci pour la réponse je vais essayer de préciser ma
demande.

Le tableau1() que j'initialise contient une série continue
de nombres (de 1 à 100)Cela pouuait être par exemple une
série de tickets numérotés de 1 à 100
le tableau2() serait alors la liste des tickets vendus
dans mon exemple 3 à 97
je voudrais obtenir dans un 3 eme tableau, les tickets
resatnts soit dans mon exemple (1,2,98,99,100) et pouvoir
ensuite récuperer dans des cellules du classeur les séries
obtenues soit par exemple en A1 1 en B1 2; en A2 : 98 et
en B2 :100. est ce possible.
J'avais pensé utiliser If IsError(Application.Match()Mais
je n'arrive pas à trouver ce que je dois mettre après
Match.

Je serais très heureuse d'y parvenir
Merci
-----Message d'origine-----
Bonjour Hélène,

Je ne suis pas sûr d'avoir compris le sens de ta question
mais essaie ceci :


Pour les valeurs 1,2,98,99 et 100
Dim Arr()
arr = Array(1, 2, 98, 99, 100)

Et pour les valeurs de 1à2 et de 98 à 100
Dim Arr1()
Arr1 = Array(1, 2, 98, 99, 100)


Tu cherches autre chose ?



Salutations!




"Helene" a écrit
dans le message de

news:2389b01c45e89$ca38b120$
Bonjour à tous
J'ai encore beaucoup de mal à utiliser des tableaux dans
VBA.
Voici mon problème : J'initialise un 1er tableau avec par
exemple les valeurs 1 à 100.
Puis un second tableau avec les valeurs 3 à 97
Je voudrais obtenir un 3 eme tableau qui contiendrai les
valeurs 1,2,98,99 et 100. Comment puis-je m'y prendre ?
Par ailleurs à partir de ce 3 eme tableau pourrais
obtenir


les séries restantes : ex: de 1à2 et de 98 à 100 ?

Merci pour votre aide.


.




.








Avatar
Hello

Ma version est 97 mais je viens de tester votre solution
et ça marche.
J'ai rajouté :Sheets("Feuil3").Range("A1").Resize(UBound
(tabC)) = Application.Transpose(tabC)
et j'obtiens bien le résultat attendu.Il ne me reste plus
qu' à adapter.
J'ai cependant une autre question :ou pourrais-je trouver
un site ou un livre expliquant la manipulation de ces
tableaux ( addition de tableaux, compararaisons etc..)?
il est vrai que l'utilisation de ces tableaux est beaucoup
plus rapide que l'ecriture dans une feuille d'excel au
moyen de procédures!!

Cordialement
LN

-----Message d'origine-----
Salut,

Je l'ai testé avec Excel2000 et XP. Quelle est votre
version?


Sinon voila une version moins découpée:

Option Explicit
Option Base 1
Const BORNESUP = 1000

Sub test()
Dim tabA(BORNESUP) As Long
Dim tabB(BORNESUP) As Long
Dim tabC() As Long
Dim val As Long

Dim indA As Long
Dim indB As Long
Dim indC As Long
Dim i As Long

Dim booTrouve As Boolean


' ------------ Initialisation des tableaux -----------
-----

For i = 1 To BORNESUP
tabA(i) = i
Next
For i = i To BORNESUP - 5
tabB(i) = i + 2
Next

' -------- Remplissage de tabC ------------
indC = 1
' Parcours des éléments de a
For indA = 1 To UBound(tabA)
val = tabA(indA)
' Recherche de l'élément en cours de tabA dans
tabB

booTrouve = False
For i = 1 To UBound(tabB)
If val = tabB(i) Then
booTrouve = True
Exit For
End If
Next

' Si l'élément en cours de tabA n'est pas dans
tabB

If Not booTrouve Then
' On l'insère dans le tableau résultant : tabC
ReDim Preserve tabC(indC)
tabC(indC) = val
indC = indC + 1
End If

Next

' --------- Affichage du tableau résultant : tabC ----
--------------

For i = LBound(tabC) To UBound(tabC)
Debug.Print tabC(i)
Next
End Sub

A+

Rv

a écrit dans le
message de

news:2425401c45f36$5a2f79b0$
Bonjour

J'ai essayé testDiff mais j'ai le message Type d'argument
ByRef incompatible !!!lorsque la procédure arrive à la
ligne tabC = differenceTableau....
Salutations

-----Message d'origine-----
Salut,

Pour la première partie
Voici un exemple à insérer dans un nouveau module.


Option Explicit
Option Base 1
Const BORNESUP = 100


Sub testDiff()
Dim tabA(BORNESUP) As Long
Dim tabB(BORNESUP) As Long
Dim tabC() As Long
Dim i As Long

' Initialisation des tableaux
For i = 1 To BORNESUP
tabA(i) = i
Next
For i = 1 To BORNESUP - 5
tabB(i) = i + 2
Next

' Insertion des éléments dans le tableau résultant
(tabC)

tabC = differenceTableau(tabA(), tabB())

' Affichage du le tableau résultant (tabC)
For i = LBound(tabC) To UBound(tabC)
Debug.Print tabC(i)
Next

End Sub


Function differenceTableau(a() As Long, b() As Long) As
Long()

Dim res() As Long
Dim indA As Long
Dim indRes As Long

indRes = 1
' Parcours des éléments de a
For indA = 1 To UBound(a)
' Si l'élément en cours n'est pas dans b
If Not rechercheVal(a(indA), b) Then
' On l'insère dans le tableau résultat
ReDim Preserve res(indRes)
res(indRes) = a(indA)
indRes = indRes + 1
End If
Next

differenceTableau = res
End Function


Function rechercheVal(val As Long, tableRes() As Long) As
Boolean

Dim i As Long

rechercheVal = False
For i = 1 To UBound(tableRes)
If val = tableRes(i) Then
rechercheVal = True
Exit For
End If
Next
End Function

En lançant la procédure testDiff. Ca doit marcher?

Pour l'écriture dans la feuille excel je ne comprends pas
la logique qui

permet de passer d'un tableau à une dimension (tabC) à
une feuille excel sur

deux dimensions?

A+

Rv



a écrit dans le
message de

news:23a6a01c45eab$c5de8650$
Merci pour la réponse je vais essayer de préciser ma
demande.

Le tableau1() que j'initialise contient une série
continue


de nombres (de 1 à 100)Cela pouuait être par exemple une
série de tickets numérotés de 1 à 100
le tableau2() serait alors la liste des tickets vendus
dans mon exemple 3 à 97
je voudrais obtenir dans un 3 eme tableau, les tickets
resatnts soit dans mon exemple (1,2,98,99,100) et pouvoir
ensuite récuperer dans des cellules du classeur les
séries


obtenues soit par exemple en A1 1 en B1 2; en A2 : 98 et
en B2 :100. est ce possible.
J'avais pensé utiliser If IsError(Application.Match()Mais
je n'arrive pas à trouver ce que je dois mettre après
Match.

Je serais très heureuse d'y parvenir
Merci
-----Message d'origine-----
Bonjour Hélène,

Je ne suis pas sûr d'avoir compris le sens de ta
question



mais essaie ceci :

Pour les valeurs 1,2,98,99 et 100
Dim Arr()
arr = Array(1, 2, 98, 99, 100)

Et pour les valeurs de 1à2 et de 98 à 100
Dim Arr1()
Arr1 = Array(1, 2, 98, 99, 100)


Tu cherches autre chose ?



Salutations!




"Helene" a écrit
dans le message de

news:2389b01c45e89$ca38b120$
Bonjour à tous
J'ai encore beaucoup de mal à utiliser des tableaux dans
VBA.
Voici mon problème : J'initialise un 1er tableau avec
par



exemple les valeurs 1 à 100.
Puis un second tableau avec les valeurs 3 à 97
Je voudrais obtenir un 3 eme tableau qui contiendrai les
valeurs 1,2,98,99 et 100. Comment puis-je m'y prendre ?
Par ailleurs à partir de ce 3 eme tableau pourrais
obtenir


les séries restantes : ex: de 1à2 et de 98 à 100 ?

Merci pour votre aide.


.




.




.





1 2