Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Ajouter une nouvelle feuille de calcule le 1er janvier de chaque année

6 réponses
Avatar
zimou
Bonjour,
j'ai besoin de votre pr=E9cieuse aide pour r=E9aliser ma macro qui va
rajouter automatiquement une nouvelle feuile nomm=E9e "2008" - pour
2008- et y ins=E9rer les donn=E9es, mais avec 2 conditions:
1 il fau que la date entr=E9e en Z_Fab_date.Value soit en C soit de
l'ann=E9e exp. 2008, et que la dte syst=E8me now() soit 2008.
la proc=E9dure en bas cr=E9e une feuille et la nomme 2008 mais
malheuresement =E0 chaque clic sur Ok.
si l'ann=E9e entr=E9e en Z_Fab_date.Value est 2007 et Now() =3D 2008 il faut
que les donn=E9es soient entr=E9e dans la feuille de calcule actuelle ou
2007.

Merci d'avance.
amicalement
Zimou

Sub Ajouter_Click()
Dim Ligne As Long

Ligne =3D Range("A65536").End(xlUp).Row + 1


Range("A" & Ligne) =3D Nlot_Mp.Value
Range("B" & Ligne) =3D Z_N_Lot.Value
Range("C" & Ligne) =3D CDate(Z_Fab_date.Value)
Range("D" & Ligne) =3D CDate(Z_Date_Lib.Value)
Range("E" & Ligne) =3D Z_Quantite.Value
Range("G" & Ligne) =3D Z_delitement.Value
Range("F" & Ligne) =3D Z_Dissolution.Value
Range("H" & Ligne) =3D Z_Humidite.Value
Range("I" & Ligne) =3D Z_PM75.Value
Range("J" & Ligne) =3D Z_PM_n7.Value
Range("K" & Ligne) =3D Z_dos.Value
If Z_Fab_date < ("01/01/2008") And Now() =3D "2008" Then

ActiveWorkbook.Sheets.Add after:=3DWorksheets(Worksheets.Count)
ActiveSheet.Name =3D Format(Now(), "yyyy")

End If

With Saisir_nouveau_lot
.Z_N_Lot.Text =3D ""
.Z_Fab_date.Text =3D Format(Now(), "dd/mm/yy")
.Z_Date_Lib.Text =3D ""
.Z_Quantite.Text =3D ""
.Z_delitement.Text =3D ""
.Z_Dissolution.Text =3D ""
.Z_Humidite.Text =3D ""
.Z_PM75.Text =3D ""
.Z_PM_n7.Text =3D ""
.Z_dos.Text =3D ""
.Nlot_Mp.Text =3D ""

End With
End Sub

6 réponses

Avatar
Trirème
Ça va Zimou ?

Si j'ai bien compris la question, tu pourras adapter ce petit bout de code à
ton cas :


Sub remplir()
' *********** phase de saisie ****************
' Ici les infos sont récupérées par des InputBox pour l'exemple.
' On peut aussi utiliser un UserForm
Nlot_Mp = InputBox("N° Lot :")
'...
' ********************************************
Z_Fab_date = InputBox("Date de fabrication")
DateFab = CDate(Z_Fab_date)
AnnéeFab = Year(DateFab)

On Error Resume Next ' la ligne suivante provoque une erreur si la
feuille n'existe pas
Set sh = Worksheets(AnnéeFab) ' si la feuille n'existe pas, prend la
valeur 'Empty'
On Error GoTo 0 ' Réinitialise le gestionnaire d'erreurs
If sh = Empty Then ' La première fois la feuille est créée
ActiveWorkbook.Sheets.Add after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = AnnéeFab
Else ' Les fois suivantes la feuille est activée
Sheets(AnnéeFab).Activate
End If
'...
' *********** recopie des valeurs dans les bonnes cellules de la bonne
feuille.
Ligne = Range("A65536").End(xlUp).Row + 1
Range("A" & Ligne) = Nlot_Mp
' ...
Range("C" & Ligne) = DateFab
' *******************************************

End Sub


Cordialement,
Trirème


Bonjour,
j'ai besoin de votre précieuse aide pour réaliser ma macro qui va
rajouter automatiquement une nouvelle feuile nommée "2008" - pour
2008- et y insérer les données, mais avec 2 conditions:
1 il fau que la date entrée en Z_Fab_date.Value soit en C soit de
l'année exp. 2008, et que la dte système now() soit 2008.
la procédure en bas crée une feuille et la nomme 2008 mais
malheuresement à chaque clic sur Ok.
si l'année entrée en Z_Fab_date.Value est 2007 et Now() = 2008 il faut
que les données soient entrée dans la feuille de calcule actuelle ou
2007.

