Récupération de l'année d'une cellule au format "yy" et concaténation

Résolu/Fermé
DESTIN8TE Messages postés 35 Date d'inscription lundi 14 janvier 2019 Statut Membre Dernière intervention 15 février 2019 - 14 janv. 2019 à 11:36
DESTIN8TE Messages postés 35 Date d'inscription lundi 14 janvier 2019 Statut Membre Dernière intervention 15 février 2019 - 31 janv. 2019 à 15:09
Bonjour,

Désolé s'il y a un double post mais je n'ai pas arrêté de faire des recherches et pas moyen d'avoir une réponse clair et fonctionnelle.

Dans la première cellule d'un tableau je récupère la date actuelle avec NOW() au format d/m/yy h:nn,
dans la deuxième cellule, à l'heure actuelle, il s'agit d'un numéro qui est incrémenté,
maintenant je voudrais que dans la deuxième cellule, je récupère l'année au format "yy" de la première cellule en concaténant ce numéro.

Comme je ne connais pas trop le VBA, au tout début j'avais réussi à récupérer l'année au format "yy" et maintenant plus moyen de l'avoir dû au fait que j'ai modifié le code plusieurs fois pour essayer de concaténer ce numéro.
En clair je veux que se soit comme ceci :
19 - 2345

Voici un bout de code de ce que j'avais déjà fait (au passage le fichier excel est de quelqu'un d'autre)
Le texte en gras est le code que j'ai ajouté.

' Incrémente le n° du POST-IT puis Copie Colle la valeur
Range("C9").Select

Annee = "=Year(B9)"
Annee_formater = Format(Annee, "yy")
ActiveCell.Value = Annee_formater

'ActiveCell.FormulaR1C1 = "=R[1]C+1"
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

Avec ce code je récupère toujours l'année au format "yyyy" alors que j'indique bien "yy" alors que j'ai déjà récupéré ce format.

Pour information, c'est un fichier qui est utilisé tout les jours toute l'année, ensuite un nouveau est créé mais ça ce n'est pas important.

Voilà ça parait bête mais pas moyen de trouver "les" solutions.
Et le pire c'est que comme je viens de commencer le VBA, j'ai du mal à m'en sortir avec les méthodes parce que des fois il faut les écrire comme ça :
...= "=Year(B9)" ou ...= Year("B9")

Alors est-ce que je suis pas futé ou alors il y a une cou**** dans le paté car des fois l'un marche et l'autre non et vice - versa et j'en pète des plombs.

Merci de vos réponses
A voir également:

7 réponses

yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471
Modifié le 21 janv. 2019 à 19:56
bonjour,
[B9].Value = Format(Now, "yy") & "-" & [B9].Value
1
DESTIN8TE Messages postés 35 Date d'inscription lundi 14 janvier 2019 Statut Membre Dernière intervention 15 février 2019
22 janv. 2019 à 08:27
Bonjour et merci mais j'ai le même soucis, ça me le fait pour une seul ligne et après le champ est vide puis il revient à 1. Voici le résultat :


Je pense que c'est le tiret qui est la cause de tout ça car il transforme le type de données de la cellule en chaîne de caractère.
0
yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471 > DESTIN8TE Messages postés 35 Date d'inscription lundi 14 janvier 2019 Statut Membre Dernière intervention 15 février 2019
Modifié le 22 janv. 2019 à 09:40
peux-tu être plus précis, et donner des numéros de ligne au lieu de "aprés" et "puis".
le code fourni est prévu pour la ligne 9.
0
DESTIN8TE Messages postés 35 Date d'inscription lundi 14 janvier 2019 Statut Membre Dernière intervention 15 février 2019
22 janv. 2019 à 15:30
Le code est prévu pour insérer une ligne à la ligne 9. A chaque fois qu'une ligne est insérer la première cellule de la ligne 9 récupère la date de maintenant (méthode NOW() ) ensuite dans dans la cellule de droite on incrément un numéro. Bien sûr, quand il n'y a aucune ligne, le numéro est 1 et ensuite ça s'incrémente à la suite. Par contre j'ai pensé à ça :


Range("C9").Select     'Je sélectionne la cellule C9
If [C9].Value = "" Then 'si la cellule C9 est vide
[C9].Value = Format(Now, "yy") & " - " & 1 'alors j'ajoute à C9 l'année de la date actuelle au format "yy" concaténé avec un tiret et concaténé avec 1
Else 'sinon
Dim num As Integer
num = Mid([C10].Value, 6) 'je récupère toutes les valeurs qui sont à partir du 6ème caractère dans num
[C9].Value = Format(Now, "yy") & " - " & num + 1 'et je concaténe l'année avec un tiret et concaténe la valeur récupérée dans num.
End If


