OVH Cloud OVH Cloud

Incrémentation automatique

13 réponses
Avatar
ThierryP
Bonjour le forum !

J'ai besoin de créer des numéros de série incrémentés de 1 en 1 à partir de la
valeur entrée dans une cellule (ce numéro n'est pas numérique, il est de la
forme aa-xxxxxxx). En rassemblant quelques neurones fatigués, voir ci-dessous ce
que j'ai pondu. La question est : il y a surement un moyen de faire plus
rapidement et plus élégamment...... Appel aux gourous !!!

Merci d'avance à tou(te)s

----------------------
Sub Numero()
Application.EnableEvents = False
debut = ActiveCell.Value
nombre = InputBox("Quantité")
For i = 1 To nombre - 1
unite = Val(Right(debut, 1))
If unite <> 9 Then
unite = unite + 1
debut = Left(debut, Len(debut) - 1) & unite
Else
unite = 0
dizaine = Val(Right(Left(debut, Len(debut) - 1), 1))
If dizaine <> 9 Then
dizaine = dizaine + 1
debut = Left(debut, Len(debut) - 2) & dizaine & unite
Else
dizaine = 0
centaine = Val(Right(Left(debut, Len(debut) - 2), 1))
If centaine <> 9 Then
centaine = centaine + 1
debut = Left(debut, Len(debut) - 3) & centaine & dizaine & unite
Else
centaine = 0
millier = Val(Right(Left(debut, Len(debut) - 3), 1))
If millier <> 9 Then
millier = millier + 1
debut = Left(debut, Len(debut) - 4) & millier & centaine &
dizaine & unite
End If
End If
End If
End If
ActiveCell.Offset(i, 0).Value = debut
Next
Application.EnableEvents = True
End Sub

----------------


@+ thierryp
-----------------
Passer pour un idiot aux yeux d'un imbécile est une volupté de fin gourmet - G.
Courteline

3 réponses

1 2
Avatar
ThierryP
Bonjoir, comme dirait quelqu'un....
sur le principe, ça marche ! Le problème c'est que je ne sais pas à l'avance sur
quelle ligne je vais entamer une nouvelle "série de numéros de série", ni
combien de numéros je vais avoir à renseigner; c'est pour cela que je préfère
passer par une macro.

Merci !

Le 27/04/2010 14:08, Modeste a écrit :
Bonsour®
J'ai besoin de créer des numéros de série incrémentés de 1 en 1 à
partir de la valeur entrée dans une cellule (ce numéro n'est pas
numérique, il est de la forme aa-xxxxxxx).



en C1 le N° d'origine (valeur entrée dans une cellule )
en A1 la formule :
="aa-"&TEXTE($C$1+LIGNE();"0000000")

recopier la formule vers le bas autant que nécessaire



--
----
ThierryP

Passer pour un idiot aux yeux d'un imbécile est une volupté de fin gourmet
(Georges Courteline)
Avatar
MehdiH
Bonjour à tous,

Juste une parenthèse (
Outre l'automatisation de la tâche, je tiens juste à rappeler, à ceux qui
d'entre nous débutent, qu'il est tout à fait possible d'utiliser la poigner
de recopie pour obtenir le même résultat. Seul désagrément, peut être, c'est
que vous n'allez pas vous arrêter pile poile à la quantité souhaitée du
premier coup.
)

Merci pour les différentes réponses, cette diversité permet d'en apprendre
plus côté programmation.

Cordialement
MehdiH
--------------------------------------------------------
"ThierryP" a écrit dans le message de groupe de discussion :

Bonjour le forum !

J'ai besoin de créer des numéros de série incrémentés de 1 en 1 à partir
de la valeur entrée dans une cellule (ce numéro n'est pas numérique, il
est de la forme aa-xxxxxxx). En rassemblant quelques neurones fatigués,
voir ci-dessous ce que j'ai pondu. La question est : il y a surement un
moyen de faire plus rapidement et plus élégamment...... Appel aux gourous
!!!

Merci d'avance à tou(te)s

