Entrées sorties 2 listes alphanum
Le
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 !
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 !

Poser une question


Vincent_C disait :
Bonjour,
Cela me rappelle quelque chose.
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.
Modifier le test du If suivant en :
If ActiveSheet.Cells(i, 1).Value ActiveSheet.Cells(i, 1).Value <> "" Then
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)
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 :
Vincent_C disait :
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)
bien cordialement,
Vincent_C
"Fred" a écrit :