Merci d'avance.
amicalement
Zimou

Sub Ajouter_Click()
Dim Ligne As Long

Ligne = Range("A65536").End(xlUp).Row + 1


Range("A" & Ligne) = Nlot_Mp.Value
Range("B" & Ligne) = Z_N_Lot.Value
Range("C" & Ligne) = CDate(Z_Fab_date.Value)
Range("D" & Ligne) = CDate(Z_Date_Lib.Value)
Range("E" & Ligne) = Z_Quantite.Value
Range("G" & Ligne) = Z_delitement.Value
Range("F" & Ligne) = Z_Dissolution.Value
Range("H" & Ligne) = Z_Humidite.Value
Range("I" & Ligne) = Z_PM75.Value
Range("J" & Ligne) = Z_PM_n7.Value
Range("K" & Ligne) = Z_dos.Value
If Z_Fab_date < ("01/01/2008") And Now() = "2008" Then

ActiveWorkbook.Sheets.Add after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = Format(Now(), "yyyy")

End If

With Saisir_nouveau_lot
.Z_N_Lot.Text = ""
.Z_Fab_date.Text = Format(Now(), "dd/mm/yy")
.Z_Date_Lib.Text = ""
.Z_Quantite.Text = ""
.Z_delitement.Text = ""
.Z_Dissolution.Text = ""
.Z_Humidite.Text = ""
.Z_PM75.Text = ""
.Z_PM_n7.Text = ""
.Z_dos.Text = ""
.Nlot_Mp.Text = ""

End With
End Sub




Avatar
Trirème
Dans une procédure il est préférable de définir ses variables par une
instruction DIM. Ce que tu as l'air de faire (en partie).
Concernant la bribe de code que j'ai fournie. Ajoute ceci au début :

Dim Nlot_Mp As String, Z_Fab_date As String
Dim DateFab As Date, AnnéeFab As Integer
Dim sh As Worksheet ' Initialise implicitement l'objet à 'Nothing'
Dim Ligne As Long

Et remplace :
If sh = Empty Then
par :
If sh Is Nothing Then

J'espère que les coupures de ligne intempestives ne te perturbent pas.

Cordialement,
Trirème


Ça va Zimou ?

Si j'ai bien compris la question, tu pourras adapter ce petit bout de code à
ton cas :


Sub remplir()
' *********** phase de saisie ****************
' Ici les infos sont récupérées par des InputBox pour l'exemple.
' On peut aussi utiliser un UserForm
Nlot_Mp = InputBox("N° Lot :")
'...
' ********************************************
Z_Fab_date = InputBox("Date de fabrication")
DateFab = CDate(Z_Fab_date)
AnnéeFab = Year(DateFab)

On Error Resume Next ' la ligne suivante provoque une erreur si la
feuille n'existe pas
Set sh = Worksheets(AnnéeFab) ' si la feuille n'existe pas, prend la
valeur 'Empty'
On Error GoTo 0 ' Réinitialise le gestionnaire d'erreurs
If sh = Empty Then ' La première fois la feuille est créée
ActiveWorkbook.Sheets.Add after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = AnnéeFab
Else ' Les fois suivantes la feuille est activée
Sheets(AnnéeFab).Activate
End If
'...
' *********** recopie des valeurs dans les bonnes cellules de la bonne
feuille.
Ligne = Range("A65536").End(xlUp).Row + 1
Range("A" & Ligne) = Nlot_Mp
' ...
Range("C" & Ligne) = DateFab
' *******************************************

End Sub


Cordialement,
Trirème


Bonjour,
j'ai besoin de votre précieuse aide pour réaliser ma macro qui va
rajouter automatiquement une nouvelle feuile nommée "2008" - pour
2008- et y insérer les données, mais avec 2 conditions:
1 il fau que la date entrée en Z_Fab_date.Value soit en C soit de
l'année exp. 2008, et que la dte système now() soit 2008.
la procédure en bas crée une feuille et la nomme 2008 mais
malheuresement à chaque clic sur Ok.
si l'année entrée en Z_Fab_date.Value est 2007 et Now() = 2008 il faut
que les données soient entrée dans la feuille de calcule actuelle ou
2007.

Merci d'avance.
amicalement
Zimou

Sub Ajouter_Click()
Dim Ligne As Long

Ligne = Range("A65536").End(xlUp).Row + 1


