XL 2016 Mettre l'année en cours dans la cellule active

David-DR

XLDnaute Nouveau
Bonjour à tous,
Je suis novice en VBA et je souhaiterai rajouter dans mon code, l'ajout automatiquement l'année suivant la date en colonne B de la même ligne.
Merci d'avance.

Sub nouvelle_utilisation()

' Annulation des filtres
If Sheets("Utilisation").AutoFilterMode = True Then
Sheets("Utilisation").Range("A3:K3").AutoFilter
Else
Sheets("Utilisation").Range("A3:K3").AutoFilter
End If

' Rechercher la dernière cellule A du tableau et Incrementer un n° saisie
Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Select
ActiveCell.FormulaR1C1 = "=R[-1]C+1"

' Rechercher la dernière cellule B du tableau et ajouter la date du jour
Range("B" & Rows.Count).End(xlUp).Offset(1, 0).Select
ActiveCell.Value = Now

' Rechercher la dernière cellule D du tableau et ajouter le Nom de l'imprimante
Range("D" & Rows.Count).End(xlUp).Offset(1, 0).Select
ActiveCell.Value = "Ultimaker 5S"

' Rechercher la dernière cellule H du tableau et ajouter le temps de preparation
Range("H" & Rows.Count).End(xlUp).Offset(1, 0).Select
ActiveCell.Value = "0:30"

' Se placer sur la dernière cellule vide du tableau dans la colonne B et se décaler de 3 cellules sur la droite soit en colonne E
Range("B" & Rows.Count).End(xlUp).Offset(0, 3).Select


End Sub
 
Solution
Re

Et avec cette version, c'est mieux ?
VB:
Sub n_utilisation()
Dim Valeurs, r As Range: Set r = Cells(Rows.Count, 1).End(3)(2)
Valeurs = Array("=R[-1]C+1", Date, "=IF(RC[-2]="""","""",YEAR(RC[-1]))", "Ultimaker 5S")
r.Resize(, 4).Formula = Valeurs: r.Offset(, 7) = "0:30"
End Sub
Si tu as des questions sur cette version, n'hésites pas ;)

Staple1600

XLDnaute Barbatruc
Bonsoir

Ma façon d'écrire ton code ;)
VB:
Sub nouvelle_utilisation_BIS()
Dim pl&, vArr
vArr = Array("=R[-1]C+1", Date, vbNullString, "Ultimaker 5S")
'Annulation des filtres
If Sheets("Utilisation").AutoFilterMode = True Then
Sheets("Utilisation").Range("A3:K3").AutoFilter
Else
Sheets("Utilisation").Range("A3:K3").AutoFilter
End If
pl = Cells(Rows.Count, 1).End(xlUp).Row + 1
Cells(pl, 1).Resize(, 4) = vArr
Cells(pl, "H") = "0:30"
End Sub
En toute logique, tu devrais avoir des questions à me poser
J'y répondrais avec plaisir ;)
 

Staple1600

XLDnaute Barbatruc
Addendum

Si j'ai bien compris, la modification pour avoir la date
Code:
Sub nouvelle_utilisation_TER()
Dim pl&, vArr
vArr = Array("=R[-1]C+1", Year(Date), vbNullString, "Ultimaker 5S")
'Annulation des filtres
If Sheets("Utilisation").AutoFilterMode = True Then
Sheets("Utilisation").Range("A3:K3").AutoFilter
Else
Sheets("Utilisation").Range("A3:K3").AutoFilter
End If
pl = Cells(Rows.Count, 1).End(xlUp).Row + 1
Cells(pl, 1).Resize(, 4) = vArr
Cells(pl, "H") = "0:30"
End Sub
 

David-DR

XLDnaute Nouveau
Addendum

Si j'ai bien compris, la modification pour avoir la date
Code:
Sub nouvelle_utilisation_TER()
Dim pl&, vArr
vArr = Array("=R[-1]C+1", Year(Date), vbNullString, "Ultimaker 5S")
'Annulation des filtres
If Sheets("Utilisation").AutoFilterMode = True Then
Sheets("Utilisation").Range("A3:K3").AutoFilter
Else
Sheets("Utilisation").Range("A3:K3").AutoFilter
End If
pl = Cells(Rows.Count, 1).End(xlUp).Row + 1
Cells(pl, 1).Resize(, 4) = vArr
Cells(pl, "H") = "0:30"
End Sub
Bonjour,

Non, la date je l'ai.
Mon code est effectivement plus long et certainement moins performant que le votre.
Je chercher simplement a rajouter l'inscription de l'année dans la cellule à coté de la date.
Et il est toujours intéressent d'avoir des conseil afin de simplifier son code.

Sinon effectivement, j'essaye de comprendre le votre.
Vous déclarez les variables don j'ai encore du mal a comprendre.

