Génération de code automatique

anasimo

XLDnaute Occasionnel
Bonjour

Dans ma cellule A1 je vais mettre le suffixe AZ
Dans ma cellule A2 je vais mettre le suffixe CT

dans les cellules de ma colonne B je vais mettre le combiné des cellules A1 + la date du jour + A2 plus le rang de l'opération cad dans la cellule B1 je veux avoir AZ11102019CT01 . En B2 AZ11102019CT02 puis AZ11102019CT03 en B3.

mais si je continu le lendemain la date du jour de l'opération ne doit changer ...cad si j'exécute la 4eme opération le 15/10/2019. ma collone doit ressembler à ça

B1 = AZ11102019CT01
B2= AZ11102019CT02
B3= AZ11102019CT03
B4 = AZ15102019CT04

Merci de votre aide
 
Dernière édition:

anasimo

XLDnaute Occasionnel
Ah ça marche en renommant les feuilles .....merci bcp Dranreb ..... est ce que demain par exemple la date ne sera pas mise à jour
svp...si je veux qu'il génère aussi le code pour la feuille 3 qu'est ce que je dois ajouter au code ? mais au lieu de CT de la feuille 2 je vais mettre un autre code CC que je mettrai dans la cellule a3 de la feuille1
Merci infiniment
 

Dranreb

XLDnaute Barbatruc
Attendez je n'avais pas tout vu, alors :
VB:
Option Explicit
Sub Générer()
   GénérerFeuille WshDonn, WshCode.[A1].Value, WshCode.[A2].Value
   GénérerFeuille Feuil3, WshCode.[A1].Value, WshCode.[A3].Value
   End Sub