Question 1 : Mid =() renvoit une chaîne, un entier ou il s'adapte en fonction du type de données manipulé ?

Question 2 : Si dans le résultat final on met un tiret, est-ce que la valeur de la cellule passe obligatoirement en chaîne de caractère ?
0
yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471 > DESTIN8TE Messages postés 35 Date d'inscription lundi 14 janvier 2019 Statut Membre Dernière intervention 15 février 2019
22 janv. 2019 à 16:32
mid renvoie une chaîne.
comment un tiret pourrait-il représenter un nombre plutôt qu'une chaîne? tu n'as pas expliqué ce que tu voulais obtenir: un nombre affiché comme une chaîne? je pense que tu confonds le contenu de la cellule et l'affichage de ce contenu.
0
DESTIN8TE Messages postés 35 Date d'inscription lundi 14 janvier 2019 Statut Membre Dernière intervention 15 février 2019
Modifié le 23 janv. 2019 à 08:14
Bonjour,

Bin oui c'est un peu bête comme question mais jai préféré la posé.
C'est là le problème c'est que techniquement, exemple 19 - 2674, est une chaîne de caractère du coup. Donc dans cette chaîne, je veux juste récupérer le numéro après le tiret mais comme il est en String, j'ai utilisé CInt(num) et c'est au nievau de l'incrémentation qui ne fonctionne pas. Sinon le reste fonctionne. Voici comment j'ai utilisé CInt(num) :

...
num = Mid([C10].Value, 6)
[C9].Value = Format(Now, "yy") & " - " & CInt(num) + 1
...


Je m'en mêle surtout les pinceaux.
0
Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 394
14 janv. 2019 à 11:39
Bonjour
si vous placez dans la cellule =YEAR(cell date), ça fonctionne sans VBA un fois la date entrée
crtdlmnt
0
DESTIN8TE Messages postés 35 Date d'inscription lundi 14 janvier 2019 Statut Membre Dernière intervention 15 février 2019
14 janv. 2019 à 12:04
Merci mais je veux obligatoirement passer en VBA car j'utilise un bouton qui est affecté à une macro qui insert une ligne.
0
via55 Messages postés 14402 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 18 avril 2024 2 702
14 janv. 2019 à 11:48
Bonjour

1) les "" sont superflus
2) Format modifie le format d'affichage mais pas le nombre récupéré qui est toujours à 4 chiffres
3) Si les années sont toutes postérieures à 2000 il suffit de soustraire 2000 pour avoir un nombre à 2 chiffres
Annee=Year(B9)-2000
Sinon on prend les 2 derniers chiffres avec :
Annee=Right(Year(B9),2)

