Problème partiel avec résultats fonction Format

Résolu/Fermé
bassmart Messages postés 281 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 19 décembre 2023 - 29 juil. 2016 à 18:10
eriiic Messages postés 24597 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 22 septembre 2024 - 16 août 2016 à 16:03
Bonjour à tous,

J'éprouve un petit problème avec ma fonction Format. En gros, j'ai un tableau avec des données et dans la dernière colonne de tableau j'ai des dates. Ces données me servent pour dessiner un graphique et je voulais que les dates sur le graphique (axe des x) soit du 1 janvier au 31 décembre en format "dd-mmm". Je doit donc compléter la colonne en ajoutant les dates manquantes au dessus et en dessous des dates présentent dans mes données . J'ai utilisé des variables pour cette colonne parce que le nombre de colonnes est variable selon le fichier sélectionné.

Alors, j'ai incrémenté une série au dessus de mes données déjà présente qui fonctionne et fais la même chose pour mes données en dessous. Mais la j'ai un petit souci, il incrémente ma date correctement avec le bon format "dd-mmm" jusqu'à la date du 1 septembre ou il me change ça pour le format "aaaa-mm-jj" pour toute les dates de mois de septembre et après il revient au bon format????

J'ai passé mon code étape par étape en plaçant un espion sur mes valeurs de ces deux ligne
Cel.Value = DateAdd("d", 1, Cel.Offset(-1, 0).Value)
Cel.Value = Format(Cel.Value, "dd-mmm")
et tout est correct, il m'affiche le bon format.

Je ne comprend d'où vient se problème? Avez-vous une idée?

Voici mon code:
Option Explicit
Sub graphique()

Dim Grf As ChartObject
Dim Sh As Worksheet
Dim nom As String, DerLig As Integer, i As Integer, DerCol As Integer, DerCell As Integer, Nbre As Integer
Dim col, MyRange As Range, Legende As Boolean, Min As Integer, Max As Integer, Nbrpiezo As Integer, Compteur As Integer
Dim recherche As String, fichier As String, rep As String, ColFin As Integer, plage As Range, Nbgr As Integer
Dim Cptr As Byte, NewCol As Integer, Val As Variant, MaCellule As Variant, MaPlage As Range, L As Integer, Lig As Long, DLig As Long
Dim DLigF As Long, x As Integer, Cel As Range, DLigCol As Integer, NewCol2 As Integer, Coljour, Y As Integer, Date1 As Date

'Ajout d'une feuille pour utiliser pour les graphiques
'________________________________________________________

Sheets(1).Copy after:=Sheets(Sheets.Count)
ActiveSheet.Name = Sheets(1).Range("B2").Value
Columns("F:I").Delete shift:=xlToLeft

'Manipulations de la feuille pour ajout de colonne
'__________________________________________________

DerCol = Sheets(Sheets.Count).Cells(2, Cells.Columns.Count).End(xlToLeft).Column

Nbre = Application.CountIf(Rows(1), "Sensor*")
    For Cptr = 1 To Nbre / 2
    col = Rows(1).Find("Sensor Temp", Cells(1, DerCol), xlValues).Column
        With Cells(1, col)
            .EntireColumn.Delete
        End With
    Next
  
DerCol = Sheets(Sheets.Count).Cells(2, Cells.Columns.Count).End(xlToLeft).Column
NewCol = DerCol + 1
Cells(1, NewCol).Value = "jj-mmm"
Cells(1, NewCol + 2).Value = "Jours de l'année"
Cells(1, NewCol + 1).Value = "Jours de l'année(lecture)"

DerLig = Range("A" & Rows.Count).End(xlUp).Row

i = 2
With Cells(i, NewCol)
    For i = 2 To DerLig
        Cells(i, NewCol).Value = Format(Cells(i, 5), "dd-mmm")
    Next i
End With

With Columns(NewCol + 1)
    .WrapText = True
    .AutoFit
End With

i = 2
With Cells(i, NewCol + 1)
    For i = 2 To DerLig
        Cells(i, NewCol + 1).Value = DatePart("y", Cells(i, 5))
    Next i
End With

With Columns(NewCol + 2)
    .WrapText = True
    .AutoFit
End With

Cells(2, NewCol + 2).Value = "1"
i = 3
With Cells(i, NewCol + 2)
    For i = 3 To 366
        If Cells(i, NewCol + 2).Value = "" Then
            Cells(i, NewCol + 2).Value = i - 1
        Else
            Cells(i, NewCol + 2).Value = i + 1
        End If
    Next i
