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

Entrées sorties 2 listes alphanum

4 réponses
Avatar
Vincent_C
Bonjour,

Sur une liste en 2 colonnes. je souhaiterais
identifier toutes les entrées et sorties qui constituent les mouvements de
la colonne A à la colone B comme suit dans :
http://cjoint.com/?gpbznSYS02


auparavant j'utilisais ce code qui m'avait été donné sur ce forum, mais en
fait il ne fonctionne qu'avec du numérique :

Sub entrées_sorties_2_listes()
'Les données mois M sont en colonne 1, celles de
'mois M+1 en colonne 2.
'Elles débutent à la ligne 2.
'En fin de traitement, les entrées
'en colonne 3 et les sorties figurent en colonne 4.
'PRE REQUIS = tris des colonnes

Dim I As Long
Dim j As Long
Dim e As Long
Dim s As Long

I = 2
j = 2
e = 2
s = 2

While ActiveSheet.Cells(I, 1).Value <> "" Or ActiveSheet.Cells(j, 2).Value
<> ""
If ActiveSheet.Cells(I, 1) = ActiveSheet.Cells(j, 2) Then
I = I + 1
j = j + 1
Else
If ActiveSheet.Cells(I, 1).Value < ActiveSheet.Cells(j, 2).Value Then
ActiveSheet.Cells(s, 4).Value = ActiveSheet.Cells(I, 1)
I = I + 1
s = s + 1
Else
ActiveSheet.Cells(e, 3).Value = ActiveSheet.Cells(j, 2).Value
j = j + 1
e = e + 1
End If
End If
Wend
End Sub


d'avance merci !

4 réponses

Avatar
Fred
Dans : news:,
Vincent_C disait :
Bonjour,



Bonjour,

Sur une liste en 2 colonnes. je souhaiterais
identifier toutes les entrées et sorties qui constituent les
mouvements de la colonne A à la colone B comme suit dans :
http://cjoint.com/?gpbznSYS02


auparavant j'utilisais ce code qui m'avait été donné sur ce forum,



Cela me rappelle quelque chose.

mais en fait il ne fonctionne qu'avec du numérique :



Oui,
J'ai ajouté un test supplémentaire pour que les données vides de la
colonne 1 ne soit pas traitées si elle est plus courte que la colonne 2.


Sub entrées_sorties_2_listes()
'Les données mois M sont en colonne 1, celles de
'mois M+1 en colonne 2.
'Elles débutent à la ligne 2.
'En fin de traitement, les entrées
'en colonne 3 et les sorties figurent en colonne 4.
'PRE REQUIS = tris des colonnes

Dim I As Long
Dim j As Long
Dim e As Long
Dim s As Long

I = 2
j = 2
e = 2
s = 2

While ActiveSheet.Cells(I, 1).Value <> "" Or ActiveSheet.Cells(j,
2).Value <> ""
If ActiveSheet.Cells(I, 1) = ActiveSheet.Cells(j, 2) Then
I = I + 1
j = j + 1
Else



Modifier le test du If suivant en :

If ActiveSheet.Cells(i, 1).Value < ActiveSheet.Cells(j, 2).Value And
ActiveSheet.Cells(i, 1).Value <> "" Then

If ActiveSheet.Cells(I, 1).Value < ActiveSheet.Cells(j,
2).Value Then ActiveSheet.Cells(s, 4).Value > ActiveSheet.Cells(I, 1) I = I + 1
s = s + 1
Else
ActiveSheet.Cells(e, 3).Value = ActiveSheet.Cells(j,
2).Value j = j + 1
e = e + 1
End If
End If
Wend
End Sub



Cela devrait mieux fonctionner ainsi.
Dans ce cas, toutes les données résiduelles en colonne 2 sont
considérées comme des entrées.
Alors qu'avec l'algorithme précédent, les lignes vides de la colonne 1
étaient considérées comme des sorties, car bien sûr, il n'y avait pas
d'équivalent en colonne 2 (plus longue). Cela partait dans une boucle
infinie (ou presque) de copie des vides de la colonne 1 dans la colonne
des sorties.

--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)
Avatar
Vincent_C
bonjour Fred,

merci.

j'avais posté ce message sur le forum VB et voilà le code qui a été donné
par JB:
Sub Difference()
ligneEcrit = 2
nblignes = Sheets("feuil1").[A65000].End(xlUp).Row + 1
For I = 2 To nblignes
x = Sheets("feuil1").Cells(I, 1)
If IsError(Application.Match(x, Sheets("feuil1").[b2:b10000], 0))
Then
Cells(ligneEcrit, 3) = x
ligneEcrit = ligneEcrit + 1
End If
Next I
'--
ligneEcrit = 2
nblignes = Sheets("feuil1").[b65000].End(xlUp).Row + 1
For I = 2 To nblignes
x = Sheets("feuil1").Cells(I, 2)
If IsError(Application.Match(x, Sheets("feuil1").[a2:A10000], 0))
Then
Cells(ligneEcrit, 4) = x
ligneEcrit = ligneEcrit + 1
End If
Next I
End Sub