Dim pl&, vArr
vArr = Array("=R[-1]C+1", Date, vbNullString, "Ultimaker 5S")
Est-ce que la mention pl fait référence à pl = Cells(Rows.Count, 1).End(xlUp).Row + 1 ?
-----
je ne comprends pas vArr = Array("=R[-1]C+1", Date, vbNullString, "Ultimaker 5S")
-----
Est-ce que Dim pl&, vArr et la diminution du code écrit ci-dessous ?
Dim pl
Dim vArr
-----
pl = Cells(Rows.Count, 1).End(xlUp).Row + 1
Si je comprends bien la variable pl, elle donne l'ordre de rechercher la dernière cellule vide de la colonne A
-----
Cells(pl, 1).Resize(, 4) = vArr
On vas chercher la dernière cellule vide de la colonne A et que sur les 4 1ère cellules, on applique la variable vArr.

j’avoue, que j'ai un peu de mal et que sur la 3ème cellule l'année ne c'est pas inscrite.
Pourriez-vous m’expliquer plus en détail le raisonnement de votre code ?
Merci d'avance
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil, David-DR

Quelques explications matinales
Code:
Sub nouvelle_utilisation_TER_A()
'Déclarations des variables
Dim pl&, vArr
'pl pour premiere ligne vide
'On remplit le tableau vArr (Array en anglais) avec les valeurs que l'on veut mettre dans les cellules
vArr = Array("=R[-1]C+1", Year(Date), vbNullString, "Ultimaker 5S")
'Annulation des filtres
If Sheets("Utilisation").AutoFilterMode = True Then
Sheets("Utilisation").Range("A3:K3").AutoFilter
Else
Sheets("Utilisation").Range("A3:K3").AutoFilter
End If
'ici on détermine donc la 1er ligne vide de la colonne A
'en partant de la fin de la feuille
pl = Cells(Rows.Count, 1).End(xlUp).Row + 1
'On trouve donc la 1er cellule vide de la colonne A
'On redimensionne la plage
'MsgBox Cells(pl, 1).Resize(, 4).Address '-< pour test
'Dans cette nouvelle plage de cellules, on insére en 1 seule fois le contenu du tableau vArr
Cells(pl, 1).Resize(, 4) = vArr
'Dans la colonne H de la ligne pl, on insére "0:30"
Cells(pl, "H") = "0:30"
End Sub

Maintenant pour ce qui concerne l'année.
Dans quelle colonne, tu veux insérer l'année?
Dans mon dernier code, l'année est insérée en colonne B.
 

David-DR

XLDnaute Nouveau
Bonjour le fil, David-DR

Quelques explications matinales
Code:
Sub nouvelle_utilisation_TER_A()
'Déclarations des variables
Dim pl&, vArr
'pl pour premiere ligne vide
'On remplit le tableau vArr (Array en anglais) avec les valeurs que l'on veut mettre dans les cellules
vArr = Array("=R[-1]C+1", Year(Date), vbNullString, "Ultimaker 5S")
'Annulation des filtres
If Sheets("Utilisation").AutoFilterMode = True Then
Sheets("Utilisation").Range("A3:K3").AutoFilter
Else
Sheets("Utilisation").Range("A3:K3").AutoFilter
End If
'ici on détermine donc la 1er ligne vide de la colonne A
'en partant de la fin de la feuille
pl = Cells(Rows.Count, 1).End(xlUp).Row + 1
'On trouve donc la 1er cellule vide de la colonne A
'On redimensionne la plage
'MsgBox Cells(pl, 1).Resize(, 4).Address '-< pour test
'Dans cette nouvelle plage de cellules, on insére en 1 seule fois le contenu du tableau vArr
Cells(pl, 1).Resize(, 4) = vArr
'Dans la colonne H de la ligne pl, on insére "0:30"
Cells(pl, "H") = "0:30"
End Sub

Maintenant pour ce qui concerne l'année.
Dans quelle colonne, tu veux insérer l'année?
Dans mon dernier code, l'année est insérée en colonne B.

Bonjour,
Merci pour ce retour.
j'avoue que j'ai quand même un peu de mal à comprendre toute la composition de la variable vArr.
en ce qui concerne l'année, dans mon code je pensais avoir mis la date suite à mes recherches sur le net.
Et cela me rentre bien la date comme je le souhaite.
mon problème est que dans mon TDC, le filtre de la date n'est pas classé par mois et année.
d’où mon besoin de rajouter une colonne indiquant l'année.

1647761836112.png

1647761335786.png
1647761629910.png
 

Staple1600

XLDnaute Barbatruc
Bonjour

Est-ce que c'est plus clair avec ce petit exemple (à tester sur une feuille vierge)
VB:
Sub Exemple_A()
[A1:D1] = "" 'juste pour le test (effacement)
[A1].FormulaLocal = "=AUJOURDHUI()"
[B1].FormulaLocal = "=LIGNE()"
[C1].Value = 123
[D1].Value = "ABC"
End Sub
Sub Exemple_B()
Dim vArr
vArr = Array("=AUJOURDHUI()", "=LIGNE()", 123, "ABC")
[A1:D1] = "" 'juste pour le test (effacement)
[A1:D1].FormulaLocal = vArr
End Sub
Lance la macro Exemple_A et regarde le résultat obtenu
Puis lance la macro Exemple_B, tu verras que le résultat est le même
La seule différence c'est que la macro Exemple B insére les valeurs en utilisant une seule ligne de code VBA

