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

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

7 réponses

Meilleure réponse
Messages postés
8718
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
17 octobre 2019
436
1
Merci
bonjour,
[B9].Value = Format(Now, "yy") & "-" & [B9].Value

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM 63775 internautes nous ont dit merci ce mois-ci

DESTIN8TE
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.
yg_be
Messages postés
8718
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
17 octobre 2019
436 > DESTIN8TE
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.
DESTIN8TE
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 !!!!!!!!!!!!! ^^
yg_be
Messages postés
8718
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
17 octobre 2019
436 > DESTIN8TE
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?
DESTIN8TE
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.
Commenter la réponse de yg_be
Messages postés
24587
Date d'inscription
lundi 23 juillet 2007
Statut
Contributeur
Dernière intervention
17 octobre 2019
4831
0
Merci
Bonjour
si vous placez dans la cellule =YEAR(cell date), ça fonctionne sans VBA un fois la date entrée
crtdlmnt
DESTIN8TE
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.
Commenter la réponse de Vaucluse
Messages postés
11206
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
17 octobre 2019
1458
0
Merci
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
michel_m
Messages postés
15934
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 octobre 2019
2811 -
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
DESTIN8TE
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.
michel_m
Messages postés
15934
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 octobre 2019
2811 -
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
DESTIN8TE
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.
DESTIN8TE
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.
Commenter la réponse de via55
Messages postés
26519
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 octobre 2019
1833
0
Merci
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é...

DESTIN8TE
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.
DESTIN8TE
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.
Commenter la réponse de jordane45
Messages postés
35
Date d'inscription
lundi 14 janvier 2019
Statut
Membre
Dernière intervention
15 février 2019
0
Merci
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.
Commenter la réponse de DESTIN8TE
Messages postés
35
Date d'inscription
lundi 14 janvier 2019
Statut
Membre
Dernière intervention
15 février 2019
-1
Merci
Ah excellent la communauté. Le jour où je créé mon compte, ça va j'aime bien.
Commenter la réponse de DESTIN8TE
Messages postés
35
Date d'inscription
lundi 14 janvier 2019
Statut
Membre
Dernière intervention
15 février 2019
-1
Merci
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.
Commenter la réponse de DESTIN8TE