End With

'Trouver la valeur du jours de l'année dans 2 colonnes
'______________________________________________________
MaCellule = Cells(2, NewCol + 1)
Set MaPlage = Range(Cells(2, NewCol + 2), Cells(DerLig, NewCol + 2))
Val = Application.Match(MaCellule, MaPlage, 0)

'Copier et coller le tableau vis-à-vis la bonne valeur
'______________________________________________________
Range(Cells(2, 1), Cells(DerLig, NewCol + 1)).Cut
Cells(Val + 1, 1).Select
ActiveSheet.Paste

'Compléter la colonne Jour de l'année(lecture)
'______________________________________________
DLig = Cells(2, NewCol + 1).End(xlDown).Row - 1
i = 2
With Cells(i, NewCol + 1)
    For i = 2 To DLig
        If Cells(i, NewCol + 1).Value = "" Then
            Cells(i, NewCol + 1).Value = i - 1
        Else
            Cells(i, NewCol + 1).Value = i + 1
        End If
    Next i
End With

DLigF = Range("e" & Rows.Count).End(xlUp).Row + 1
x = 364 - Cells(DLigF - 1, NewCol + 1).Value

With Cells(DLigF, NewCol + 1)
    For Each Cel In Range(Cells(DLigF, NewCol + 1), Cells(DLigF + x, NewCol + 1)).Cells
        Cel.Value = Cel.Offset(-1, 0).Value + 1
    Next Cel
End With

'Incrémenter la date de la colonne NewCol
'__________________________________________
DLig = Cells(2, NewCol).End(xlDown).Row - 1

With Cells(DLig, NewCol)
    If Cells(2, NewCol) = "" Then
        Cells(2, NewCol).Value = "01-JAN"
        Cells(2, NewCol).Value = Format(Cells(2, NewCol), "dd-mmm")
    End If
        For Each Cel In Range(Cells(3, NewCol), Cells(DLig, NewCol)).Cells
            Cel.Value = DateAdd("d", 1, Cel.Offset(-1, 0).Value)
            Cel.Value = Format(Cel.Value, "dd-mmm")
        Next Cel
End With

DLigF = Cells(Application.Rows.Count, NewCol).End(xlUp).Row + 1
Date1 = "30 décembre"
Y = DateDiff("d", (Cells(DLigF - 1, NewCol).Value), Date1)
With Cells(DLigF, NewCol)
    For Each Cel In Range(Cells(DLigF, NewCol), Cells(DLigF + Y, NewCol)).Cells
        Cel.Value = DateAdd("d", 1, Cel.Offset(-1, 0).Value)
        Cel.Value = Format(Cel.Value, "dd-mmm")
    Next Cel
End With


N.B: Je vous envoie le début de ma macro, le reste de la macro concerne les graphiques.

A voir également:

3 réponses

ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
29 juil. 2016 à 20:24
Bonsoir Bassmat, bonsoir le forum,

Je n'ai pas regardé ton long code (trop long, la flemme !)...
En principe, quand on renvoie une date de VBA vers une cellule. Il faut toujours l'envoyer au format américain yyyy/mm/dd. Elle s'écrira, dans le tableau Excel, au format défini dans la cellule de réception...
Pas sûr que ce soit la solution mais, on ne sait jamais...
0
bassmart Messages postés 281 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 19 décembre 2023 1
Modifié par bassmart le 1/08/2016 à 18:26
Bonjour Thautheme,

Merci beaucoup pour la réponse, mais ça n'y change rien. J'ai essayé en ajoutant la ligne suivante:
.Value = Format(Cells(DLig, NewCol), "yyyy-mm-dd")
dans le code suivant
DLigF = Cells(Application.Rows.Count, NewCol).End(xlUp).Row + 1
Date1 = "30 décembre"
Y = DateDiff("d", (Cells(DLigF - 1, NewCol).Value), Date1)
With Cells(DLigF, NewCol)
.Value = Format(Cells(DLig, NewCol), "yyyy-mm-dd")
    For Each Cel In Range(Cells(DLigF, NewCol), Cells(DLigF + Y, NewCol)).Cells
        Cel.Value = DateAdd("d", 1, Cel.Offset(-1, 0).Value)
        Cel.Value = Format(Cel.Value, "dd-mmm")
    Next Cel