Pour revenir à ta question, comme tu n'as pas joint de fichier exemple ni évoqué la présence de TCD, je peux pas jouer les Madame Irma ;)

Donc joins un fichier exemple représentatif (allégé et anonymisé) pour qu'il soit plus facile de t'aider.
 

David-DR

XLDnaute Nouveau
Bonjour

Est-ce que c'est plus clair avec ce petit exemple (à tester sur une feuille vierge)
VB:
Sub Exemple_A()
[A1:D1] = "" 'juste pour le test (effacement)
[A1].FormulaLocal = "=AUJOURDHUI()"
[B1].FormulaLocal = "=LIGNE()"
[C1].Value = 123
[D1].Value = "ABC"
End Sub
Sub Exemple_B()
Dim vArr
vArr = Array("=AUJOURDHUI()", "=LIGNE()", 123, "ABC")
[A1:D1] = "" 'juste pour le test (effacement)
[A1:D1].FormulaLocal = vArr
End Sub
Lance la macro Exemple_A et regarde le résultat obtenu
Puis lance la macro Exemple_B, tu verras que le résultat est le même
La seule différence c'est que la macro Exemple B insére les valeurs en utilisant une seule ligne de code VBA

Pour revenir à ta question, comme tu n'as pas joint de fichier exemple ni évoqué la présence de TCD, je peux pas jouer les Madame Irma ;)

Donc joins un fichier exemple représentatif (allégé et anonymisé) pour qu'il soit plus facile de t'aider.
Merci pour toutes ces explications.
j'ai fait le fichier simplifié pour plus de compréhension.
Merci beaucoup pour le temps que vous consacrez pour aider.
cdt
David
 

Pièces jointes

  • Test utilisation imprimantes.xlsm
    113 KB · Affichages: 1

David-DR

XLDnaute Nouveau
Re

Je vois que ma simplification du message#3 ne t'a pas convaincu ?
;)
Vu qu'elle ne retrouve pas dans ton fichier exemple
Non ce n'est pas cela.
Elle est présente dans le fichier mais je n'ai pas mis de bouton pour l'utilisation.
Je vais bien évidemment creuser pour optimiser mon code avec ta solution, mais quand j'actionne la macro, je n'ai pas le remplissage de l'année sous format 2022 en fonction de la date. Après je peux m'en passer et mettre une formule et là ton code me convient tout à fait, car beaucoup plus simplifié. 😉
 

Staple1600

XLDnaute Barbatruc
Re

Et avec cette version, c'est mieux ?
VB:
Sub n_utilisation()
Dim Valeurs, r As Range: Set r = Cells(Rows.Count, 1).End(3)(2)
Valeurs = Array("=R[-1]C+1", Date, "=IF(RC[-2]="""","""",YEAR(RC[-1]))", "Ultimaker 5S")
r.Resize(, 4).Formula = Valeurs: r.Offset(, 7) = "0:30"
End Sub
Si tu as des questions sur cette version, n'hésites pas ;)
 

David-DR

XLDnaute Nouveau
Re

Et avec cette version, c'est mieux ?
VB:
Sub n_utilisation()
Dim Valeurs, r As Range: Set r = Cells(Rows.Count, 1).End(3)(2)
Valeurs = Array("=R[-1]C+1", Date, "=IF(RC[-2]="""","""",YEAR(RC[-1]))", "Ultimaker 5S")
r.Resize(, 4).Formula = Valeurs: r.Offset(, 7) = "0:30"
End Sub
Si tu as des questions sur cette version, n'hésites pas ;)
Nickel il répond à mon besoin.
Je vais regarder de plus prés ton code et si j'ai des questions je reviens vers toi.
En tout cas merci beaucoup. bon dimanche.
 

Staple1600

XLDnaute Barbatruc
RE

Sinon, si tu transformais ton tableau en tableau structuré, Excel s'occuperait de tout
(sans macro) et ce serait plus simple pour le TCD
(Dans un tableau structuré, les formules et le format se répliquent automatiquement sur la nouvelle ligne créée)
 

David-DR

XLDnaute Nouveau
RE

Sinon, si tu transformais ton tableau en tableau structuré, Excel s'occuperait de tout
(sans macro) et ce serait plus simple pour le TCD
(Dans un tableau structuré, les formules et le format se répliquent automatiquement sur la nouvelle ligne créée)
Oui je suis d'accord avec toi, mais comme ce fichier est alimenté par toute mon équipe,
J'ai des personnes super doués en informatique qui ont réussi à le planter et par la même occasion mon tableau bord. D'où la macro afin de pré-remplir le tableau.
Et les macros avec les tableaux structurés, j'ai du mal.
 

Discussions similaires

Statistiques des forums

Discussions
312 024
Messages
2 084 718
Membres
102 638
dernier inscrit
TOTO33000