XL 2013 Génération de code automatique

anasimo

XLDnaute Junior
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:

Dranreb

XLDnaute Barbatruc
Bonsoir.
Pourquoi 3 lignes le 11/10/2019 et seulement une le 15/10/2019 ?
Comment le processus doit-il se déclencher ?
Cette macro dans un module standard ajoute une seule ligne :
VB:
Option Explicit
Sub Générer()
   Dim Wsh As Worksheet, Cel As Range
   Set Wsh = ActiveSheet
   Set Cel = Wsh.[B1]: If Not IsEmpty(Cel.Value) Then Set Cel = Wsh.[B1000000].End(xlUp).Offset(1)
   Cel.Value = Wsh.[A1].Value & Format(Date, "ddmmyyyy") & Wsh.[A2].Value & Format(Cel.Row, "00")
   End Sub
À affecter à un bouton de formulaire.
 
Dernière édition:

anasimo

XLDnaute Junior
Bonsoir.
Pourquoi 3 lignes le 11/10/2019 et seulement une le 15/10/2019 ?
Comment le processus doit-il se déclencher ?
Cette macro dans un module standard ajoute une seule ligne :
VB:
Option Explicit
Sub Générer()
   Dim Wsh As Worksheet, Cel As Range
   Set Wsh = ActiveSheet
   Set Cel = Wsh.[B1]: If Not IsEmpty(Cel.Value) Then Set Cel = Wsh.[B1000000].End(xlUp).Offset(1)
   Cel.Value = Wsh.[A1].Value & Format(Date, "ddmmyyyy") & Wsh.[A2].Value & Format(Cel.Row, "00")
   End Sub
À affecter à un bouton de formulaire.
Merci beaucoup Dranreb pour ta réponse....en fait je vais t'expliquer ce que je veux exactement (voir la pièce jointe)

Mon souhait
je veux générer le code sur la colonne A ,,,et ce à chaque fois que la colonne B est non vide …. Car chaque jour je dois l'alimenter de nouveaux donnéesau fur et à mesure
le code à générer doit comprendre les noms des cellules a1 et a2 de la feuille "Code" en plus de la date où le code a été généré,,,plus un numéro
exemple AZ20191012CT01
Merci beaucoup
 

Fichiers joints

Dranreb