End With
pour lui spécifier le format des données mais ça ne change rien pour les valeurs (mois de septembre à novembre) qui s'affiche en "yyyy-mm-dd" au lieu de "dd-mmm".

Merci!
0
bassmart Messages postés 281 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 19 décembre 2023 1 > bassmart Messages postés 281 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 19 décembre 2023
2 août 2016 à 17:05
Bonjour à tous,

J'ai vue que quand je je clique droit sur une cellule qui correspondent à des valeurs extraite de ma colonne (E) le format de la cellule sélectionné est "standard".

Alors que pour toute les valeurs qui sont calculés avec la macro, leur format est "yyyy-mm-dd" et dans ce cas, il y des valeurs qui sortent sous le bon format "yy-mmm' et d'autres non.

C'est à ni rien comprendre!!

Je vous envoi le fichier à tester et le fichier avec la macro.
http://www.cjoint.com/c/FHcpeeoHVa7
http://www.cjoint.com/c/FHcpeAcPBE7

Merci pour votre aide!
0
bassmart Messages postés 281 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 19 décembre 2023 1 > bassmart Messages postés 281 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 19 décembre 2023
Modifié par bassmart le 2/08/2016 à 17:17
Par contre petit inconvénient,vous allez avoir une erreur lorsque vous allez appuyé sur le bouton «Sélection du fichier». Il ne trouvera pas le répertoire, parce que je lui ai spécifier un chemin où se trouve le répertoire pour la sélection du fichier.
0
bassmart Messages postés 281 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 19 décembre 2023 1 > bassmart Messages postés 281 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 19 décembre 2023
8 août 2016 à 16:28
Il n'y a pas personne qui peut m'aider sur ce coup??
0
bassmart Messages postés 281 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 19 décembre 2023 1
11 août 2016 à 19:45
Bonjour à tous!!

Voici le fichier modifié afin de pouvoir sélectionner et ouvrir le fichier à tester peu importe l'endroit où il se trouve.

http://www.cjoint.com/data/FHlrQsZUUG7_Mise-en-forme-CordeVib-test2.xlsm

Merci pour votre aide!
0
eriiic Messages postés 24597 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 22 septembre 2024 7 235
Modifié par eriiic le 12/08/2016 à 16:48
Bonjour,