Range("A" & Ligne) = Nlot_Mp.Value
Range("B" & Ligne) = Z_N_Lot.Value
Range("C" & Ligne) = CDate(Z_Fab_date.Value)
Range("D" & Ligne) = CDate(Z_Date_Lib.Value)
Range("E" & Ligne) = Z_Quantite.Value
Range("G" & Ligne) = Z_delitement.Value
Range("F" & Ligne) = Z_Dissolution.Value
Range("H" & Ligne) = Z_Humidite.Value
Range("I" & Ligne) = Z_PM75.Value
Range("J" & Ligne) = Z_PM_n7.Value
Range("K" & Ligne) = Z_dos.Value
If Z_Fab_date < ("01/01/2008") And Now() = "2008" Then

ActiveWorkbook.Sheets.Add after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = Format(Now(), "yyyy")

End If

With Saisir_nouveau_lot
.Z_N_Lot.Text = ""
.Z_Fab_date.Text = Format(Now(), "dd/mm/yy")
.Z_Date_Lib.Text = ""
.Z_Quantite.Text = ""
.Z_delitement.Text = ""
.Z_Dissolution.Text = ""
.Z_Humidite.Text = ""
.Z_PM75.Text = ""
.Z_PM_n7.Text = ""
.Z_dos.Text = ""
.Nlot_Mp.Text = ""

End With
End Sub






Avatar
zimou
On 4 sep, 14:38, Trirème wrote:
Dans une procédure il est préférable de définir ses variables par une
instruction DIM. Ce que tu as l'air de faire (en partie).
Concernant la bribe de code que j'ai fournie. Ajoute ceci au début :

Dim Nlot_Mp As String, Z_Fab_date As String
Dim DateFab As Date, AnnéeFab As Integer
Dim sh As Worksheet ' Initialise implicitement l'objet à 'Nothing'
Dim Ligne As Long

Et remplace :
If sh = Empty Then
par :
If sh Is Nothing Then

J'espère que les coupures de ligne intempestives ne te perturbent pas.

Cordialement,
Trirème




Ça va Zimou ?

Si j'ai bien compris la question, tu pourras adapter ce petit bout de c ode à
ton cas :

Sub remplir()
' *********** phase de saisie ****************
' Ici les infos sont récupérées par des InputBox pour l'exemple.
' On peut aussi utiliser un UserForm
Nlot_Mp = InputBox("N° Lot :")
'...
' ********************************************
Z_Fab_date = InputBox("Date de fabrication")
DateFab = CDate(Z_Fab_date)
AnnéeFab = Year(DateFab)

On Error Resume Next ' la ligne suivante provoque une erreur si la
feuille n'existe pas
Set sh = Worksheets(AnnéeFab) ' si la feuille n'existe pas, prend la
valeur 'Empty'
On Error GoTo 0 ' Réinitialise le gestionnaire d'erreurs
If sh = Empty Then ' La première fois la feuille est créée
ActiveWorkbook.Sheets.Add after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = AnnéeFab
Else ' Les fois suivantes la feuille est activée
Sheets(AnnéeFab).Activate
End If
'...
' *********** recopie des valeurs dans les bonnes cellules de la bonne
feuille.
Ligne = Range("A65536").End(xlUp).Row + 1
Range("A" & Ligne) = Nlot_Mp
' ...
Range("C" & Ligne) = DateFab
' *******************************************

End Sub

Cordialement,
Trirème



Bonjour,
j'ai besoin de votre précieuse aide pour réaliser ma macro qui va
rajouter automatiquement une nouvelle feuile nommée "2008" - pour
2008- et y insérer les données, mais avec 2 conditions:
1 il fau que la date entrée en Z_Fab_date.Value soit en C soit de
l'année exp. 2008, et que la dte système now() soit 2008.
la procédure en bas crée une feuille et la nomme 2008 mais
malheuresement à chaque clic sur Ok.
si l'année entrée en Z_Fab_date.Value est 2007 et Now() = 2008 il faut
que les données soient entrée dans la feuille de calcule actuelle ou
2007.

Merci d'avance.
amicalement
Zimou

Sub Ajouter_Click()
Dim Ligne As Long

Ligne = Range("A65536").End(xlUp).Row + 1

Range("A" & Ligne) = Nlot_Mp.Value
Range("B" & Ligne) = Z_N_Lot.Value
Range("C" & Ligne) = CDate(Z_Fab_date.Value)
Range("D" & Ligne) = CDate(Z_Date_Lib.Value)
Range("E" & Ligne) = Z_Quantite.Value
Range("G" & Ligne) = Z_delitement.Value
Range("F" & Ligne) = Z_Dissolution.Value
Range("H" & Ligne) = Z_Humidite.Value
Range("I" & Ligne) = Z_PM75.Value
Range("J" & Ligne) = Z_PM_n7.Value
Range("K" & Ligne) = Z_dos.Value
If Z_Fab_date < ("01/01/2008") And Now() = "2008" Then

