OVH Cloud OVH Cloud

PB logique, mathématique, intellectuel ;-)

18 réponses
Avatar
\(\( Olivier \)\)
Bonjour,

J'ai un problème que je n'arrive pas a résoudre.

J'ai un tableau de String, par exemple:

Montableau(0) = "AAA"
Montableau(1) = "AAA"
Montableau(2) = "BBB"
Montableau(3) = "BBB"
Montableau(4) = "CCC"
Montableau(5) = "CCC"

Je voudrais faire une boucle sur chaque items et lorsque la valeur change
effectuer un traitement.
Bon, la boucle j'y arive, mais il me saute toujours le dernier items ?


Merci
Olivier

8 réponses

1 2
Avatar
André Joubert
Bonjour Olivier,
Effectivement le code fournit plus bas n'effectuera
JAMAIS traitement avec la dernière chaîne puisque la fonction est appelée au
début de chaque nouvelle chaîne avec la chaîne précédente. Il faut
absolument
appeler la routine traitement en sortant du FOR/NEXT. Personnellement je
n'aime
pas l'idée d'avoir un élément bidon.

Note: comme Bismark le mentionne je recommande l'utilisation de UBOUND

André


"(( Olivier ))" wrote in message
news:%
Bonjour,

J'ai un problème que je n'arrive pas a résoudre.

J'ai un tableau de String, par exemple:

Montableau(0) = "AAA"
Montableau(1) = "AAA"
Montableau(2) = "BBB"
Montableau(3) = "BBB"
Montableau(4) = "CCC"
Montableau(5) = "CCC"

Je voudrais faire une boucle sur chaque items et lorsque la valeur change
effectuer un traitement.
Bon, la boucle j'y arive, mais il me saute toujours le dernier items ?


Merci
Olivier




Avatar
\(\( Olivier \)\)
Merci.



"André Joubert" a écrit dans le message de
news:_pm5b.10859$
Bonjour Olivier,
Effectivement le code fournit plus bas


n'effectuera
JAMAIS traitement avec la dernière chaîne puisque la fonction est appelée


au
début de chaque nouvelle chaîne avec la chaîne précédente. Il faut
absolument
appeler la routine traitement en sortant du FOR/NEXT. Personnellement je
n'aime
pas l'idée d'avoir un élément bidon.

Note: comme Bismark le mentionne je recommande l'utilisation de UBOUND

André


"(( Olivier ))" wrote in message
news:%
> Bonjour,
>
> J'ai un problème que je n'arrive pas a résoudre.
>
> J'ai un tableau de String, par exemple:
>
> Montableau(0) = "AAA"
> Montableau(1) = "AAA"
> Montableau(2) = "BBB"
> Montableau(3) = "BBB"
> Montableau(4) = "CCC"
> Montableau(5) = "CCC"
>
> Je voudrais faire une boucle sur chaque items et lorsque la valeur


change
> effectuer un traitement.
> Bon, la boucle j'y arive, mais il me saute toujours le dernier items ?
>
>
> Merci
> Olivier
>
>




Avatar
Bismark Prods
Désolé mais si je fais mon exemple cela me sort AAA-> FFF ! donc tous les
items sont visibles !

"(( Olivier ))" a écrit dans le message de
news:
Rien de ne sert de s'énerver ;-)
J'ai utilisé votre code et il ne fonctionne pas en ce qui concerne le
dernier item.
Mais bon, je crois que je vais arreter la discussion car je pense que je


ne
suis pas fait bien comprendre.
C'est pas grave, je vais continuer mes recherches et surtout continuer a
rajouter un item.add en dernier pour pouvoir faire la rupture du dernier
item.

Merci à tous pour vos réponses
Olivier


