Numérotation automatique.

Petronie

XLDnaute Occasionnel
Bonsoir les Foromeurs, bonsoir les Foromeuses.
J'ai un petit soucis.
J'ai créé un fichier pour pouvoir faire un classement de dossiers aux archives.
Je dois entrer des données dans un USF comme, par exemple, le nom du client , son prénom, le nom de son épouse, et le numéro de dossier du client.
Quand on entre le n° de dossier, automatiquement apparraissent dans l'USF, le n° d'archivage et le n° de bac dans lequel on va ranger le dossier.
Pour le n° d'archivage, pas de problème, je lui dit simplement de prendre le dernier n° attribué et d'ajouter "1". Par contre pour le n° de bac, ça pose problème.
Un bac doit contenir 100 dossiers. Donc du premier dossier à archiver au 100ème, ils vont dans le bac "1". Puis du 101ème dossier au 200ème, ils vont dans le bac 2, et ainsi de suite.
Je n'avais pas de problème jusqu'à ce que j'arrive au bac 10. Là, il ne met plus de n° et ça devient "0".
Je lui donnais comme instruction: ( en sachant que "J5" à une formule du type "=NB(A5:A19700)" , pour qu'il sache que quand il y a X dossiers d'encodés qu'il faut mettre tel n°)

Private Sub NBac_Change()

End Sub

Private Sub NClient1_AfterUpdate()

Range("g65535").End(xlUp).Select
NArch = ActiveCell.Offset(0, -6).Value + 1 'NArch est égal au n° d'archivage
' Mettre un n° au bac
If NArch >= "0" And NArch <= "100" Then
NBac.Value = "1"
End If
If NArch > "100" And NArch <= "200" Then
NBac.Value = "2"
End If
If NArch > "200" And NArch <= "300" Then
NBac.Value = "3"
End If
If NArch > "300" And NArch <= "400" Then
NBac.Value = "4"
End If
If NArch > "400" And NArch <= "500" Then
NBac.Value = "5"
End If
If Range("J5").Value > "500" And Range("J5").Value <= "600" Then
NBac.Value = "6"
End If
If Range("J5") > "600" And Range("J5") <= "700" Then
NBac.Value = "7"
End If
If Range("J5") > "700" And Range("J5") <= "800" Then
NBac.Value = "8"
End If
If Range("J5") > "800" And Range("J5") <= "900" Then
NBac.Value = "9"
End If
If Range("J5") > "900" And Range("J5") <= "1000" Then
NBac.Value = "10"
End If
If Range("J5") > "1000" And Range("J5") <= "1100" Then
NBac.Value = "11"
End If
If Range("J5") > "1100" And Range("J5") <= "1200" Then
NBac.Value = "12"
End If


Et ainsi de suite pour pouvoir faire 100 ou 200 bacs, je ne sais pas de trop. là, je m'étais arrêté à 50 bacs parce que ça posait problème avec le "6" et le "60". Quand il fallait le bac "6", il mettait "60" donc du coup, j'ai été jusque 50 mais maintenant, je me rends compte que de toute façon ça ne va pas non plus après "9".
Au tout début, j'avais une formule bien définie (une sorte de division) mais au fur at à mesur, il diminuait le nombre de dossiers par bac donc ça n'allait pas non plus.
C'était:
Private Sub NClient1_AfterUpdate()

NBac = 1 + Int((Range("J5").Value - 1) / 100)
Range("g65535").End(xlUp).Select
NArch = ActiveCell.Offset(0, -6).Value + 1
End Sub


Est-ce quelqu'un sait me dépanner? Nous nous en servons au travail et du coup, on est bloqué.
Merci d'avance à ceux qui peuvent m'aider.
Bonne soirée.
 

Petronie

XLDnaute Occasionnel
Re : Numérotation automatique.

Ben non, ça ne marche pas non plus.
Etant donné que "J5" n'est quasiment jamais un chiffre rond,
j'ai des bacs du style "8,4", " 8,5",...
Il faudrait pouvoir lui dire que quand le n° d'archive est égal à 840, par exemple, qu'il doit mettre le bac "8" en gros, il doit partir du n° d'archive qui est ici "840" et prendre le 3ème chiffre en partant de la droite (ou 3ème et 4ème chiffres quand on arrivera dans des nombres beaucoup plus grands). Quand on arrivera à des nombres comme 8400, il devra à ce moment-là, prendre "84". D'un autre côté, c'est pas tellement fesable pour les plus petits chiffres....
Bref je me creuse la tête et je ne vois pas comment l'exprimer. Je trouvais que ma façon de faire au départ n'était pas mauvaise mais je ne comprends pas pourquoi ça ne fonctionne pas toujours.
 

Eric 45

XLDnaute Occasionnel
Re : Numérotation automatique.

Bonjour à tous
Bonjour Petronie, Gruick

Si je peux me permettre, essaie cela :

Soit :

en VBA : NArch.value= Round(NArc/100;0) ou
ou tout simplement (sans vérif) : NArch.value= Round((ActiveCell.Offset(0, -6).Value + 1)/100,0)

en fonction : Arrondi.sup (A1/100,0) ou arrondi.inf tout dépend ce que tu veux obtenir. Dans ton cas, si j'ai bien compris il faudrait prendre arrondi.sup

A+
 

Gruick

XLDnaute Accro
Re : Numérotation automatique.

Bonjour à tous,
Surpris au réveil par un message...
Pétronie, je te joints ce petit fichier et sa macro d'une ligne, pour prouver que mon idée est bonne.
A plus,
Gruick
 

Pièces jointes

  • Petronie.xls
    17 KB · Affichages: 95

Petronie

XLDnaute Occasionnel
Re : Numérotation automatique.

Merci Eric 45,
mais c'est pas encore tout à fait ça parce que là, tu te réfère au n° d'archive (NArch) hors moi, c'est avec le n° de bac que j'ai un soucis. Et je me base sur la cellule "J5" et pas sur le n° d'Archive.
Gruik, je vais regarder ton petit fichier et je te redis quoi.
Merci à vous deux.
 

Petronie

XLDnaute Occasionnel
Re : Numérotation automatique.

Bon alors,
Gruik,
je viens de faire des essais avec ton fichier.
Comprends pas, avant, ça ne fonctionnait pas du tout et maintenant, en l'adaptant un rien j'y suis presque. Seulement il y a encore quelque chose que je ne comprends pas, par exemple quand je mets le n° d'archivage 701, il met encore dans le bac 7 alors que ça devrait déjà être dans le bac 8 mais bon, c'est pas très grave, à partir de 702, ça fonctionne correctement.
Encore merci à vous.
 

Petronie

XLDnaute Occasionnel
Re : Numérotation automatique.

Oups, désolée Wilfried_42, je viens seulement de voir ton message.
C'est gentil mais il y a une donnée que tu oubli, c'est que le n° de Bac et d'Archivage, c'est dans l'USF que je voudrais les voir apparraître d'abord et ensuite (et là, ça va), ils s'inscrivent automatiquement dans mes cellules.
 

JACRAV

XLDnaute Nouveau
Re : Numérotation automatique.

Bonsoir Petronie et le forum
En plus des réponses qui t'ont été faites je te joins un petit fichier qui pourra peut-être t'aider.
Il s'agit d'un petit bout de code utilisant la procédure SELECT CASE
Si celà peut te servir tant mieux.
Bien cordialement
Jacques
 

Gruick

XLDnaute Accro
Re : Numérotation automatique.

Bonjour Petronie, et à tous les intervenants.

PASSE TON BAC D'ABORD aurait dit mon Papa :)p Je rigole ! )

Tu as 701, en rajoutant 99, tu obtiens 800, tu divises par 100 tu as 8.
Tu as 700, en rajoutant 99, tu obtiens 799, tu divises par 100 tu as 7.99, tu vires la mantisse, tu as 7.
Etonnant, non !
Ce n'est plus de l'Excel, c'est du calcul.
Tu as dû faire une erreur en recopiant, ou en adaptant.

Tiens, je ne trouve pas la fonction ArcCosinus dans le VBA, alors qu'elle existe dans les fonction d'Excel. C'est bien embêtant, pour le calcul orthodromique.

A plus,
Gruick
 

Gruick

XLDnaute Accro
Re : Numérotation automatique.

Hi, JP
Pas grave, je mettrai
Application.WorksheetFunction.Acos(Gruick)
C'est pas un petit problème qui va m'arrêter...
mais on peut détourner en calculant par Atn
ArcCosinusGruick=Atn(-Gruick/sqr(-Gruick*Gruick+1))+2*Atn(1)
C'est tout con, tu vois.
A plus, bon Gruick-end toi aussi
 

Eric 45

XLDnaute Occasionnel
Re : Numérotation automatique.

Bonsoir à tous

Je reviens avec un peu de retard

Pour Petronie : OK je me suis trompé, il fallait lire à la place de : en VBA NArch.value= Round(NArc/100;0) => en VBA : NBac.value= Round(NArch/100;0) et
en fonction : Arrondi.sup (A1/100,0) => en fonction : dans la cellule A1 (par exemple) =Arrondi.sup (J5/100,0)

Je pense que cela répond à ta question

Pour JACRAV : pour ma part quand je me sers de Select Case, je commence par la plus grande valeur et je décrois :
Case NArch > "1000"
NBac.Value = "10"
Case NArch > "900"
NBac.Value = "9"
....
mais dans le cas présent ne connaissant pas la valeur la plus haute, c'est différent

A+

Bon WE à tous
 

Statistiques des forums

Discussions
312 103
Messages
2 085 319
Membres
102 862
dernier inscrit
Emma35400