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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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)
Dans : news:DF6A542F-B029-474B-8E37-CD46E91F05C6@microsoft.com,
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)
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)
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)
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:DF6A542F-B029-474B-8E37-CD46E91F05C6@microsoft.com,
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)
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)
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)
Dans : news:9BE99002-E0B2-4270-BFFB-AD2BCA155647@microsoft.com,
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)
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)
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)
merci beaucoup Fred de ces précisions !
bien cordialement,
Vincent_C
"Fred" a écrit :
Dans : news:9BE99002-E0B2-4270-BFFB-AD2BCA155647@microsoft.com,
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)
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)