Cdlmnt
Via
0
DESTIN8TE Messages postés 35 Date d'inscription lundi 14 janvier 2019 Statut Membre Dernière intervention 15 février 2019
14 janv. 2019 à 12:08
Merci mais j'ai essayé les deux méthodes et la première me retourne -101 tant dit que la deuxième 99.
J'en ai marre :'(
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
14 janv. 2019 à 12:35
Bonjour tout ce beau monde

Option Explicit
'----------------------------------
Sub xxx()
Dim An As String * 2
An = Format(Range("B9"), "yy")
Range("C9") = An & "-" & Range("C9")
End Sub
0
DESTIN8TE Messages postés 35 Date d'inscription lundi 14 janvier 2019 Statut Membre Dernière intervention 15 février 2019
14 janv. 2019 à 13:39
Merci michel_m, ça a marché pour la première ligne mais la suivante je n'ai rien à l'intérieur. Voici un sreen du résultat :
0
DESTIN8TE Messages postés 35 Date d'inscription lundi 14 janvier 2019 Statut Membre Dernière intervention 15 février 2019
14 janv. 2019 à 13:39
Ah oui et à quoi sert le "* 2" ?
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié le 14 janv. 2019 à 14:04
Et où avais tu indiqué qu'il s' agissait de plusieurs lignes ?

pas très sérieux....


le *2 indique la délibération d'un mot de 2 lettres
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
15 janv. 2019 à 09:43
Bonjour,

Peux tu nous poster un exemple de ton fichier ?
Ou au moins nous poster le code complet de ta macro... qu'on voit comment tu as inséré le code dedans...

Car, si tu as plusieurs lignes à traiter.. il faut, bien entendu, adapter le code que Michel t'a donné...

0
DESTIN8TE Messages postés 35 Date d'inscription lundi 14 janvier 2019 Statut Membre Dernière intervention 15 février 2019
17 janv. 2019 à 14:45
Et moi du coup je voudrais récupérer l'année de la cellule de gauche pour la mettre sur celle de droite en le concaténant avec le N° du Post - It ce qui ferait : "19 - 4696" (Le " - " s'agit d'un tiret et non d'une soustraction) et je ne veux pas utiliser cette méthode : "Annee=Year(B9)-2000" car je trouve que c'est de la mauvaise pratique en terme d'automatisation car si on passe en l'an 3000 on sera obliger de modifier le code, bon on a de la marge en terme d'année pour le modifier ^^ mais je préfére éviter ce genre de méthode.
0
DESTIN8TE Messages postés 35 Date d'inscription lundi 14 janvier 2019 Statut Membre Dernière intervention 15 février 2019
17 janv. 2019 à 14:49
Après je ne peux pas trop vous donner d'information sur ce fichier car il s'agit d'un fichier confidentiel, seulement les informations que je vous ai donné qui sont sans importance pour le monde extérieur.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
DESTIN8TE Messages postés 35 Date d'inscription lundi 14 janvier 2019 Statut Membre Dernière intervention 15 février 2019
31 janv. 2019 à 15:09
Voici la solution finale :
'' Concatène l'année actuelle avec un n° de POST-IT incrémenté puis Copie Colle la valeur
        Range("C9").Select
        If [C10].Value = "" Then ' Si la cellule positionné
            [C9].Value = Format(Now, "yy") & " - " & [C10].Value + 1
        Else
            Dim num As Integer
            num = CInt(Mid([C10].Value, 6))
            [C9].Value = Format(Now, "yy") + " - " + CStr(num + 1)
        End If

Ps : Le commentaire est de nature personnelle mais je l'ai laissé, on ne sait jamais, s'il peut vous éclaircir.
0
DESTIN8TE Messages postés 35 Date d'inscription lundi 14 janvier 2019 Statut Membre Dernière intervention 15 février 2019
Modifié le 14 janv. 2019 à 19:33
Ah excellent la communauté. Le jour où je créé mon compte, ça va j'aime bien.
-1
DESTIN8TE Messages postés 35 Date d'inscription lundi 14 janvier 2019 Statut Membre Dernière intervention 15 février 2019
17 janv. 2019 à 14:35
Bonjour,

Oui le voici ( En gras c'est ce que j'ai ajouté au code) :

Sub Insertion()

On Error Resume Next
ActiveSheet.ShowAllData

' Supprime les filtres

Range("B8:W8").Select
Selection.AutoFilter

' Selectionne la ligne 9, insère une ligne, copie les valeurs puis l'efface
Rows("9:9").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Range("B10:AD10").Select
Selection.AutoFill Destination:=Range("B9:AD10"), Type:=xlFillDefault
Range("B9:AD10").Select
Rows("9:9").Select
Range("L9").Activate
Rows("9:9").EntireRow.AutoFit
Range("B9:W9").Select
Selection.ClearContents
Range("C9").Select

' Copie de la date du jour en B9
Range("B9").Select
ActiveCell.FormulaR1C1 = "=NOW()"
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

' Incrémente le n° du POST-IT puis Copie Colle la valeur
Range("C9").Select

Annee = "=Year(B9)"
Annee_formater = Format(Annee, "yy")
ActiveCell.Value = Annee_formater

'ActiveCell.FormulaR1C1 = "=R[1]C+1"
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

' Mise en forme : Hauteur de ligne
Rows("9:9").Select
Rows("9:9").EntireRow.AutoFit

' Ajoute les filtres
Range("B8:W8").Select
Selection.AutoFilter
Range("B8").Select
ActiveWorkbook.Worksheets("DATA").AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets("DATA").AutoFilter.Sort.SortFields.Add Key:=Range( _
"B8"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("DATA").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("C9").Select

End Sub

Voici le résultat de la macro sans ma modification.

En sachant que le N° du Post It signifie le n-ième Post-It, donc comme sur le screen, le dernier est le 4695ième Post It.
-1