Récupération de l'année d'une cellule au format "yy" et concaténation
Résolu
DESTIN8TE
Messages postés
35
Date d'inscription
Statut
Membre
Dernière intervention
-
DESTIN8TE Messages postés 35 Date d'inscription Statut Membre Dernière intervention -
DESTIN8TE Messages postés 35 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Récupération de l'année d'une cellule au format "yy" et concaténation
- Format epub - Guide
- Format factory - Télécharger - Conversion & Codecs
- Hp usb disk storage format tool - Télécharger - Stockage
- Format apfs - Guide
- Excel cellule couleur si condition texte - Guide
7 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 583
bonjour,
[B9].Value = Format(Now, "yy") & "-" & [B9].Value
Bonjour
si vous placez dans la cellule =YEAR(cell date), ça fonctionne sans VBA un fois la date entrée
crtdlmnt
si vous placez dans la cellule =YEAR(cell date), ça fonctionne sans VBA un fois la date entrée
crtdlmnt
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
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
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é...
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é...
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Voici la solution finale :
Ps : Le commentaire est de nature personnelle mais je l'ai laissé, on ne sait jamais, s'il peut vous éclaircir.
'' 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.
Bonjour,
Oui le voici ( En gras c'est ce que j'ai ajouté au code) :
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.
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.
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.
le code fourni est prévu pour la ligne 9.
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 ?
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.
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) :
Je m'en mêle surtout les pinceaux.