ActiveWorkbook.Sheets.Add after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = Format(Now(), "yyyy")

End If

With Saisir_nouveau_lot
.Z_N_Lot.Text = ""
.Z_Fab_date.Text = Format(Now(), "dd/mm/yy")
.Z_Date_Lib.Text = ""
.Z_Quantite.Text = ""
.Z_delitement.Text = ""
.Z_Dissolution.Text = ""
.Z_Humidite.Text = ""
.Z_PM75.Text = ""
.Z_PM_n7.Text = ""
.Z_dos.Text = ""
.Nlot_Mp.Text = ""

End With
End Sub- Masquer le texte des messages précédents -



- Afficher le texte des messages précédents -


Merci Trième pour ton aide,
j'ai ce problème lors de l'exécution du programe
Erreur d'exécution '1004'
Impossible de renommer une feuille comme une autre, une bibiliothèque
d'objet ou un classeur référencé par visuel basic.

lorsque la Feuille 1 est nommée feuil "par un text" ou autre chose que
"yyyy", il y a application du programme et création d'une feuille
nommée "yyyy", lors d'une 2ème entrée, il y a erreur "1004". et
création d'une feuille nommée "Feuil1". et dans le code pour débogage
la ligne suivante est séléctionnée
ActiveSheet.Name = AnnéeFab
c'est exactement ce que j'avais avec mon programme.
en résumé: nos deux programmes rajoutent une nouvelle feuille à chaque
entrée si la condition "yyyy1"# ""yyyy2"
merci



Avatar
Trirème
Bonjour Zimou

La contrepartie des déclarations de variable, c'est qu'il faut être
rigoureux quand on les utilise.
Il faut déclarer 'AnnéeFab' en String et non pas en Integer, comme ceci :
Dim DateFab As Date, AnnéeFab As String
Sans rien changer d'autre.

Le Sheet.Name doit être du texte et l'erreur venait de :
Set sh = Worksheets(AnnéeFab). À la 2ème exécution sh valait toujours
Nothing non pas à cause d'une non-existence, mais à cause d'une erreur de
type.
S'cuze pour ce contretemps.

Je te laisse contrôler les données fournies par les utilisateurs (mauvaise
date, entre autre)

Cordialement,
Trirème


On 4 sep, 14:38, Trirème wrote:
Dans une procédure il est préférable de définir ses variables par une
instruction DIM. Ce que tu as l'air de faire (en partie).
Concernant la bribe de code que j'ai fournie. Ajoute ceci au début :

Dim Nlot_Mp As String, Z_Fab_date As String
Dim DateFab As Date, AnnéeFab As Integer
Dim sh As Worksheet ' Initialise implicitement l'objet à 'Nothing'
Dim Ligne As Long

Et remplace :
If sh = Empty Then
par :
If sh Is Nothing Then

J'espère que les coupures de ligne intempestives ne te perturbent pas.

Cordialement,
Trirème




Ça va Zimou ?

Si j'ai bien compris la question, tu pourras adapter ce petit bout de code à
ton cas :

Sub remplir()
' *********** phase de saisie ****************
' Ici les infos sont récupérées par des InputBox pour l'exemple.
' On peut aussi utiliser un UserForm
Nlot_Mp = InputBox("N° Lot :")
'...
' ********************************************
Z_Fab_date = InputBox("Date de fabrication")
DateFab = CDate(Z_Fab_date)
AnnéeFab = Year(DateFab)

On Error Resume Next ' la ligne suivante provoque une erreur si la
feuille n'existe pas
Set sh = Worksheets(AnnéeFab) ' si la feuille n'existe pas, prend la
valeur 'Empty'
On Error GoTo 0 ' Réinitialise le gestionnaire d'erreurs
If sh = Empty Then ' La première fois la feuille est créée
ActiveWorkbook.Sheets.Add after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = AnnéeFab
Else ' Les fois suivantes la feuille est activée
Sheets(AnnéeFab).Activate
End If
'...
' *********** recopie des valeurs dans les bonnes cellules de la bonne
feuille.
Ligne = Range("A65536").End(xlUp).Row + 1
Range("A" & Ligne) = Nlot_Mp
' ...
Range("C" & Ligne) = DateFab
' *******************************************

End Sub

Cordialement,
Trirème



