Extraire le mois et l'année d'une date en VBA

Risbal14

XLDnaute Nouveau
Bonjour à tous,

Je cherche à extraire le mois et l'année d'une date au format (JJ/MM/AAAA) afin d'obtenir une date au format (MM/AAAA) -> exemple en fichier joint pour quelques lignes.

Connaissez-vous un code VBA qui permette de traiter rapidement ce calcul sur un tableau à taille variable (nombre de lignes pouvant varier de 1 à 300 000 lignes).

Merci de votre aide.

Boris.
 

Pièces jointes

  • Insertion_Mois.xlsm
    12 KB · Affichages: 89

Risbal14

XLDnaute Nouveau
Re : Extraire le mois et l'année d'une date en VBA

Merci Pierrot pour ta réponse.

Il faut cependant que je garde la date d'origine au format JJ/MM/AAAA et que je rajoute la date au format MM/AAAA dans une nouvelle colonne.

Une idée?

D'avance merci.

Boris
 

pierrejean

XLDnaute Barbatruc
Re : Extraire le mois et l'année d'une date en VBA

Bonjour Risbal14

A tester:

Code:
Sub test()
tablo = Range("A2:B" & Range("A" & Rows.Count).End(xlUp).Row)
For n = LBound(tablo, 1) To UBound(tablo, 1)
  tablo(n, 2) = Format(tablo(n, 1), "mm-yyyy")
Next
Range("A2").Resize(UBound(tablo, 1), UBound(tablo, 2)) = tablo
End Sub
 

Risbal14

XLDnaute Nouveau
Re : Extraire le mois et l'année d'une date en VBA

Oups, pas eu le temps de finir d'écrire:)

Re,

Pierre-Jean ta formule fonctionne parfaitement.

Par contre je n'ai pas fait attention mais les colonnes sont intervertis dans ma macro.

La date est en colonne B (format JJ/MM/AAAA).

Le mois est en colonne A (format MM/AAAA).

J'ai modifié la formule de pierre-jean :

tablo = Range("A2:B" & Range("B" & Rows.Count).End(xlUp).Row)
For n = LBound(tablo, 1) To UBound(tablo, 1)
tablo(n, 1) = Format(tablo(n, 2), "mm-yyyy")
Next
Range("A2").Resize(UBound(tablo, 1), UBound(tablo, 2)) = tablo

Pouvez-vous me dire s'il n'y a pas d'erreur?

Pierrot, ta formule laisse le jour mais le masque uniquement alors que la valeur par défaut doit être de 01 pour le jour (JJ).

Petite question de novice par rapport à la remarque de Pierrot : quel est l'intérêt d'éviter les boucles ?

EN tout ca un grand merci à tous les deux.

Boris.
 

ROGER2327

XLDnaute Barbatruc
Re : Extraire le mois et l'année d'une date en VBA

Bonjour à tous.


Un essai sous forme de procédure évènementielle :​
VB:
Private Sub Worksheet_Change(ByVal Cible As Range)
Dim oPlg As Range, oCel As Range
    Set oPlg = Intersect(Cible, Columns(2).Resize(Rows.Count - 1).Offset(1))
    If Not oPlg Is Nothing Then
        With Application: .ScreenUpdating = 0: .EnableEvents = 0: .Calculation = -4135: End With
        With oPlg.Offset(, -1): .NumberFormat = "General": .Value = Empty: End With
        For Each oCel In oPlg.Cells
            If VarType(oCel) = vbDate Then
                oCel.Offset(, -1).NumberFormat = "mmm-yy"
                If CDbl(oCel.Value) >= 32 Then
                    oCel.Offset(, -1).Value = 1 + WorksheetFunction.EoMonth(oCel.Value, -1)
                Else
                    oCel.Offset(, -1).Value = 1
                End If
            End If
        Next
        With Application: .Calculation = -4105: .EnableEvents = 1: .ScreenUpdating = 1: End With
    End If
End Sub



ROGER2327
#6477


Vendredi 6 Pédale 140 (Vers Belges - fête Suprême Quarte)
10 Ventôse An CCXXI, 6,6156h - bêche
2013-W09-4T15:52:39Z
 

Pièces jointes

  • Copie de Insertion_Mois.xlsm
    13.8 KB · Affichages: 110

Dadi147

XLDnaute Occasionnel
Re : Extraire le mois et l'année d'une date en VBA

Bonjour Risbal14

A tester:

Code:
Sub test()
tablo = Range("A2:B" & Range("A" & Rows.Count).End(xlUp).Row)
For n = LBound(tablo, 1) To UBound(tablo, 1)
  tablo(n, 2) = Format(tablo(n, 1), "mm-yyyy")
Next
Range("A2").Resize(UBound(tablo, 1), UBound(tablo, 2)) = tablo
End Sub
Bonjour, comment puis-je extraire la date de la colonne B et mettre le résultat dans la colonne A à partir de la ligne 11
 

pierrejean

XLDnaute Barbatruc
Bonjour Dadi147
A tester:
VB:
Sub test()
tablo = Range("A11:B" & Range("B" & Rows.Count).End(xlUp).Row)
For n = LBound(tablo, 1) To UBound(tablo, 1)
  tablo(n, 1) = tablo(n, 2)
Next
Range("A11").Resize(UBound(tablo, 1), UBound(tablo, 2)) = tablo
End Sub
 

Discussions similaires

Réponses
5
Affichages
298
Réponses
2
Affichages
397
Réponses
25
Affichages
1 K

Statistiques des forums

Discussions
314 630
Messages
2 111 375
Membres
111 115
dernier inscrit
mermo