Récupération de l'année d'une cellule au format "yy" et concaténation [Résolu/Fermé]

Signaler
Messages postés
35
Date d'inscription
lundi 14 janvier 2019
Statut
Membre
Dernière intervention
15 février 2019
-
Messages postés
35
Date d'inscription
lundi 14 janvier 2019
Statut
Membre
Dernière intervention
15 février 2019
-
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

7 réponses

Messages postés
11511
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 juillet 2020
659
bonjour,
[B9].Value = Format(Now, "yy") & "-" & [B9].Value
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 61706 internautes nous ont dit merci ce mois-ci

Messages postés
35
Date d'inscription
lundi 14 janvier 2019
Statut
Membre
Dernière intervention
15 février 2019

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.
Messages postés
11511
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 juillet 2020
659 >
Messages postés
35
Date d'inscription
lundi 14 janvier 2019
Statut
Membre
Dernière intervention
15 février 2019

tu montres un code VBA, sans expliquer ni ce que tu souhaites qu'il fasse, ni ce qu'il fait.
à tout hasard:
num = cint(Mid([C10].Value, 6))
[C9].Value = Format(Now, "yy") + " - " + cstr(num + 1)

en supposant que tu as bien déclaré num comme un integer.
Messages postés
35
Date d'inscription
lundi 14 janvier 2019
Statut
Membre
Dernière intervention
15 février 2019

Ça marche, je t'aime tellement !!!!!!!!!!!!! ^^
Messages postés
11511
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 juillet 2020
659 >
Messages postés
35
Date d'inscription
lundi 14 janvier 2019
Statut
Membre
Dernière intervention
15 février 2019

parfait, peux-tu marquer le sujet comme résolu, via la roue dentée à droite du titre?
Messages postés
35
Date d'inscription
lundi 14 janvier 2019
Statut
Membre
Dernière intervention
15 février 2019

A oui c'est vrai.
Messages postés
25182
Date d'inscription
lundi 23 juillet 2007
Statut
Contributeur
Dernière intervention
10 juillet 2020
5 355
Bonjour
si vous placez dans la cellule =YEAR(cell date), ça fonctionne sans VBA un fois la date entrée
crtdlmnt
Messages postés
35
Date d'inscription
lundi 14 janvier 2019
Statut
Membre
Dernière intervention
15 février 2019

Merci mais je veux obligatoirement passer en VBA car j'utilise un bouton qui est affecté à une macro qui insert une ligne.
Messages postés
12387
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
10 juillet 2020
1 922
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
Messages postés
16171
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
9 juillet 2020
2 989
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
Messages postés
35
Date d'inscription
lundi 14 janvier 2019
Statut
Membre
Dernière intervention
15 février 2019

Il y a quelque indice mais pas de message clair, désolé ^^

Désolé je ne comprend toujours pas.
Messages postés
16171
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
9 juillet 2020
2 989
pourtant
ça a marché pour la première ligne mais la suivante je n'ai rien à l'intérieur.

réponse
Et où avais tu indiqué qu'il s' agissait de plusieurs lignes ?

retour
Il y a quelque indice...

Ah bon! où ça ?



bon, je ne vais pas continuer à perdre mon temps!

Abandon
Messages postés
35
Date d'inscription
lundi 14 janvier 2019
Statut
Membre
Dernière intervention
15 février 2019

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.
Messages postés
35
Date d'inscription
lundi 14 janvier 2019
Statut
Membre
Dernière intervention
15 février 2019

Après si tu n'es pas futé c'est pas de ma faute. Mais bon je ne vais pas continuer à perdre mon temps avec toi.
Messages postés
28938
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 juillet 2020
2 608
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é...

Messages postés
35
Date d'inscription
lundi 14 janvier 2019
Statut
Membre
Dernière intervention
15 février 2019

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.
Messages postés
35
Date d'inscription
lundi 14 janvier 2019
Statut
Membre
Dernière intervention
15 février 2019

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.
Messages postés
35
Date d'inscription
lundi 14 janvier 2019
Statut
Membre
Dernière intervention
15 février 2019

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.
Messages postés
35
Date d'inscription
lundi 14 janvier 2019
Statut
Membre
Dernière intervention
15 février 2019

Ah excellent la communauté. Le jour où je créé mon compte, ça va j'aime bien.
Messages postés
35
Date d'inscription
lundi 14 janvier 2019
Statut
Membre
Dernière intervention
15 février 2019

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.