Incrémentation d'un numéro

genius

XLDnaute Nouveau
Incrémentation d'un numéro [RESOLU]

Bonjour à tout le monde,

Je vais essayer d'être conscis et d'expliquer au mieux à quoi je souhaiterai aboutir.

Voilà, j'ai un classeur excel nommé "nomenclature de base". j'en fait une copie chaque fois que j'ai un devis ou une commande à réaliser.
Dans ce classeur, j'ai un onglet nommé "Matériel" qui me sert de modèle de nomenclature pour tout le matériel. (Il existe également un onglet "Plan" qui sert de modèle de nomenclature pour les pièces fabriquées sur plan.

J'ai dejà un bouton qui me permet d'ajouter une feuille soit "Matériel" soit "Plan",
lors de la création de cette feuille, ma macro me la renomme en "Matériel 1" ou "Plan 1", si je veux une autre feuille, ça renomme en "Matériel 2" ou "Plan 2" etc...

Ce que je veux, c'est que dans une zone de la feuille "Matériel 1", il t ai de marqué "Page 1/n" et sur la feuille "Matériel 2", "Page 2/n" avec "n" le nombre total de feuilles "Matériel".

Voilà, dites-moi qu'est-ce qu'il vous faut pour celà, je reste à disposition.

Merci d'avance
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Incrémentation d'un numéro

Bonsoir genius,

Macro à placer dans Thisworkbook :

Code:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim w As Worksheet, Nmat As Byte, Nplan As Byte 'Nmat ou Nplan max 255
For Each w In Worksheets
  If w.Name Like "Matériel #*" Then Nmat = Nmat + 1
  If w.Name Like "Plan #*" Then Nplan = Nplan + 1
Next
If Sh.Name Like "Matériel #*" Then [A1] = "Page " & Split(Sh.Name, " ")(1) & "/" & Nmat
If Sh.Name Like "Plan #*" Then [A1] = "Page " & Split(Sh.Name, " ")(1) & "/" & Nplan
End Sub

Le nom des feuilles numérotées doivent avoir toujours un espace et un seul avant leur numéro.

Seules ces feuilles sont comptabilisées dans le total.

A+
 

genius

XLDnaute Nouveau
Re : Incrémentation d'un numéro

Bonjour job75 et merci pour votre réponse.

J'ai bien copié le code que vous m'avez fourni dans thisworkbook.
Par contre, à quoi dois-je rattacher la macro pour qu'elle soit pris en compte lorsque je clique sur le bouton "ajouter nomenclature matériel" ou "ajouter nomenclature plan"?

Merci bien.

Loïc
 

genius

XLDnaute Nouveau
Re : Incrémentation d'un numéro

Si ça peut aider, voici la macro qui pour le moment me permet de créer une nouvelle feuille "nomenclature Matériel". (il y a la même pour "plan").