XLDnaute Barbatruc
Bonjour.
Vous auriez quand même pu joindre le classeur xlsm équipé de la macro que j'avais indiquée et du bouton.
VB:
Option Explicit
Sub Générer()
   With Feuil2.[A2].Resize(Feuil2.[B1000000].End(xlUp).Row - 1)
      .Formula = "=""" & Feuil1.[A1].Value & Format(Date, "ddmmyyyy") & Feuil1.[A2].Value & """&TEXT(ROW()-1,""00"")"
      .Value = .Value: End With
   End Sub
 

anasimo

XLDnaute Junior
Bonjour.
Vous auriez quand même pu joindre le classeur xlsm équipé de la macro que j'avais indiquée et du bouton.
VB:
Option Explicit
Sub Générer()
   With Feuil2.[A2].Resize(Feuil2.[B1000000].End(xlUp).Row - 1)
      .Formula = "=""" & Feuil1.[A1].Value & Format(Date, "ddmmyyyy") & Feuil1.[A2].Value & """&TEXT(ROW()-1,""00"")"
      .Value = .Value: End With
   End Sub
Bonjour
J'ai essayé mais ça marche pas....je te met en pièce jointe le fichier avec le code de la macro que vous avez posté
 

Fichiers joints

Dranreb

XLDnaute Barbatruc
Supprimez votre Sub Référence()
Option Excplicit est une diredctive générale qui se met généralement en tête du module et peut être suivie de déclaration de variables globales Private ou Public, le tout avant toute procédure.
 

anasimo

XLDnaute Junior
Supprimez votre Sub Référence()
Option Excplicit est une diredctive générale qui se met généralement en tête du module et peut être suivie de déclaration de variables globales Private ou Public, le tout avant toute procédure.
je l'ai déja fait mais en vain.....si ça vous dérange pas de mettre directement la macro dans ce fichier (PJ) comme ça il sera prêt à être utilisé
 

Fichiers joints

Dranreb

XLDnaute Barbatruc
Enlevez aussi la End Sub en trop à la fin. On est bien d'accord que toutes les cellules de la colonne à partir de la A2 doivent être refaites ?
…Et que c'est la macro Générer qui doit être affectée au bouton.
 

anasimo

XLDnaute Junior
Enlevez aussi la End Sub en trop à la fin. On est bien d'accord que toutes les cellules de la colonne à partir de la A2 doivent être refaites ?
…Et que c'est la macro Générer qui doit être affectée au bouton.
non ils ne doivent pas être refaite mais gardéés ...car le lendemain je copierai d'autres données de la journée qui viendront compléter le tableau....et la macro ne marche pas tjr
 

Dranreb

XLDnaute Barbatruc
Essayez comme ça :
VB:
Option Explicit
Sub Générer()
   Dim CelADéb As Range, NbLig As Long
   Set CelADéb = Feuil2.[A1000000].End(xlUp).Offset(1)
   NbLig = Feuil2.[B1000000].End(xlUp).Row + 1 - CelADéb.Row
   If NbLig > 0 Then
   With CelADéb.Resize(NbLig)
      .Formula = "=""" & Feuil1.[A1].Value & Format(Date, "ddmmyyyy") _
         & Feuil1.[A2].Value & """&TEXT(ROW()-" & CelADéb.Row - 1 & ",""00"")"
      .Value = .Value: End With
      If NbLig > 1 Then MsgBox NbLig & " lignes ont été numérotées.", vbInformation, "Générer" _
         Else MsgBox "Une ligne à été numérotée.", vbInformation, "Générer"
   Else
      MsgBox "Aucune ligne n'a été numérotée.", vbExclamation, "Générer"
      End If
   End Sub
Cependant dans cette version il ne peut être utilisé qu'une seule fois par jour, sinon la numérotation peut reprendre à 01 à tort.
 

anasimo

XLDnaute Junior
Essayez comme ça :
VB:
Option Explicit
Sub Générer()
   Dim CelADéb As Range, NbLig As Long
   Set CelADéb = Feuil2.[A1000000].End(xlUp).Offset(1)
   NbLig = Feuil2.[B1000000].End(xlUp).Row + 1 - CelADéb.Row
   If NbLig > 0 Then
   With CelADéb.Resize(NbLig)
      .Formula = "=""" & Feuil1.[A1].Value & Format(Date, "ddmmyyyy") _
         & Feuil1.[A2].Value & """&TEXT(ROW()-" & CelADéb.Row - 1 & ",""00"")"
      .Value = .Value: End With
      If NbLig > 1 Then MsgBox NbLig & " lignes ont été numérotées.", vbInformation, "Générer" _
         Else MsgBox "Une ligne à été numérotée.", vbInformation, "Générer"
   Else
      MsgBox "Aucune ligne n'a été numérotée.", vbExclamation, "Générer"
      End If
   End Sub
Cependant dans cette version il ne peut être utilisé qu'une seule fois par jour, sinon la numérotation peut reprendre à 01 à tort.
non ça marche pas.
 

Dranreb

XLDnaute Barbatruc
Je l'ai testé, ça marche.
Je ne le joindrai pas parce que je n'ai pas l'intention de le sauvegarder.
Mais vous pouvez joindre votre xlsm où vous l'avez mis pour que je puisse voir ce qui ne va pas.
Vérifiez si les noms des objets Worksheet qui représentent les feuilles "Code" et "Données" sont bien toujours Feuil1 et Feuil2. Remarque, moi je les aurais renommé WshCode et WshDonn depuis l'explorateur de projets et dans leurs fenêtres de propriétés.
 
Dernière édition:

anasimo

XLDnaute Junior
Je l'ai testé, ça marche.
Je ne le joindrai pas parce que je n'ai pas l'intention de le sauvegarder.
Mais vous pouvez joindre votre xlsm où vous l'avez mis pour que je puisse voir ce qui ne va pas.
Vérifiez si les noms des objets Worksheet qui représentent les feuilles "Code" et "Données" sont bien toujours Feuil1 et Feuil2. Remarque, moi je les aurais renommé WshCode et WshDonn depuis l'explorateur de projets et dans leurs fenêtres de propriétés.
est ce que tu peux me l'envoyer via mail tsawri2008@gmail.com je te serais très reconnaissant
 

anasimo

XLDnaute Junior
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
 

Discussions similaires


Haut Bas