Probleme macro pour renumeroter une liste automatiquemant

Signaler
Messages postés
32
Date d'inscription
vendredi 27 juillet 2007
Statut
Membre
Dernière intervention
22 novembre 2007
-
Messages postés
32
Date d'inscription
vendredi 27 juillet 2007
Statut
Membre
Dernière intervention
22 novembre 2007
-
bonjour

esque quelqu un peux me dire si mon probleme et realisable par macro et si oui quel code dois je employer.

j'ai des fiches cartonées avec des noms de clients  leurs ventes et leurs achats.
chaques fiches portent un numero

exemple de fiche

fiche N° 20
client CHAISE André

vente 1
achat 1
vente 2
achat 2

j'ai donc creer une liste pour pouvoir trier les fiches par ordre alphabetique

ma liste se forme comme ça

    A                                      B                        C

       noms                       achat/vente         N° de fiche
CHAISE André                Achat 1                   80
CHAISE André                Achat 2                   80
CHAISE André                 vente 1                   80
CHAISE André                 vente 2                   80
ARBRE Marcel                  vente 2                  1
TABLE  Jean                     Achat 2                  6

quand je tris la liste j' ai le resultat suivant

 A                                      B                        C

       noms                       achat/vente         N° de fiche

ARBRE Marcel                  vente 2                  1
CHAISE André                Achat 1                   80
CHAISE André                Achat 2                   80
CHAISE André                 vente 1                   80
CHAISE André                 vente 2                   80
TABLE  Jean                     Achat 2                  6

mon probleme est le suivant je voudrais une macro qui me permete de renumeroter les fiches apres avoir trier ma liste par ordre alphabetique pour obtenir le resultat suivant en colone D

 A                                      B                        C                        D

       noms                       achat/vente         N° de fiche        nouveau numero

ARBRE Marcel                  vente 2                  1                        1                       ligne 1
CHAISE André                Achat 1                   80                      2                       ligne 2
CHAISE André                Achat 2                   80                      2                       ligne 3
CHAISE André                 vente 1                   80                      2                       ligne 4
CHAISE André                 vente 2                   80                      2                       ligne 5
TABLE  Jean                     Achat 2                  6                        3                       ligne 6
TABLE  Pierre                   vente  2                 45                       4                       ligne 7
VASE Bernard                   Achat 1                 28                       5                       ligne 8
VASE Bernard                   Achat 2                 28                       5                       ligne 9
ZOO Pierre                        vente  2                 37                       6                       ligne 10

la fiche du client CHAISSE André devient la seconde Fiche donc toutes les lignes corespondentes porte le chiffre 2 et plus 80 et ainsi desuite pour le reste de la liste

la macro dois attribuer le chiffre 2 (suite de la série 1,2,3,4,5.....) dans la colone D temps quelle trouve le numero 80 dans la la colone C et continuer la serie quand le chiffre change

esque cela vous parait réalisable ?

je vous remerci pour vos réponses futur

6 réponses

Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Ta question étant
esque cela vous parait réalisable ?

je répondrais oui, c'est probablement réalisable.
Mais pourquoi tant qu'elle touve 80 et pas plutôt tant qu'elle trouve Chaise André ?

MPi²
Messages postés
32
Date d'inscription
vendredi 27 juillet 2007
Statut
Membre
Dernière intervention
22 novembre 2007

bonjour MPI tu vas bien ?

La raison de prendre les chiffres plutot que les noms est simple
il peut y avoir plusieurs fiches différentes avec le noms CHAISE André
donc si la macro prends en compte les noms la numerotation ne sera pas bonne

la premiere ligne de la liste sera numerotée 1 et la macro dois continuer la serie 1,2,3,4,5.......

dans le cas de CHAISE André c la fiche 80 qui se trouve en deuxieme position dans la liste donc tout les numeros 80 doivent correspondre au chiffre 2 puis la serie continue a numeroter les lignes 3,4,5.....

mon idée c que la macro numerote les fiches par rapport a la position des lignes dans la liste quand elle trouve un numero identique elle arrete la serie elle numerote les lignes 80 avec le chiffre 2 et reprends la serie quand elle trouve un numero diferrents de 80

c comme ça que je vois la chose

par contre si sur la fiche 80 CHAISE André il y a un deuxieme nom exemple

TABOURET Franck         80

elle devra aussi etre numerotée avec le chiffre 2  meme si elle se trouve en bas de la liste

sa complique un peut les choses

j'avais donc pensé utilisé un code pour compter les lignes mais je ne suis pas sur que cela fonctionne et de plus je ne sais meme pas par ou commencer

si tu a une idée sur la question fait moi signe
 merci beaucoup

bobbob83
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Pas vraiment certain d'avoir tout bien compris, mais bon... voici comment je procèderais.

En tenant compte que "Chaise André" est en colonne A (une seule cellule)
et que 80 est colonne C