'** AJOUT NOMENCLATURE MATERIEL
Sub ajout_nomenclature_matériel()
Sheets("Chemins").Select 'Sélection feuille "Chemins"
Range("Nombre_Matériel").Select 'Sélection plage "Nombre_Matériel"
nombre = ActiveCell.FormulaR1C1 'variable "nombre" prend la valeur de la plage "Nombre_Matériel"
If nombre = 25 Then 'Si nombre est supérieur à 25, Alors
MsgBox ("Maximum autorisé") 'Affiche boite de dialogue "Maximum autorisé"
Else 'Sinon
ActiveCell.FormulaR1C1 = nombre + 1 'incrément de 1 du nombre de feuilles matériel
Sheets("Matériel 1").Select 'Sélection de la feuille "Modèle Matériel"
Sheets("Matériel 1").Copy Before:=Sheets("Plan 1") 'Copie de cette feuille avant la feuille Plan 1
Range("A4:G36").Select 'Sélection de la plage (A4 à G36)
Selection.ClearContents 'Efface le contenu de la plage
Range("I4:M37").Select 'Sélection de la plage (I4 à M37)
Selection.ClearContents 'Efface le contenu de cette plage
'** RENOMMER LA FEUILLE NOUVELLEMENT CREE
numéro = nombre + 1
ActiveSheet.Name = "Matériel" & " " & numéro 'Renomme la nouvelle feuille en "Matériel n"
'** MISE A JOUR NOMBRE DE PAGES POUR NUMEROTATION PREMIERE PAGE
premier = 1 'Déclaration de la variable "premier" à la valeur = 1
Sheets("Chemins").Select 'Sélection de la feuille "Chemins"
Range("Nombre_Matériel").Select 'Sélection de la plage "Nombre_Matériel"
nombre = ActiveCell.FormulaR1C1 'variable nombre prend la valeur de la plage "Nombre_Matériel"
Sheets("Informations").Select 'Sélection feuille "informations"
Range("Numéro_Affaire").Select 'Sélection de la plage "Numéro_Affaire"
affaire = ActiveCell.FormulaR1C1 'variable "affaire" prend la valeur de la plage "Numéro_Affaire"
Sheets("Matériel 1").Select
ActiveSheet.DrawingObjects("Texte page").Select
Selection.Characters.Text = "Page:" & " " & premier & "/" & nombre
ActiveSheet.DrawingObjects("Texte numéro").Select
Selection.Characters.Text = affaire + " NM 01 "
For i% = 2 To nombre
'nombre2 = nombre - 1
Sheets("Matériel" & " " & nombre).Select
ActiveSheet.DrawingObjects("Texte page").Select
Selection.Characters.Text = "Page :" & " " & nombre & "/" & nombre
ActiveSheet.DrawingObjects("Texte numéro").Select
Selection.Characters.Text = affaire + " NM 0" + CStr(nombre)
Next i%
End If
End Sub
 

genius

XLDnaute Nouveau
Re : Incrémentation d'un numéro

Autant pour moi, je n'avais pas vu que ce que la numérotation s'affiche en dynamique en [A1].

Bon, maintenant, je vais pousser un peu le bouchon.

Sur chaque feuille "Matériel" ou "Plan", j'ai un rectangle à coins arrondis qui me sert de zone de numérotation.
pour "Matériel", la plage s'appelle "Texte page" et pour "Plan" elle s'appelle "Numéro_Page".

Comment faire pour que la numérotation aille s'y placer??

Merci bien.
 

job75

XLDnaute Barbatruc
Re : Incrémentation d'un numéro

Bonjour genius,

Bien lourde votre macro, il y a surement moyen de l'alléger en évitant les allers-retours entre feuilles, entre objets etc...

En VBA Select est presque toujours inutile. Cela dit ici, il faut en utiliser (un peu) car ils permettent d'activer la macro SheetActivate dans ThisWorkbook, et donc d'affecter le texte "Page 1/n".

Pour affecter ce texte à vos rectangles, modifiez la macro dans ThisWorkbook :

Code:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim w As Worksheet, Nmat As Byte, Nplan As Byte 'Nmat ou Nplan max 255
[COLOR="Red"]On Error Resume Next 'au cas où les objets ne sont pas encore créés[/COLOR]
For Each w In Worksheets
  If w.Name Like "Matériel #*" Then Nmat = Nmat + 1
  If w.Name Like "Plan #*" Then Nplan = Nplan + 1
Next
If Sh.Name Like "Matériel #*" Then [COLOR="Red"]Sh.DrawingObjects("Texte page").Text[/COLOR] = "Page " & Split(Sh.Name, " ")(1) & "/" & Nmat
If Sh.Name Like "Plan #*" Then [COLOR="Red"]Sh.DrawingObjects("Numéro_Page").Text [/COLOR]= "Page " & Split(Sh.Name, " ")(1) & "/" & Nplan
End Sub

J'ai placé On Error Resume Next car je ne suis pas sûr que les rectangles soient toujours créés quand vous réactivez la feuille.

A+
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 489
Messages
2 088 849
Membres
103 974
dernier inscrit
chmikha