"Bismark Prods" a écrit dans le message de
news:
> Jusqu'a preuve du contraire je ne poste jamais un code qui ne fonctionne
pas
> ! Et j'ai précisément fait le copier-coller puis j'ai corrigé et cela
donne
> le resultat escompté !
>
> Mais si votre intéret c'est de poster pour faire joli alors ok !
>
> "(( Olivier ))" a écrit dans le message de
> news:
> > Heu... merci , mais je crois pas que vous avez lu le message.
> > Le code que vous m'avez donné, ne fonctionne pas mieux.
> >
> > S'il vous plait, essayer le mien et dites moi ce qui ne marche pas ?
> > Faite une form + un command, un copier coller de mon code et vous


verrez
> que
> > cela ne marche pas.
> >
> >
> >
> > "Bismark Prods" a écrit dans le message de
> > news:%
> > > Private Sub Command1_Click()
> > > Dim OldValue As String
> > > Dim I As Long
> > >
> > > Call FillArray
> > > OldValue = ""
> > >
> > > For I = LBound(MonTableau) To UBound(MonTableau)
> > > If MonTableau(I) <> OldValue Then
> > > Debug.Print MonTableau(I)
> > > OldValue = MonTableau(I)
> > > End If
> > > Next I
> > >
> > > End Sub
> > >
> > > Pas besoin de se couper les cheveux en 4 !
> > >
> > > "(( Olivier ))" a écrit dans le message de
> > > news:%
> > > > Merci, merci pour tout ces efforts, mais, car il y a un mais:
> > > > (PS: J'ai mis le code VB5 en bas, pour que vous compreniez mieux,
> > > j'espère)
> > > >
> > > > Cela ne résout pas le problème du dernier item.
> > > > Dans ce cas et uniquement dans le cas du dernier item du tableau,
> > > > If (Value <> OldValue) ne vaudra jamais False donc, le dernier


item
ne
> > > sera
> > > > pas pris en compte.
> > > >
> > > > J'explique ce que je veux faire.
> > > > A chaque rupture, je veux envoyer les valeurs vers un SubRoutine.
> > > >
> > > > Par exemple, quand je vois arriver "BBB", cela veut dire que les
"AAA"
> > > sont
> > > > terminés alors j'envoie tous les "AAA" vers ma SubRoutine. Ensuite
> quand
> > > je
> > > > vois arriver "CCC", cela veut dire que les "BBB" sont terminés


alors
> > > > j'envoie tous les "BBB" vers ma SubRoutine, etc, etc...
> > > >
> > > > Dans tous les cas, sauf le dernier, ma subroutine aura deux


éléments
:
> > > > Montableau(0), Montableau(1) ' "AAA"
> > > > Montableau(2), Montableau(3) ' "BBB"
> > > >
> > > > Seulement dans le dernier cas, il n'yaura qu'un seul item :
> > > > Montableau(10) ' "FFF" ' il manque le dernier !
> > > >
> > > > J'espère avoir été assez explicite ;-)
> > > >
> > > > Merci
> > > > Olivier
> > > >
> > > >
> > >
> >
>



'///////////////////////////////////////////////////////////////////////////
> > > > ////////////////////////////////
> > > > Dim OldValue As String
> > > > Dim Chaine As String
> > > > Dim MonTableau(11) As String
> > > >
> > > > Private Sub FillArray()
> > > > MonTableau(0) = "AAA"
> > > > MonTableau(1) = "AAA"
> > > >
> > > > MonTableau(2) = "BBB"
> > > > MonTableau(3) = "BBB"
> > > >
> > > > MonTableau(4) = "CCC"
> > > > MonTableau(5) = "CCC"
> > > >
> > > > MonTableau(6) = "DDD"
> > > > MonTableau(7) = "DDD"
> > > >
> > > > MonTableau(8) = "EEE"
> > > > MonTableau(9) = "EEE"
> > > >
> > > > MonTableau(10) = "FFF"
> > > > MonTableau(11) = "FFF"
> > > >
> > > > End Sub
> > > >
> > > > Private Sub Command1_Click()
> > > >
> > > > Call FillArray
> > > >
> > > > For i = 0 To 11
> > > >
> > > > If OldValue <> MonTableau(i) And i > 0 Then
> > > > ' ON NE PASSE JAMAIS ICI AVEC LES VALEURS "FFFFFF" ?
> > Pourquoi
> > > ?
> > > > Call Traitement(Chaine)
> > > > Chaine = ""
> > > >
> > > > End If
> > > >
> > > > Chaine = Chaine & MonTableau(i)
> > > > OldValue = MonTableau(i)
> > > > Next i
> > > >
> > > > End Sub
> > > >
> > > > Private Sub Traitement(Value As String)
> > > > ' Içi, dans le dernier cas, Value ne vaut jamais "FFFFFF" ???
> > > > MsgBox Value
> > > > End Sub
> > > >
> > > >
> > >
> >
>



'///////////////////////////////////////////////////////////////////////////
> > > > ////////////////////////////////
> > > >
> > > >
> > > >
> > > > "Bruno" a écrit dans le message de
> > > > news:bj2hhs$iob$
> > > > >
> > > > > "(( Olivier ))" a écrit dans le message de
> > > > > news:%
> > > > > > Bonjour,
> > > > > >
> > > > > > J'ai un problème que je n'arrive pas a résoudre.
> > > > > >
> > > > > > J'ai un tableau de String, par exemple:
> > > > > >
> > > > > > Montableau(0) = "AAA"
> > > > > > Montableau(1) = "AAA"
> > > > > > Montableau(2) = "BBB"
> > > > > > Montableau(3) = "BBB"
> > > > > > Montableau(4) = "CCC"
> > > > > > Montableau(5) = "CCC"
> > > > > >
> > > > > > Je voudrais faire une boucle sur chaque items et lorsque la
valeur
> > > > change
> > > > > > effectuer un traitement.
> > > > > > Bon, la boucle j'y arive, mais il me saute toujours le dernier
> items
> > ?
> > > > > >
> > > > > >
> > > > > > Merci
> > > > > > Olivier
> > > > > >
> > > > > Bonjour,
> > > > >
> > > > > Faire une comparaison entre deux tableaux, le second est le


reflet
> du
> > > > > premier. Si le second est identique (par son contenu) au


premier,
> les
> > > > > valeurs n'ont pas changée ...
> > > > >
> > > > > Cdlt,
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>




Avatar
\(\( Olivier \)\)
Votre code fonctionne bien, mais il ne résouds pas mon problème.
Il est possible que je me sois mal exprimé.



"Bismark Prods" a écrit dans le message de
news:
Désolé mais si je fais mon exemple cela me sort AAA-> FFF ! donc tous les
items sont visibles !

"(( Olivier ))" a écrit dans le message de
news:
> Rien de ne sert de s'énerver ;-)
> J'ai utilisé votre code et il ne fonctionne pas en ce qui concerne le
> dernier item.
> Mais bon, je crois que je vais arreter la discussion car je pense que je
ne
> suis pas fait bien comprendre.
> C'est pas grave, je vais continuer mes recherches et surtout continuer a
> rajouter un item.add en dernier pour pouvoir faire la rupture du dernier
> item.
>
> Merci à tous pour vos réponses
> Olivier
>
>
> "Bismark Prods" a écrit dans le message de
> news:
> > Jusqu'a preuve du contraire je ne poste jamais un code qui ne


fonctionne
> pas
> > ! Et j'ai précisément fait le copier-coller puis j'ai corrigé et cela
> donne
> > le resultat escompté !
> >
> > Mais si votre intéret c'est de poster pour faire joli alors ok !
> >
> > "(( Olivier ))" a écrit dans le message de
> > news:
> > > Heu... merci , mais je crois pas que vous avez lu le message.
> > > Le code que vous m'avez donné, ne fonctionne pas mieux.
> > >
> > > S'il vous plait, essayer le mien et dites moi ce qui ne marche pas ?
> > > Faite une form + un command, un copier coller de mon code et vous
verrez
> > que
> > > cela ne marche pas.
> > >
> > >
> > >
> > > "Bismark Prods" a écrit dans le message de
> > > news:%
> > > > Private Sub Command1_Click()
> > > > Dim OldValue As String
> > > > Dim I As Long
> > > >
> > > > Call FillArray
> > > > OldValue = ""
> > > >
> > > > For I = LBound(MonTableau) To UBound(MonTableau)
> > > > If MonTableau(I) <> OldValue Then
> > > > Debug.Print MonTableau(I)
> > > > OldValue = MonTableau(I)
> > > > End If
> > > > Next I
> > > >
> > > > End Sub
> > > >
> > > > Pas besoin de se couper les cheveux en 4 !
> > > >
> > > > "(( Olivier ))" a écrit dans le message de
> > > > news:%
> > > > > Merci, merci pour tout ces efforts, mais, car il y a un mais:
> > > > > (PS: J'ai mis le code VB5 en bas, pour que vous compreniez


mieux,
> > > > j'espère)
> > > > >
> > > > > Cela ne résout pas le problème du dernier item.
> > > > > Dans ce cas et uniquement dans le cas du dernier item du


tableau,
> > > > > If (Value <> OldValue) ne vaudra jamais False donc, le dernier
item
> ne
> > > > sera
> > > > > pas pris en compte.
> > > > >
> > > > > J'explique ce que je veux faire.
> > > > > A chaque rupture, je veux envoyer les valeurs vers un


SubRoutine.
> > > > >
> > > > > Par exemple, quand je vois arriver "BBB", cela veut dire que les
> "AAA"
> > > > sont
> > > > > terminés alors j'envoie tous les "AAA" vers ma SubRoutine.


Ensuite
> > quand
> > > > je
> > > > > vois arriver "CCC", cela veut dire que les "BBB" sont terminés
alors
> > > > > j'envoie tous les "BBB" vers ma SubRoutine, etc, etc...
> > > > >
> > > > > Dans tous les cas, sauf le dernier, ma subroutine aura deux
éléments
> :
> > > > > Montableau(0), Montableau(1) ' "AAA"
> > > > > Montableau(2), Montableau(3) ' "BBB"
> > > > >
> > > > > Seulement dans le dernier cas, il n'yaura qu'un seul item :
> > > > > Montableau(10) ' "FFF" ' il manque le dernier !
> > > > >
> > > > > J'espère avoir été assez explicite ;-)
> > > > >
> > > > > Merci
> > > > > Olivier
> > > > >
> > > > >
> > > >
> > >
> >
>



'///////////////////////////////////////////////////////////////////////////
> > > > > ////////////////////////////////
> > > > > Dim OldValue As String
> > > > > Dim Chaine As String
> > > > > Dim MonTableau(11) As String
> > > > >
> > > > > Private Sub FillArray()
> > > > > MonTableau(0) = "AAA"
> > > > > MonTableau(1) = "AAA"
> > > > >
> > > > > MonTableau(2) = "BBB"
> > > > > MonTableau(3) = "BBB"
> > > > >
> > > > > MonTableau(4) = "CCC"
> > > > > MonTableau(5) = "CCC"
> > > > >
> > > > > MonTableau(6) = "DDD"
> > > > > MonTableau(7) = "DDD"
> > > > >
> > > > > MonTableau(8) = "EEE"
> > > > > MonTableau(9) = "EEE"
> > > > >
> > > > > MonTableau(10) = "FFF"
> > > > > MonTableau(11) = "FFF"
> > > > >
> > > > > End Sub
> > > > >
> > > > > Private Sub Command1_Click()
> > > > >
> > > > > Call FillArray
> > > > >
> > > > > For i = 0 To 11
> > > > >
> > > > > If OldValue <> MonTableau(i) And i > 0 Then
> > > > > ' ON NE PASSE JAMAIS ICI AVEC LES VALEURS "FFFFFF" ?
> > > Pourquoi
> > > > ?
> > > > > Call Traitement(Chaine)
> > > > > Chaine = ""
> > > > >
> > > > > End If
> > > > >
> > > > > Chaine = Chaine & MonTableau(i)
> > > > > OldValue = MonTableau(i)
> > > > > Next i
> > > > >
> > > > > End Sub
> > > > >
> > > > > Private Sub Traitement(Value As String)
> > > > > ' Içi, dans le dernier cas, Value ne vaut jamais "FFFFFF"


???
> > > > > MsgBox Value
> > > > > End Sub
> > > > >
> > > > >
> > > >
> > >
> >
>



'///////////////////////////////////////////////////////////////////////////
> > > > > ////////////////////////////////
> > > > >
> > > > >
> > > > >
> > > > > "Bruno" a écrit dans le message de
> > > > > news:bj2hhs$iob$
> > > > > >
> > > > > > "(( Olivier ))" a écrit dans le message de
> > > > > > news:%
> > > > > > > Bonjour,
> > > > > > >
> > > > > > > J'ai un problème que je n'arrive pas a résoudre.
> > > > > > >
> > > > > > > J'ai un tableau de String, par exemple:
> > > > > > >
> > > > > > > Montableau(0) = "AAA"
> > > > > > > Montableau(1) = "AAA"
> > > > > > > Montableau(2) = "BBB"
> > > > > > > Montableau(3) = "BBB"
> > > > > > > Montableau(4) = "CCC"
> > > > > > > Montableau(5) = "CCC"
> > > > > > >
> > > > > > > Je voudrais faire une boucle sur chaque items et lorsque la
> valeur
> > > > > change
> > > > > > > effectuer un traitement.
> > > > > > > Bon, la boucle j'y arive, mais il me saute toujours le


dernier
> > items
> > > ?
> > > > > > >
> > > > > > >
> > > > > > > Merci
> > > > > > > Olivier
> > > > > > >
> > > > > > Bonjour,
> > > > > >
> > > > > > Faire une comparaison entre deux tableaux, le second est le
reflet
> > du
> > > > > > premier. Si le second est identique (par son contenu) au
premier,
> > les
> > > > > > valeurs n'ont pas changée ...
> > > > > >
> > > > > > Cdlt,
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>




Avatar
\(\( Olivier \)\)
Pendant la boucle, je mémorise les valeurs identiques.
Dès que je constate une rupture des valeurs alors je fais un traitement sur
les valeurs mémorisées.
A la fin du traitement, j'efface les valeurs et je continu la boucle.

Mon problème est que pour le dernier item, comme il est le dernier, il n'y a
pas de rupture possible (C'est là, je crois, qu'on ne se comprends pas).

Ma question est comment faire.

Je fais comme André Joubert : traitement en sortant du FOR/NEXT et ainsi les
valeurs mémorisées sont traitées.
Bon, ca ressemble à du bricolage, mais ça marche

Merci pour vos réponse

Olivier




"Bismark Prods" a écrit dans le message de
news:e4Qy$
Tu veux afficher juste avant la rupture au contraire de ce que fais mon


code
d'afficer l'item qui se trouve juste apres cette dernière ?

"(( Olivier ))" a écrit dans le message de
news:
> Votre code fonctionne bien, mais il ne résouds pas mon problème.
> Il est possible que je me sois mal exprimé.
>
>
>
> "Bismark Prods" a écrit dans le message de
> news:
> > Désolé mais si je fais mon exemple cela me sort AAA-> FFF ! donc tous
les
> > items sont visibles !
> >
> > "(( Olivier ))" a écrit dans le message de
> > news:
> > > Rien de ne sert de s'énerver ;-)
> > > J'ai utilisé votre code et il ne fonctionne pas en ce qui concerne


le
> > > dernier item.
> > > Mais bon, je crois que je vais arreter la discussion car je pense


que
je
> > ne
> > > suis pas fait bien comprendre.
> > > C'est pas grave, je vais continuer mes recherches et surtout


continuer
a
> > > rajouter un item.add en dernier pour pouvoir faire la rupture du
dernier
> > > item.
> > >
> > > Merci à tous pour vos réponses
> > > Olivier
> > >
> > >
> > > "Bismark Prods" a écrit dans le message de
> > > news:
> > > > Jusqu'a preuve du contraire je ne poste jamais un code qui ne
> fonctionne
> > > pas
> > > > ! Et j'ai précisément fait le copier-coller puis j'ai corrigé et
cela
> > > donne
> > > > le resultat escompté !
> > > >
> > > > Mais si votre intéret c'est de poster pour faire joli alors ok !
> > > >
> > > > "(( Olivier ))" a écrit dans le message de
> > > > news:
> > > > > Heu... merci , mais je crois pas que vous avez lu le message.
> > > > > Le code que vous m'avez donné, ne fonctionne pas mieux.
> > > > >
> > > > > S'il vous plait, essayer le mien et dites moi ce qui ne marche


pas
?
> > > > > Faite une form + un command, un copier coller de mon code et


vous
> > verrez
> > > > que
> > > > > cela ne marche pas.
> > > > >
> > > > >
> > > > >
> > > > > "Bismark Prods" a écrit dans le message de
> > > > > news:%
> > > > > > Private Sub Command1_Click()
> > > > > > Dim OldValue As String
> > > > > > Dim I As Long
> > > > > >
> > > > > > Call FillArray
> > > > > > OldValue = ""
> > > > > >
> > > > > > For I = LBound(MonTableau) To UBound(MonTableau)
> > > > > > If MonTableau(I) <> OldValue Then
> > > > > > Debug.Print MonTableau(I)
> > > > > > OldValue = MonTableau(I)
> > > > > > End If
> > > > > > Next I
> > > > > >
> > > > > > End Sub
> > > > > >
> > > > > > Pas besoin de se couper les cheveux en 4 !
> > > > > >
> > > > > > "(( Olivier ))" a écrit dans le message de
> > > > > > news:%
> > > > > > > Merci, merci pour tout ces efforts, mais, car il y a un


mais:
> > > > > > > (PS: J'ai mis le code VB5 en bas, pour que vous compreniez
> mieux,
> > > > > > j'espère)
> > > > > > >
> > > > > > > Cela ne résout pas le problème du dernier item.
> > > > > > > Dans ce cas et uniquement dans le cas du dernier item du
> tableau,
> > > > > > > If (Value <> OldValue) ne vaudra jamais False donc, le


dernier
> > item
> > > ne
> > > > > > sera
> > > > > > > pas pris en compte.
> > > > > > >
> > > > > > > J'explique ce que je veux faire.
> > > > > > > A chaque rupture, je veux envoyer les valeurs vers un
> SubRoutine.
> > > > > > >
> > > > > > > Par exemple, quand je vois arriver "BBB", cela veut dire que
les
> > > "AAA"
> > > > > > sont
> > > > > > > terminés alors j'envoie tous les "AAA" vers ma SubRoutine.
> Ensuite
> > > > quand
> > > > > > je
> > > > > > > vois arriver "CCC", cela veut dire que les "BBB" sont


terminés
> > alors
> > > > > > > j'envoie tous les "BBB" vers ma SubRoutine, etc, etc...
> > > > > > >
> > > > > > > Dans tous les cas, sauf le dernier, ma subroutine aura deux
> > éléments
> > > :
> > > > > > > Montableau(0), Montableau(1) ' "AAA"
> > > > > > > Montableau(2), Montableau(3) ' "BBB"
> > > > > > >
> > > > > > > Seulement dans le dernier cas, il n'yaura qu'un seul item :
> > > > > > > Montableau(10) ' "FFF" ' il manque le dernier !
> > > > > > >
> > > > > > > J'espère avoir été assez explicite ;-)
> > > > > > >
> > > > > > > Merci
> > > > > > > Olivier
> > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>



'///////////////////////////////////////////////////////////////////////////
> > > > > > > ////////////////////////////////
> > > > > > > Dim OldValue As String
> > > > > > > Dim Chaine As String
> > > > > > > Dim MonTableau(11) As String
> > > > > > >
> > > > > > > Private Sub FillArray()
> > > > > > > MonTableau(0) = "AAA"
> > > > > > > MonTableau(1) = "AAA"
> > > > > > >
> > > > > > > MonTableau(2) = "BBB"
> > > > > > > MonTableau(3) = "BBB"
> > > > > > >
> > > > > > > MonTableau(4) = "CCC"
> > > > > > > MonTableau(5) = "CCC"
> > > > > > >
> > > > > > > MonTableau(6) = "DDD"
> > > > > > > MonTableau(7) = "DDD"
> > > > > > >
> > > > > > > MonTableau(8) = "EEE"
> > > > > > > MonTableau(9) = "EEE"
> > > > > > >
> > > > > > > MonTableau(10) = "FFF"
> > > > > > > MonTableau(11) = "FFF"
> > > > > > >
> > > > > > > End Sub
> > > > > > >
> > > > > > > Private Sub Command1_Click()
> > > > > > >
> > > > > > > Call FillArray
> > > > > > >
> > > > > > > For i = 0 To 11
> > > > > > >
> > > > > > > If OldValue <> MonTableau(i) And i > 0 Then
> > > > > > > ' ON NE PASSE JAMAIS ICI AVEC LES VALEURS


"FFFFFF"
?
> > > > > Pourquoi
> > > > > > ?
> > > > > > > Call Traitement(Chaine)
> > > > > > > Chaine = ""
> > > > > > >
> > > > > > > End If
> > > > > > >
> > > > > > > Chaine = Chaine & MonTableau(i)
> > > > > > > OldValue = MonTableau(i)
> > > > > > > Next i
> > > > > > >
> > > > > > > End Sub
> > > > > > >
> > > > > > > Private Sub Traitement(Value As String)
> > > > > > > ' Içi, dans le dernier cas, Value ne vaut jamais


"FFFFFF"
> ???
> > > > > > > MsgBox Value
> > > > > > > End Sub
> > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>



'///////////////////////////////////////////////////////////////////////////
> > > > > > > ////////////////////////////////
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > "Bruno" a écrit dans le message de
> > > > > > > news:bj2hhs$iob$
> > > > > > > >
> > > > > > > > "(( Olivier ))" a écrit dans le message de
> > > > > > > > news:%
> > > > > > > > > Bonjour,
> > > > > > > > >
> > > > > > > > > J'ai un problème que je n'arrive pas a résoudre.
> > > > > > > > >
> > > > > > > > > J'ai un tableau de String, par exemple:
> > > > > > > > >
> > > > > > > > > Montableau(0) = "AAA"
> > > > > > > > > Montableau(1) = "AAA"
> > > > > > > > > Montableau(2) = "BBB"
> > > > > > > > > Montableau(3) = "BBB"
> > > > > > > > > Montableau(4) = "CCC"
> > > > > > > > > Montableau(5) = "CCC"
> > > > > > > > >
> > > > > > > > > Je voudrais faire une boucle sur chaque items et lorsque
la
> > > valeur
> > > > > > > change
> > > > > > > > > effectuer un traitement.
> > > > > > > > > Bon, la boucle j'y arive, mais il me saute toujours le
> dernier
> > > > items
> > > > > ?
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > Merci
> > > > > > > > > Olivier
> > > > > > > > >
> > > > > > > > Bonjour,
> > > > > > > >
> > > > > > > > Faire une comparaison entre deux tableaux, le second est


le
> > reflet
> > > > du
> > > > > > > > premier. Si le second est identique (par son contenu) au
> > premier,
> > > > les
> > > > > > > > valeurs n'ont pas changée ...
> > > > > > > >
> > > > > > > > Cdlt,
> > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>




Avatar
Hervé
"(( Olivier ))" a écrit dans le message ...
Pendant la boucle, je mémorise les valeurs identiques.
Dès que je constate une rupture des valeurs alors je fais un traitement sur
les valeurs mémorisées.
A la fin du traitement, j'efface les valeurs et je continu la boucle.

Mon problème est que pour le dernier item, comme il est le dernier, il n'y


a
pas de rupture possible (C'est là, je crois, qu'on ne se comprends pas).

Ma question est comment faire.

Je fais comme André Joubert : traitement en sortant du FOR/NEXT et ainsi


les
valeurs mémorisées sont traitées.
Bon, ca ressemble à du bricolage, mais ça marche

Merci pour vos réponse

Olivier



Tu peux peut-être faire :

Dim OldValue As String = tableau(LBound(tableau));
For i = LBound(tableau) To UBound(tableau)
If tableau(i) <> OldValue Or i = UBound(tableau) Then
'traitement
...
OldValue = tableau(i)
End If
Next i

c'est-à-dire :
* traitement si la valeur actuelle n'est plus la même que celle de l'indice
précédent
* OU traitement si c'est la dernière valeur du tableau

Hervé

PS:code non testé, donc peut-être des erreurs à la compilation
Avatar
David
tu peux peut etre rajouter un element a ton tableau du genre fin du tableau
comme les chaine de caractere en C ou un if je suis au dernier element dans
ta boucle

"(( Olivier ))" a écrit dans le message de news:
#
Bonjour,

J'ai un problème que je n'arrive pas a résoudre.

J'ai un tableau de String, par exemple:

Montableau(0) = "AAA"
Montableau(1) = "AAA"
Montableau(2) = "BBB"
Montableau(3) = "BBB"
Montableau(4) = "CCC"
Montableau(5) = "CCC"

Je voudrais faire une boucle sur chaque items et lorsque la valeur change
effectuer un traitement.
Bon, la boucle j'y arive, mais il me saute toujours le dernier items ?


Merci
Olivier




Avatar
patrice henrio
Je crois que le pb vient du fait qu'il ne s'agit pas d'une boucle fro next.
En effet le traitement n'est pas le même pour chaque i. soit on essaie de
faire le même traiement en testant si i est le dernier index du tableau (if
(value<>oldvalue) or (i=Ubound(Tableau) then traitement), soit on utilise un
do loop en testant l'arrivée à la fin du tableau.
Je ne suis pas sûr d'être très clair mais volià ce à quoi j'arrive

Dim OldValue As String
Dim Chaine As String
Dim MonTableau(11) As String

Private Sub Command1_Click()

Call FillArray
OldValue=MonTableau(0)
Chaine=MonTableau(0)
i=1
Do
If (i=Ubound(Tableau) ) Then
Call Traitement(Chaine)
Exit do
Else If (OldValue<>MonTableau(i)) then
Call Traitement(Chaine)
Chaine=""
End If
Chaine=Chaine & MonTableau(i)
OldValue=MonTableau(i)
Loop
End Sub

Je remarque cependant que dans le code, Chaine ne contient jamais "FFFFFF",
ni d'ailleurs "AAAAAA" ou "BBBBBB" ...
Pour cela il faut rajouter après les deux if : Chaine=Chaine & MonTableau(i)
comme ci-dessous. De plus l'affectation oldvalue=Montableau(i) se fait même
si elle n'est pas utile.
je propose donc :

Dim OldValue As String
Dim Chaine As String
Dim MonTableau(11) As String

Private Sub Command1_Click()

Call FillArray
OldValue=MonTableau(0)
Chaine=""
i=0
Do
Chaine=Chaine & MonTableau(i)
If i>0 then
If (i=Ubound(Tableau) ) Then
Call Traitement(Chaine)
Exit do
Else If (OldValue<>MonTableau(i)) then
Call Traitement(Chaine)
Chaine=""
OldValue=MonTableau(i+1)
End If
i=i+1
Loop
End Sub
1 2