Bonjour,
j'ai besoin de votre précieuse aide pour réaliser ma macro qui va
rajouter automatiquement une nouvelle feuile nommée "2008" - pour
2008- et y insérer les données, mais avec 2 conditions:
1 il fau que la date entrée en Z_Fab_date.Value soit en C soit de
l'année exp. 2008, et que la dte système now() soit 2008.
la procédure en bas crée une feuille et la nomme 2008 mais
malheuresement à chaque clic sur Ok.
si l'année entrée en Z_Fab_date.Value est 2007 et Now() = 2008 il faut
que les données soient entrée dans la feuille de calcule actuelle ou
2007.

Merci d'avance.
amicalement
Zimou

Sub Ajouter_Click()
Dim Ligne As Long

Ligne = Range("A65536").End(xlUp).Row + 1

Range("A" & Ligne) = Nlot_Mp.Value
Range("B" & Ligne) = Z_N_Lot.Value
Range("C" & Ligne) = CDate(Z_Fab_date.Value)
Range("D" & Ligne) = CDate(Z_Date_Lib.Value)
Range("E" & Ligne) = Z_Quantite.Value
Range("G" & Ligne) = Z_delitement.Value
Range("F" & Ligne) = Z_Dissolution.Value
Range("H" & Ligne) = Z_Humidite.Value
Range("I" & Ligne) = Z_PM75.Value
Range("J" & Ligne) = Z_PM_n7.Value
Range("K" & Ligne) = Z_dos.Value
If Z_Fab_date < ("01/01/2008") And Now() = "2008" Then

ActiveWorkbook.Sheets.Add after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = Format(Now(), "yyyy")

End If

With Saisir_nouveau_lot
.Z_N_Lot.Text = ""
.Z_Fab_date.Text = Format(Now(), "dd/mm/yy")
.Z_Date_Lib.Text = ""
.Z_Quantite.Text = ""
.Z_delitement.Text = ""
.Z_Dissolution.Text = ""
.Z_Humidite.Text = ""
.Z_PM75.Text = ""
.Z_PM_n7.Text = ""
.Z_dos.Text = ""
.Nlot_Mp.Text = ""

End With
End Sub- Masquer le texte des messages précédents -



- Afficher le texte des messages précédents -


Merci Trième pour ton aide,
j'ai ce problème lors de l'exécution du programe
Erreur d'exécution '1004'
Impossible de renommer une feuille comme une autre, une bibiliothèque
d'objet ou un classeur référencé par visuel basic.

lorsque la Feuille 1 est nommée feuil "par un text" ou autre chose que
"yyyy", il y a application du programme et création d'une feuille
nommée "yyyy", lors d'une 2ème entrée, il y a erreur "1004". et
création d'une feuille nommée "Feuil1". et dans le code pour débogage
la ligne suivante est séléctionnée
ActiveSheet.Name = AnnéeFab
c'est exactement ce que j'avais avec mon programme.
en résumé: nos deux programmes rajoutent une nouvelle feuille à chaque
entrée si la condition "yyyy1"# ""yyyy2"
merci







Avatar
zimou
On 5 sep, 13:06, Trirème wrote:
Bonjour Zimou

La contrepartie des déclarations de variable, c'est qu'il faut être
rigoureux quand on les utilise.
Il faut déclarer 'AnnéeFab' en String et non pas en Integer, comme ce ci :
Dim DateFab As Date, AnnéeFab As String
Sans rien changer d'autre.

Le Sheet.Name doit être du texte et l'erreur venait de :
Set sh = Worksheets(AnnéeFab). À la 2ème exécution sh valait to ujours
Nothing non pas à cause d'une non-existence, mais à cause d'une erreu r de
type.
S'cuze pour ce contretemps.

Je te laisse contrôler les données fournies par les utilisateurs (mau vaise
date, entre autre)

Cordialement,
Trirème




On 4 sep, 14:38, Trirème wrote:
Dans une procédure il est préférable de définir ses variables par une
instruction DIM. Ce que tu as l'air de faire (en partie).
Concernant la bribe de code que j'ai fournie. Ajoute ceci au début :

Dim Nlot_Mp As String, Z_Fab_date As String
Dim DateFab As Date, AnnéeFab As Integer
Dim sh As Worksheet ' Initialise implicitement l'objet à 'Nothing'
Dim Ligne As Long

Et remplace :
If sh = Empty Then
par :
If sh Is Nothing Then

J'espère que les coupures de ligne intempestives ne te perturbent p as.

Cordialement,
Trirème




Ça va Zimou ?

Si j'ai bien compris la question, tu pourras adapter ce petit bout de code à
ton cas :

Sub remplir()
' *********** phase de saisie ****************
' Ici les infos sont récupérées par des InputBox pour l'exemp le.
' On peut aussi utiliser un UserForm
Nlot_Mp = InputBox("N° Lot :")
'...
' ********************************************
Z_Fab_date = InputBox("Date de fabrication")
DateFab = CDate(Z_Fab_date)
AnnéeFab = Year(DateFab)