http://cjoint.com/?gph6MTvCs3

merci encore et bonne journée !

"Fred" a écrit :

Dans : news:,
Vincent_C disait :
> Bonjour,

Bonjour,

> Sur une liste en 2 colonnes. je souhaiterais
> identifier toutes les entrées et sorties qui constituent les
> mouvements de la colonne A à la colone B comme suit dans :
> http://cjoint.com/?gpbznSYS02
>
>
> auparavant j'utilisais ce code qui m'avait été donné sur ce forum,

Cela me rappelle quelque chose.

> mais en fait il ne fonctionne qu'avec du numérique :

Oui,
J'ai ajouté un test supplémentaire pour que les données vides de la
colonne 1 ne soit pas traitées si elle est plus courte que la colonne 2.


> Sub entrées_sorties_2_listes()
> 'Les données mois M sont en colonne 1, celles de
> 'mois M+1 en colonne 2.
> 'Elles débutent à la ligne 2.
> 'En fin de traitement, les entrées
> 'en colonne 3 et les sorties figurent en colonne 4.
> 'PRE REQUIS = tris des colonnes
>
> Dim I As Long
> Dim j As Long
> Dim e As Long
> Dim s As Long
>
> I = 2
> j = 2
> e = 2
> s = 2
>
> While ActiveSheet.Cells(I, 1).Value <> "" Or ActiveSheet.Cells(j,
> 2).Value <> ""
> If ActiveSheet.Cells(I, 1) = ActiveSheet.Cells(j, 2) Then
> I = I + 1
> j = j + 1
> Else

Modifier le test du If suivant en :

If ActiveSheet.Cells(i, 1).Value < ActiveSheet.Cells(j, 2).Value And
ActiveSheet.Cells(i, 1).Value <> "" Then

> If ActiveSheet.Cells(I, 1).Value < ActiveSheet.Cells(j,
> 2).Value Then ActiveSheet.Cells(s, 4).Value > > ActiveSheet.Cells(I, 1) I = I + 1
> s = s + 1
> Else
> ActiveSheet.Cells(e, 3).Value = ActiveSheet.Cells(j,
> 2).Value j = j + 1
> e = e + 1
> End If
> End If
> Wend
> End Sub

Cela devrait mieux fonctionner ainsi.
Dans ce cas, toutes les données résiduelles en colonne 2 sont
considérées comme des entrées.
Alors qu'avec l'algorithme précédent, les lignes vides de la colonne 1
étaient considérées comme des sorties, car bien sûr, il n'y avait pas
d'équivalent en colonne 2 (plus longue). Cela partait dans une boucle
infinie (ou presque) de copie des vides de la colonne 1 dans la colonne
des sorties.

--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)




Avatar
Fred
Dans : news:,
Vincent_C disait :
bonjour Fred,

merci.

j'avais posté ce message sur le forum VB et voilà le code qui a été
donné par JB:



Ce code consiste, pour chaque valeur lue à gauche à la rechercher à
droite (c à d implicitement parcourir la colonne de droite pour chaque
valeur de gauche jusqu'à ce qu'elle soit trouvée). Puis pour chaque
valeur lue à droite, à la rechercher à gauche (même remarque
réciproquement).
C'est une bonne utilisation des fonctions XL.

Mon algorithme est un peu moins XL (car je ne le connais pas trop). Je
ne parcours qu'une fois les deux colonnes en même temps, comme je
l'aurais fait s'il s'était agit de deux tableaux en mémoire, ou dans des
fichiers.


--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)
Avatar
Vincent_C
merci beaucoup Fred de ces précisions !

bien cordialement,

Vincent_C

"Fred" a écrit :

Dans : news:,
Vincent_C disait :
> bonjour Fred,
>
> merci.
>
> j'avais posté ce message sur le forum VB et voilà le code qui a été
> donné par JB:

Ce code consiste, pour chaque valeur lue à gauche à la rechercher à
droite (c à d implicitement parcourir la colonne de droite pour chaque
valeur de gauche jusqu'à ce qu'elle soit trouvée). Puis pour chaque
valeur lue à droite, à la rechercher à gauche (même remarque
réciproquement).
C'est une bonne utilisation des fonctions XL.

Mon algorithme est un peu moins XL (car je ne le connais pas trop). Je
ne parcours qu'une fois les deux colonnes en même temps, comme je
l'aurais fait s'il s'était agit de deux tableaux en mémoire, ou dans des
fichiers.


--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)