----------------------
Sub Numero()
Application.EnableEvents = False
debut = ActiveCell.Value
nombre = InputBox("Quantité")
For i = 1 To nombre - 1
unite = Val(Right(debut, 1))
If unite <> 9 Then
unite = unite + 1
debut = Left(debut, Len(debut) - 1) & unite
Else
unite = 0
dizaine = Val(Right(Left(debut, Len(debut) - 1), 1))
If dizaine <> 9 Then
dizaine = dizaine + 1
debut = Left(debut, Len(debut) - 2) & dizaine & unite
Else
dizaine = 0
centaine = Val(Right(Left(debut, Len(debut) - 2), 1))
If centaine <> 9 Then
centaine = centaine + 1
debut = Left(debut, Len(debut) - 3) & centaine & dizaine &
unite
Else
centaine = 0
millier = Val(Right(Left(debut, Len(debut) - 3), 1))
If millier <> 9 Then
millier = millier + 1
debut = Left(debut, Len(debut) - 4) & millier &
centaine & dizaine & unite
End If
End If
End If
End If
ActiveCell.Offset(i, 0).Value = debut
Next
Application.EnableEvents = True
End Sub

----------------


@+ thierryp
-----------------
Passer pour un idiot aux yeux d'un imbécile est une volupté de fin
gourmet - G. Courteline
Avatar
MehdiH
re-bonjour à tous,

Ceci m'a donné une idée de macro qui ce base sur la recopie
------------------
Sub Macro1
Dim DestPlage as string
Nombre= val(inputbox("Quantité"))
DestPlage = range ( activecell , cells ( activecell.row+ Nombre -1,
activecell.column ) ).address
Selection.autofill Destination:=range(DestPlage), Type:=xlFillDefault
End sub
------------------
Cordialement
MehdiH
-------------------------------------------
"MehdiH" a écrit dans le message de groupe de
discussion : OrXQc#
Bonjour à tous,

Juste une parenthèse (
Outre l'automatisation de la tâche, je tiens juste à rappeler, à ceux qui
d'entre nous débutent, qu'il est tout à fait possible d'utiliser la
poigner de recopie pour obtenir le même résultat. Seul désagrément, peut
être, c'est que vous n'allez pas vous arrêter pile poile à la quantité
souhaitée du premier coup.
)

Merci pour les différentes réponses, cette diversité permet d'en apprendre
plus côté programmation.

Cordialement
MehdiH
--------------------------------------------------------
"ThierryP" a écrit dans le message de groupe de discussion :

Bonjour le forum !

J'ai besoin de créer des numéros de série incrémentés de 1 en 1 à partir
de la valeur entrée dans une cellule (ce numéro n'est pas numérique, il
est de la forme aa-xxxxxxx). En rassemblant quelques neurones fatigués,
voir ci-dessous ce que j'ai pondu. La question est : il y a surement un
moyen de faire plus rapidement et plus élégamment...... Appel aux gourous
!!!

Merci d'avance à tou(te)s

----------------------
Sub Numero()
Application.EnableEvents = False
debut = ActiveCell.Value
nombre = InputBox("Quantité")
For i = 1 To nombre - 1
unite = Val(Right(debut, 1))
If unite <> 9 Then
unite = unite + 1
debut = Left(debut, Len(debut) - 1) & unite
Else
unite = 0
dizaine = Val(Right(Left(debut, Len(debut) - 1), 1))
If dizaine <> 9 Then
dizaine = dizaine + 1
debut = Left(debut, Len(debut) - 2) & dizaine & unite
Else
dizaine = 0
centaine = Val(Right(Left(debut, Len(debut) - 2), 1))
If centaine <> 9 Then
centaine = centaine + 1
debut = Left(debut, Len(debut) - 3) & centaine & dizaine
& unite
Else
centaine = 0
millier = Val(Right(Left(debut, Len(debut) - 3), 1))
If millier <> 9 Then
millier = millier + 1
debut = Left(debut, Len(debut) - 4) & millier &
centaine & dizaine & unite
End If
End If
End If
End If
ActiveCell.Offset(i, 0).Value = debut
Next
Application.EnableEvents = True
End Sub

----------------


@+ thierryp
-----------------
Passer pour un idiot aux yeux d'un imbécile est une volupté de fin
gourmet - G. Courteline



1 2