On Error Resume Next ' la ligne suivante provoque une erreur si la
feuille n'existe pas
Set sh = Worksheets(AnnéeFab) ' si la feuille n'existe pas, p rend la
valeur 'Empty'
On Error GoTo 0 ' Réinitialise le gestionnaire d'erreurs
If sh = Empty Then ' La première fois la feuille est créée
ActiveWorkbook.Sheets.Add after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = AnnéeFab
Else ' Les fois suivantes la feuille est activée
Sheets(AnnéeFab).Activate
End If
'...
' *********** recopie des valeurs dans les bonnes cellules de la bo nne
feuille.
Ligne = Range("A65536").End(xlUp).Row + 1
Range("A" & Ligne) = Nlot_Mp
' ...
Range("C" & Ligne) = DateFab
' *******************************************

End Sub

Cordialement,
Trirème





Bonjour,
j'ai besoin de votre précieuse aide pour réaliser ma macro qu i va
rajouter automatiquement une nouvelle feuile nommée "2008" - po ur
2008- et y insérer les données, mais avec 2 conditions:
1 il fau que la date entrée en Z_Fab_date.Value soit en C soit de
l'année exp. 2008, et que la dte système now() soit 2008.
la procédure en bas crée une feuille et la nomme 2008 mais
malheuresement à chaque clic sur Ok.
si l'année entrée en Z_Fab_date.Value est 2007 et Now() = 2 008 il faut
que les données soient entrée dans la feuille de calcule actu elle ou
2007.

Merci d'avance.
amicalement
Zimou

Sub Ajouter_Click()
Dim Ligne As Long

Ligne = Range("A65536").End(xlUp).Row + 1

Range("A" & Ligne) = Nlot_Mp.Value
Range("B" & Ligne) = Z_N_Lot.Value
Range("C" & Ligne) = CDate(Z_Fab_date.Value)
Range("D" & Ligne) = CDate(Z_Date_Lib.Value)
Range("E" & Ligne) = Z_Quantite.Value
Range("G" & Ligne) = Z_delitement.Value
Range("F" & Ligne) = Z_Dissolution.Value
Range("H" & Ligne) = Z_Humidite.Value
Range("I" & Ligne) = Z_PM75.Value
Range("J" & Ligne) = Z_PM_n7.Value
Range("K" & Ligne) = Z_dos.Value
If Z_Fab_date < ("01/01/2008") And Now() = "2008" Then

ActiveWorkbook.Sheets.Add after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = Format(Now(), "yyyy")

End If

With Saisir_nouveau_lot
.Z_N_Lot.Text = ""
.Z_Fab_date.Text = Format(Now(), "dd/mm/yy")
.Z_Date_Lib.Text = ""
.Z_Quantite.Text = ""
.Z_delitement.Text = ""
.Z_Dissolution.Text = ""
.Z_Humidite.Text = ""
.Z_PM75.Text = ""
.Z_PM_n7.Text = ""
.Z_dos.Text = ""
.Nlot_Mp.Text = ""

End With
End Sub- Masquer le texte des messages précédents -



- Afficher le texte des messages précédents -


Merci Trième pour ton aide,
j'ai ce problème lors de l'exécution du programe
Erreur d'exécution '1004'
Impossible de renommer une feuille comme une autre, une bibiliothèque
d'objet ou un classeur référencé par visuel basic.

lorsque la Feuille 1 est nommée feuil "par un text" ou autre chose que
"yyyy", il y a application du programme et création d'une feuille
nommée "yyyy", lors d'une 2ème entrée, il y a erreur "1004". et
création d'une feuille nommée "Feuil1". et dans le code pour débo gage
la ligne suivante est séléctionnée
ActiveSheet.Name = AnnéeFab
c'est exactement ce que j'avais avec mon programme.
en résumé: nos deux programmes rajoutent une nouvelle feuille à c haque
entrée si la condition "yyyy1"# ""yyyy2"
merci- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -
Salut Trième

j'ai essaié la modification mais sans réultat toujour le meme code
d'erreur 1004.
voilà le code complet pour d'étecter une éventuelle erreur

Sub Ajouter_Click()
Dim Nlot_Mp As String, Z_Fab_date As Date
Dim DateFab As Date, AnnéeFab As String
Dim sh As Worksheet ' Initialise implicitement l'objet à 'Nothing'
Dim Ligne As Long