Sub GénérerFeuille(ByVal WshCibl As Worksheet, ByVal Code1 As String, ByVal Code2 As String)
   Dim CelADéb As Range, NbLig As Long, ZMsg As String
   Set CelADéb = WshCibl.[A1000000].End(xlUp).Offset(1)
   NbLig = WshCibl.[B1000000].End(xlUp).Row + 1 - CelADéb.Row
   If NbLig > 0 Then
   With CelADéb.Resize(NbLig)
      .Formula = "=""" & Code1 & Format(Date, "ddmmyyyy") _
         & Code2 & """&TEXT(ROW()-" & CelADéb.Row - 1 & ",""00"")"
      .Value = .Value: End With
      If NbLig > 1 Then ZMsg = NbLig & " lignes ont été numérotées" Else ZMsg = "Une ligne à été numérotée"
      MsgBox ZMsg & " sur """ & WshCibl.Name & """.", vbInformation, "Générer"
   Else
      MsgBox "Aucune ligne n'a été numérotée sur """ & WshCibl.Name & """.", vbExclamation, "Générer"
      End If
   End Sub
 

anasimo

XLDnaute Occasionnel
Attendez je n'avais pas tout vu, alors :
VB:
Option Explicit
Sub Générer()
   GénérerFeuille WshDonn, WshCode.[A1].Value, WshCode.[A2].Value
   GénérerFeuille Feuil3, WshCode.[A1].Value, WshCode.[A3].Value
   End Sub
Sub GénérerFeuille(ByVal WshCibl As Worksheet, ByVal Code1 As String, ByVal Code2 As String)
   Dim CelADéb As Range, NbLig As Long, ZMsg As String
   Set CelADéb = WshCibl.[A1000000].End(xlUp).Offset(1)
   NbLig = WshCibl.[B1000000].End(xlUp).Row + 1 - CelADéb.Row
   If NbLig > 0 Then
   With CelADéb.Resize(NbLig)
      .Formula = "=""" & Code1 & Format(Date, "ddmmyyyy") _
         & Code2 & """&TEXT(ROW()-" & CelADéb.Row - 1 & ",""00"")"
      .Value = .Value: End With
      If NbLig > 1 Then ZMsg = NbLig & " lignes ont été numérotées" Else ZMsg = "Une ligne à été numérotée"
      MsgBox ZMsg & " sur """ & WshCibl.Name & """.", vbInformation, "Générer"
   Else
      MsgBox "Aucune ligne n'a été numérotée sur """ & WshCibl.Name & """.", vbExclamation, "Générer"
      End If
   End Sub
donc je dois renommer la feuille1 WshCode et la feuille 2 WshDonn
 

anasimo

XLDnaute Occasionnel
Bonjour Dranreb

J'ai mis au propre le fichier contenant la macro....maintenant si vous me le permettez d'apporter juste une petite modification..en fait le code est conçu pour être généré uniquement vers la feuille CMLT...je veux qu'il le soit aussi généré pour la feuille CT et CF (en prenant les code dédiés figurant dans la feuille utilisateur)
 
Dernière édition:

anasimo

XLDnaute Occasionnel
Bonjour Dranreb

J’utilise votre code depuis plus de 2 semaines...tout marche à merveille.
Je voudrais juste, dans la mesure du possible, vous demandez une autre faveur:
je veux que vous incorporer dans le code initial, pour que le numéro de matricule se trouvant dans la cellule D17 de la feuille "Utilisateurs" soit aussi généré dans la colonne B des 3 feuilles (CLMT, CF et CT).
Merci d'avance
 

Pièces jointes

  • Classeur 6.xlsm
    24.6 KB · Affichages: 6

Dranreb

XLDnaute Barbatruc
Voir réponse post #20. Transformez la Sub Générer en une GénérerFeuille avec les 3 paramètres puis, dans une nouvelle Sub Générer devant, appelez la autant de fois qu'il y a de feuilles à traiter en spécifiant chaque fois comme 1er paramètre une expression Worksheet représentant la feuille à traiter puis les expressions valant les deux codes à y appliquer.
 
Dernière édition:

anasimo

XLDnaute Occasionnel
Merci
c
Voir réponse post #20. Transformez la Sub Générer en une GénérerFeuille avec les 3 paramètres puis, dans une nouvelle Sub Générer devant, appelez la autant de fois qu'il y a de feuilles à traiter en spécifiant chaque fois comme 1er paramètre une expression Worksheet représentant la feuille à traiter puis les expressions valant les deux codes à y appliquer.
pas grave pour les 3 feuilles, je vais me débrouiller, même si je n'ai aucune compét en VBA :)
sinon comment générer aussi le numéro de matricule D17 (feuilles utilisateur) dans la colonne B d'une des feuilles..si vous pouvez mettre le code
Merci d'avance
 

Dranreb

XLDnaute Barbatruc
Vous n'avez guère besoin de compétence spéciale puisque je vous dis ce qu'il y a à faire.
Supposons que ce soit dans la feuille CF (dont le CodeName de l'objet Worksheet vaut toujours l'énigmatique "Feuil4" au lieu de "WshCF") :
VB:
Option Explicit
Sub Générer()
   GénérerFeuille Feuil2, Feuil1.[A1].Value, Feuil1.[A2].Value
   GénérerFeuille Feuil3, Feuil1.[B1].Value, Feuil1.[B2].Value
   GénérerFeuille Feuil4, Feuil1.[C1].Value, Feuil1.[C2].Value, Feuil1.[D17].Value
   End Sub
Sub GénérerFeuille(ByVal WshCibl As Worksheet, ByVal Code1 As String, ByVal Code2 As String, Optional ByVal MatCont)
   Dim CelADéb As Range, NbLig As Long, ZMsg As String
   Set CelADéb = WshCibl.[A1000000].End(xlUp).Offset(1)
   NbLig = WshCibl.[D1000000].End(xlUp).Row + 1 - CelADéb.Row
   If NbLig > 0 Then
      With CelADéb.Resize(NbLig)
         .Formula = "=""" & Code1 & Format(Date, "ddmmyyyy") _
            & Code2 & """&TEXT(ROW()-" & CelADéb.Row - 1 & ",""00"")"
         .Value = .Value
         If Not IsMissing(MatCont) Then .Offset(, 1).Value = MatCont
         End With
      If NbLig > 1 Then ZMsg = NbLig & " lignes ont été numérotées" Else ZMsg = "Une ligne à été numérotée"
      MsgBox ZMsg & " sur """ & WshCibl.Name & """.", vbInformation, "Générer"
   Else
      MsgBox "Aucune ligne n'a été numérotée sur """ & WshCibl.Name & """.", vbExclamation, "Générer"
      End If
   End Sub
Notez que si les codes ne changent jamais vous feriez mieux de les figer :
VB:
Sub Générer()
   GénérerFeuille Feuil2, "AZ", "CLMT"
   GénérerFeuille Feuil3, "AZ", "CT"
   GénérerFeuille Feuil4, "AZ", "CF", Feuil1.[D17].Value
   End Sub
Le 3ième argument Code2 est peut être même inutile si dans la Sub GénérerFeuille il faut toujours prendre WshCibl.Name
 
Dernière édition:

Discussions similaires