Sub Test()
    Dim i As Long, nbLignes As Long
    Dim NumeroCourant As Long
   
    'définir le nombre de lignes
    nbLignes = Cells(Rows.Count, "A").End(xlUp).Row
   
    'Commencer par trier la plage
    Range("A2:D" & nbLignes).Sort _
            Key1:=Range("A2"), Order1:=xlAscending, _
            Key2:=Range("C2"), Order2:=xlAscending, Header:=xlYes
   
    'inscrire le premier numéro
    NumeroCourant = 1
   
    'Boucler et déterminer les nouveaux numéros de fiches
    For i = 2 To nbLignes        If Range("A" & i) Range("A" & i + 1) And Range("C" & i) Range("C" & i + 1) Then
            'c'est la même fiche et on change rien
            Range("D" & i) = NumeroCourant
        Else
            Range("D" & i) = NumeroCourant
            NumeroCourant = NumeroCourant + 1 'prêt pour le prochain
        End If
    Next
End Sub

MPi²
Messages postés
32
Date d'inscription
vendredi 27 juillet 2007
Statut
Membre
Dernière intervention
22 novembre 2007

bonjour et merci pour ton aide

j'ais testé ton code qui fonctionne tres bien et en plus il tri la liste en meme temps

ça donne ça

A                                      B                   C              D

       noms                 achat/vente       N° de fiche

ARBRE Marcel        vente 2                     1             1  
CHAISE André       Achat 1                   80             2
CHAISE André       Achat 2                   80             2
CHAISE André       vente 1                    80             2
CHAISE André       vente 2                    80             2
TABLE  Jean           Achat 2                    6              3
VASE Bernard        Achat 1                   28             4
VASE Bernard        Achat 2                   28             4           
ZOO Pierre             vente  2                   80             5

pour la dernierre ligne j'ai un petit soucci car ZOO Pierre se trouve sur la meme fiche que CHAISE André fiche numero 80
elle dois donc etre renuméroté 2 et pas 5 comme sur l'exemple

peux tu me dire si tu a compris ma demmande  comment modifier le code pour avoir le resultat suivant

A                                      B                   C              D

       noms                 achat/vente       N° de fiche

ARBRE Marcel        vente 2                     1             1  
CHAISE André       Achat 1                   80             2
CHAISE André       Achat 2                   80             2
CHAISE André       vente 1                    80             2
CHAISE André       vente 2                    80             2
TABLE  Jean           Achat 2                    6              3
VASE Bernard        Achat 1                   28             4
VASE Bernard        Achat 2                   28             4           
ZOO Pierre             vente  2                   80             2

merci beaucoup pour ton aide
et encore bravo pour ton travail !

bobbob83
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Probablement que le tri aurait dû être fait avec C en premier et A en deuxième...
Peux-tu tester ?

    'Commencer par trier la plage
    Range("A2:D" & nbLignes).Sort _            Key1:Range(" C2 "), Order1:xlAscending, _            Key2:Range(" A2 "), Order2:xlAscending, Header:=xlYes
 
MPi²
Messages postés
32
Date d'inscription
vendredi 27 juillet 2007
Statut
Membre
Dernière intervention
22 novembre 2007

bonsoir  MPI

j'ai testé le code en changant l'ordre de tri la colone C en premier

Range("A2:D" & nbLignes).Sort _            Key1:Range(" C2 "), Order1:xlAscending, _            Key2:Range(" A2 "), Order2:xlAscending, Header:=xlYes

et ça me donne ça

   nom              ventes        fiche    numero
arbre Jean        vente 2        1         1
tasse bernard    vente 1      14         2    ' les fiches sont pas bien classées
tasse Jean         vente         14         3
vase paul          achat         26         4
vase pierre        achat         26         5
zozo                 vente         47         6
chaise andré     vente 1      80         7
chaise andré     achat         80         7
chaise andré     vente 1      80         7
wagon marc     vente         80          8
zoo                  vente         80          9

ça me donne pas le resultat voulu les fiches et les noms  sont mal classés , pas dans le bon ordre

j'ai donc testé en supprimant la ligne en Bleu dans ce code

    'Boucler et déterminer les nouveaux numéros de fiches
    For i = 2 To nbLignes        If Range("A" & i) Range("A" & i + 1) And Range("C" & i) Range("C" & i + 1) Then

voila le resultat

nom                ventes      fiche    numero
arbre Jean        vente 2       1         1
tasse bernard   vente 1      14         2
tasse Jean        vente         14         2
vase paul         achat         26         3
vase pierre       achat         26         3
zozo                vente         47          4
chaise andré     vente 1     80          5
chaise andré    achat         80          5
chaise andré    vente 1      80          5
wagon marc    vente         80          5
zoo                 vente         80          5

ici les fiches qui on le meme numero exemple chaisse ,wagon, zoo N° 80
on la meme numerotation mais pas la bonne , 5 aulieu de 2

nom                ventes       fiche    numero
arbre Jean       vente 2     1           1
chaise andré    vente 1     80         2
chaise andré    achat        80         2
chaise andré    vente        80         2
tasse bernard   vente 1    14         3
tasse Jean       vente        14         3
vase paul        achat         26         4
vase pierre     achat         26         4
wagon marc   vente         80         2
zoo               vente          80         2
zozo              vente         47         5

REgarde bien les noms sont par ordre alphabetique et les fiches identiques porte le bon numero de classement

voila le probleme

qu en penses tu ?

Bobbob83