On Error Resume Next ' la ligne suivante provoque une erreur si la
feuille n 'existe pas
Set sh = Worksheets(AnnéeFab) ' si la feuille n'existe pas, prend la
valeur 'Empty'
On Error GoTo 0 ' Réinitialise le gestionnaire d'erreurs
If sh Is Nothing Then ' La première fois la feuille est créée
ActiveWorkbook.Sheets.Add after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = AnnéeFab
Else ' Les fois suivantes la feuille est activée
Sheets(AnnéeFab).Activate

End If

With sh
Range("A1") = "N° lot MP"
With Selection.Interior
.ColorIndex = 2
With Selection.Font
.Bold = True
.Italic = True
.Name = "ariel"
.Size = 10
End With
End With

Range("B1") = "N° de lot PF"

With Selection.Font
.Bold = True
.Italic = True
.Name = "ariel"
.Size = 10
.Color = vert
End With

Range("C1") = "Date de Fab."
With Selection.Interior
.ColorIndex = 2
With Selection.Font
.Bold = True
.Italic = True
.Name = "ariel"
.Size = 10
End With
End With
Range("D1") = "Date d'exp."
With Selection.Interior
.ColorIndex = 2
With Selection.Font
.Bold = True
.Italic = True
.Name = "ariel"
.Size = 10
End With
End With
Range("E1") = "Quantité"
With Selection.Interior
.ColorIndex = 2
With Selection.Font
.Bold = True
.Italic = True
.Name = "ariel"
.Size = 10
End With
End With
Range("G1") = "Délitement"
With Selection.Interior
.ColorIndex = 2
With Selection.Font
.Bold = True
.Italic = True
.Name = "ariel"
.Size = 10
End With
End With
Range("F1") = "Dissolution"
With Selection.Interior
.ColorIndex = 2
With Selection.Font
.Bold = True
.Italic = True
.Name = "ariel"
.Size = 10
End With
End With
Range("H1") = "Humidité"
With Selection.Interior
.ColorIndex = 2
With Selection.Font
.Bold = True
.Italic = True
.Name = "ariel"
.Size = 10
End With
End With
Range("I1") = "PM+7,5%"
With Selection.Interior
.ColorIndex = 2
With Selection.Font
.Bold = True
.Italic = True
.Name = "ariel"
.Size = 10
End With
End With
Range("J1") = "PM - 7,5%"
With Selection.Interior
.ColorIndex = 2
With Selection.Font
.Bold = True
.Italic = True
.Name = "ariel"
.Size = 10
End With
End With
Range("K1") = "Dosage"
With Selection.Interior
.ColorIndex = 2
With Selection.Font
.Bold = True
.Italic = True
.Name = "ariel"
.Size = 10
End With
End With
End With

Ligne = Range("A65536").End(xlUp).Row + 1

Range("A" & Ligne) = Nlot_Mp
Range("B" & Ligne) = Z_N_Lot
Range("C" & Ligne) = CDate(Z_Fab_date)
Range("D" & Ligne) = CDate(Z_Date_Lib)
Range("E" & Ligne) = Z_Quantite
Range("G" & Ligne) = Z_delitement
Range("F" & Ligne) = Z_Dissolution
Range("H" & Ligne) = Z_Humidite
Range("I" & Ligne) = Z_PM75
Range("J" & Ligne) = Z_PM_n7
Range("K" & Ligne) = Z_dos

With Saisir_nouveau_lot
.Z_N_Lot.Text = ""
.Z_Fab_date.Text = Format(Now(), "dd/mm/yy")
.Z_Date_Lib.Text = ""
.Z_Quantite.Text = ""
.Z_delitement.Text = ""
.Z_Dissolution.Text = ""
.Z_Humidite.Text = ""
.Z_PM75.Text = ""
.Z_PM_n7.Text = ""
.Z_dos.Text = ""
.Nlot_Mp.Text = ""

End With
End Sub





Avatar
Trirème
Ça serait mieux de répondre en haut des réponses précédentes. C'est la coutume
ici, depuis 1972.

Avec le code que tu fournis j'ai l'impression que tout est dans le désordre. Au
moment d'ajouter puis de nommer une nouvelle feuille, la variable 'AnnéeFab'
doit être définie.
Reprenons.
Tu as l'air de récupérer les informations d'un userform, après Clic sur un
bouton. C'est à ce moment là (et pas avant) qu'il faut tester la date de
fabrication et décider sur quelle feuille il faut les copier.
Je te propose les grandes lignes suivantes :

1. Récupération des données d'un lot de fabrication
2. Détermination 'année fabrication'
3. Si la feuille 'année' existe ==> étape 6
4. Sinon ajouter feuille et la nommer 'année'
5. Créer entêtes (l'étape 4 et 5 à faire dans une autre sub que tu appelles par
un Call)
6. Écrire donner sur dernière ligne