tu ne mets pas des dates mais des textes (regarde, elles s'alignent à gauche), et tu comptes sur excel pour interpréter.
Des fois il a bon, des fois non...
Une date doit être numérique.

Mais tu te compliques bien la vie pour rien : tu veux toutes les dates de l'année, c'est tout.
[M2].value = DateValue("01/01/16")
[M2].AutoFill Destination:=[M2].Resize(365), Type:=xlFillDays

Il te reste juste à compléter pour les années bissextiles et mettre le format voulu.
eric

En essayant continuellement, on finit par réussir. 
Donc plus ça rate, plus on a de chances que ça marche.(les Shadoks)
En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
0
bassmart Messages postés 281 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 19 décembre 2023 1
15 août 2016 à 14:03
Merci pour a réponse Eric!

Je comprend, mais je ne saisi pas très bien ou placer le code et que signifie le [M2]??

Est-ce que c'est ici que je doit corriger mon code pour insérer la ligne .Autofill à la place de la ligne DateAdd:
'Incrémenter la date de la colonne NewCol
'__________________________________________
DLig = Cells(2, NewCol).End(xlDown).Row - 1

With Cells(DLig, NewCol)
    If Cells(2, NewCol) = "" Then
        Cells(2, NewCol).Value = DateValue("16/01/01")
        Cells(2, NewCol).Value = Format(Cells(2, NewCol), "dd-mmm")
    End If
        For Each Cel In Range(Cells(3, NewCol), Cells(DLig, NewCol)).Cells
            Cel.Value = DateAdd("d", 1, Cel.Offset(-1, 0).Value)
            Cel.Value = Format(Cel.Value, "dd-mmm")
        Next Cel
End With


Merci!
0
eriiic Messages postés 24597 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 22 septembre 2024 7 235
15 août 2016 à 17:14
Bonjour,

[M2] équivalent à Range("M2")
Tu remplaces toutes tes lignes qui concernent la colonne M par mes 2 lignes, pas besoin d'en mettre un bout pour ensuite essayer d'ajouter le début et la fin puisque tu veux toute l'année.
eric
0
bassmart Messages postés 281 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 19 décembre 2023 1 > eriiic Messages postés 24597 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 22 septembre 2024
15 août 2016 à 17:46
Bonjour Eric,

La colonne M est variable, ce n'est pas toujours la colonne M.

Oui, je veux toute l'année, mais en fait quand j'ai des lectures associés à une date, il y a toujours deux lectures par jours. Donc 2 fois la même date, je veux seulement incrémenter les dates manquantes dans la colonne au dessus et en dessous des lectures.

Je veux utiliser cette colonne afin de faire afficher les lectures sur un graphique pour l'année complète.

J'ai essayé mais sans succès, toujours les deux type d'affichage! C'est sûrement moi qui n'y comprend rien!

Je veux que sur mon graphique au lieu d'avoir les dates inscrites en format yyyy-mm-dd qu'elles soient inscrites en format dd-mmm.

Voici ce que j'ai fait:

'Incrémenter la date de la colonne NewCol
'__________________________________________
DLig = Cells(2, NewCol).End(xlDown).Row - 1

With Cells(DLig, NewCol)

    If Cells(2, NewCol) = "" Then
        Cells(2, NewCol).Value = DateValue("16/01/01")
        Cells(2, NewCol).AutoFill Destination:=Cells(2, NewCol).Resize(365), Type:=xlFillDays
    End If
        For Each Cel In Range(Cells(3, NewCol), Cells(DLig, NewCol)).Cells
            Cel.Value = DateAdd("d", 1, Cel.Offset(-1, 0).Value)
            Cel.Value = Format(Cel.Value, "dd-mmm")
        Next Cel
End With

DLigf = Cells(Application.Rows.Count, NewCol).End(xlUp).Row + 1
Date1 = "30 décembre"
Y = DateDiff("d", (Cells(DLigf - 1, NewCol).Value), Date1)
With Cells(DLigf, NewCol)
'.Value = Format(Cells(DLig, NewCol), "yyyy-mm-dd")
    For Each Cel In Range(Cells(DLigf, NewCol), Cells(DLigf + Y, NewCol)).Cells
        'Cel.Value = Format(Cells(DLig, NewCol), "yyyy-mm-dd")
        Cel.Value = Format(Cells(DLig, NewCol), "standard")
        Cel.Value = DateAdd("d", 1, Cel.Offset(-1, 0).Value)
        Cel.Value = Format(Cel.Value, "dd-mmm")
    Next Cel
End With


Merci beaucoup!
0
eriiic Messages postés 24597 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 22 septembre 2024 7 235
Modifié par eriiic le 16/08/2016 à 00:21
Bonjour,

je n'avais pas vu tes dates en double.
Même principe mais en 2 fois alors.
J'ai fait cette partie et mis un Stop juste avant que tu fasses en pas-à-pas et voit le déroulement.
J'ai laissé tes dates 'mal faites' en texte que tu vois la différence (enlève le 'centré' sur cette colonne).
Ne compte jamais sur excel pour interpréter les dates texte, il a tendance à voir des dates anglaises partout mm-dd et le 04/03 se transforme en 03/04.
Utilise Datevalue(ta date) pour qu'il utilise les réglages date courte de ton poste et avoir une date numérique.
Essaie de corriger ta liste de date en tenant compte de ça.
https://www.cjoint.com/c/FHpwrda5lbh
eric

PS : et évite de changer l'alignement des cellules tant que ce n'est pas débogué, tu te masques les sources potentielles d'ennuis des valeurs textes.
0
bassmart Messages postés 281 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 19 décembre 2023 1 > eriiic Messages postés 24597 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 22 septembre 2024
16 août 2016 à 14:53
Merci beaucoup pour ta réponse Eric,

Ça fonctionne, j'ai juste modifier le code si la dernière date présente à la fin du tableau est le 12 décembre.

Lig = [A1].End(xlDown).Row - 1
Cells(2, NewCol) = DateValue("01/01")
Cells(2, NewCol).AutoFill Destination:=Cells(2, NewCol).Resize(Lig - 1), Type:=xlFillDays
DLig = Cells(, NewCol).End(xlDown).Row

If Not Cells(DLig, NewCol + 1) = "365" Then
    Cells(DLig + 1, NewCol) = DateValue(Cells(DLig, NewCol)) + 1
    Cells(DLig + 1, NewCol).AutoFill Destination:=Cells(DLig + 1, NewCol).Resize(DateValue("31/12") - Cells(DLig + 1, NewCol) + 1), Type:=xlFillDays
End If


Merci pour des conseils!
0