Il n'est pas nécessaire d'activer les feuilles pour écrire dedans.
La mise en forme de ton entête peut être faite en une fois avec un With
sh.Range("A1:K1")

Cordialement,
Trirème


Salut Trirème
j'ai essayé la modification mais sans résultat toujours le même code
d'erreur 1004.
voilà le code complet pour détecter une éventuelle erreur

Sub Ajouter_Click()
Dim Nlot_Mp As String, Z_Fab_date As Date
Dim DateFab As Date, AnnéeFab As String
Dim sh As Worksheet ' Initialise implicitement l'objet à 'Nothing'
Dim Ligne As Long


On Error Resume Next ' la ligne suivante provoque une erreur si la
feuille n 'existe pas
Set sh = Worksheets(AnnéeFab) ' si la feuille n'existe pas, prend la
valeur 'Empty'
On Error GoTo 0 ' Réinitialise le gestionnaire d'erreurs
If sh Is Nothing Then ' La première fois la feuille est créée
ActiveWorkbook.Sheets.Add after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = AnnéeFab
Else ' Les fois suivantes la feuille est activée
Sheets(AnnéeFab).Activate

End If

With sh
Range("A1") = "N° lot MP"
With Selection.Interior
.ColorIndex = 2
With Selection.Font
.Bold = True
.Italic = True
.Name = "ariel"
.Size = 10
End With
End With

Range("B1") = "N° de lot PF"

With Selection.Font
.Bold = True
.Italic = True
.Name = "ariel"
.Size = 10
.Color = vert
End With

Range("C1") = "Date de Fab."
With Selection.Interior
.ColorIndex = 2
With Selection.Font
.Bold = True
.Italic = True
.Name = "ariel"
.Size = 10
End With
End With
Range("D1") = "Date d'exp."
With Selection.Interior
.ColorIndex = 2
With Selection.Font
.Bold = True
.Italic = True
.Name = "ariel"
.Size = 10
End With
End With
Range("E1") = "Quantité"
With Selection.Interior
.ColorIndex = 2
With Selection.Font
.Bold = True
.Italic = True
.Name = "ariel"
.Size = 10
End With
End With
Range("G1") = "Délitement"
With Selection.Interior
.ColorIndex = 2
With Selection.Font
.Bold = True
.Italic = True
.Name = "ariel"
.Size = 10
End With
End With
Range("F1") = "Dissolution"
With Selection.Interior
.ColorIndex = 2
With Selection.Font
.Bold = True
.Italic = True
.Name = "ariel"
.Size = 10
End With
End With
Range("H1") = "Humidité"
With Selection.Interior
.ColorIndex = 2
With Selection.Font
.Bold = True
.Italic = True
.Name = "ariel"
.Size = 10
End With
End With
Range("I1") = "PM+7,5%"
With Selection.Interior
.ColorIndex = 2
With Selection.Font
.Bold = True
.Italic = True
.Name = "ariel"
.Size = 10
End With
End With
Range("J1") = "PM - 7,5%"
With Selection.Interior
.ColorIndex = 2
With Selection.Font
.Bold = True
.Italic = True
.Name = "ariel"
.Size = 10
End With
End With
Range("K1") = "Dosage"
With Selection.Interior
.ColorIndex = 2
With Selection.Font
.Bold = True
.Italic = True
.Name = "ariel"
.Size = 10
End With
End With
End With

Ligne = Range("A65536").End(xlUp).Row + 1

Range("A" & Ligne) = Nlot_Mp
Range("B" & Ligne) = Z_N_Lot
Range("C" & Ligne) = CDate(Z_Fab_date)
Range("D" & Ligne) = CDate(Z_Date_Lib)
Range("E" & Ligne) = Z_Quantite
Range("G" & Ligne) = Z_delitement
Range("F" & Ligne) = Z_Dissolution
Range("H" & Ligne) = Z_Humidite
Range("I" & Ligne) = Z_PM75
Range("J" & Ligne) = Z_PM_n7
Range("K" & Ligne) = Z_dos

With Saisir_nouveau_lot
.Z_N_Lot.Text = ""
.Z_Fab_date.Text = Format(Now(), "dd/mm/yy")
.Z_Date_Lib.Text = ""
.Z_Quantite.Text = ""
.Z_delitement.Text = ""
.Z_Dissolution.Text = ""
.Z_Humidite.Text = ""
.Z_PM75.Text = ""
.Z_PM_n7.Text = ""
.Z_dos.Text = ""
.Nlot_Mp.Text = ""

End With
End Sub