Contraindre le format de sortie d'une date (sus au format anglais)

Résolu
VictorVM1 Messages postés 15 Statut Membre -  
VictorVM1 Messages postés 15 Statut Membre -
Bonjour à tous,

Je vous présente mon problème :

Je dispose d'un array que je veux imprimer sur la colonne d'un feuille excel. Cet array est composé de dates et quand celles ci arrivent sur ma feuille les dates dont le jour est inférieur à 12 arrivent au format anglais (mm/jj/aaaa) et non au format français comme je le voudrais.

Voici le code


For i = 1 To UBound(dateopti)

Worksheets(Nomfeuille).Range("A" & i) = dateopti(i)

Next i


A noter que lorsque je lance le debugeur les dates de dateopti(i) ret la date au bon format. C'est donc très vraisemblablement au moment de l'impression qu'il y a erreur.

Configuration: Windows / Firefox 68.0


Configuration: Windows / Firefox 68.0

5 réponses

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour,
    je ne vois pas la déclaration de ta variable
    dateopti
    .
    0
    1. VictorVM1 Messages postés 15 Statut Membre
       
      Effectivement ce n'est qu'une partie de mon code, le reste étant à priori bon
      0
      1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > VictorVM1 Messages postés 15 Statut Membre
         
        si tu sais ce qui est bon, corrige ce qui ne l'est pas.
        pour moi, le premier suspect est ta déclaration de la variable
        dateopti
        .
        0
  2. VictorVM1 Messages postés 15 Statut Membre
     
    Effectivement c'est une piste, dateopti() est défini comme variant. J'ai fait ce choix car à un moment dans mon code je supprime des lignes en utilisant =Null, ce qui ne marche pas en définissant dateopti() comme date.

    J'espérai trouver quelque chose qui formaterai ou reformaterai la cellule ou la valeur de l'array au format jj/mm/aaaa

    Dim dateopti() as variant

    'remplissage de dateopti avec des dates

    For i = 1 To UBound(dateopti)

    Worksheets(Nomfeuille).Range("A" & i) = dateopti(i)

    Next i
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      le premier suspect est donc coupable.

      assigner Null ne supprime rien, pourquoi ne pas utiliser une valeur telle que 0 à la place de Null?

      tu ne montres pas non plus comment tu assignes des dates à
      dateopti
      , c'est probablement incorrect également. je suspecte que tu n'utilises pas une variable de type date pour assigner une valeur à
      dateopti
      .

      pour finir, ton code n'utilise probablement aucune date, contrairement à ce que tu imagines.

      oublie l'idée de format, c'est une fausse piste: les dates ont des valeurs. le format n'intervient qu'au moment de les afficher: sus aux formats!
      0
  3. VictorVM1 Messages postés 15 Statut Membre
     
    Ok bon passons aux choses sérieuses alors :D

    J'ai un peu menti; en fait j'ai deux arrays en parallèles. Je sais c'est pas dingue mais pour le moment ça me permet plus de flexibilité je regrouperai tout plus tard.

    En gros j'ai plusieurs dates (datesopti()) qui s'appliquent sur une liste de machines (num()) mais pour chaque machine je cherche a récupérer la (ou les) dates la (ou les) plus proche(s) de moi.
    Ici ma stratégie consiste à prendre la dernière case la comparer à toutes les cases en partant de la fin et si il y a une machine dont la date est plus lointaine je décale toute les lignes d'un cran vers le début pour "recouvrir" la ligne que je ne veut pas et je supprime la dernière ligne qui fait doublon.
    Ensuite je compare l'avant dernière ligne à toutes les autres ect...

    Mais la seule façon m'a-t-il semblé de supprimer la dernière case de l'array dateopti() est de le déclarer comme Variant et assigner à la dernière ligne Null.

    Voilà j'espère que ça te permettra d'éclaircir un peu le problème

    Dim dateopti() as Variant
    Dim num() as String
    Dim date4mois as Date
    date4mois = DateAdd("d", 120, dateajd)
    
    Dim b As Long
    Dim e As Long
    Dim k As Long
    
    'Remplissage des tableaux
    
        e = Ubound(dateopti)
        b = e
    
        While b >= 0                                         'première iteration
        
            d = e
            
            While d >= 0                                      'seconde iteration
                 
                If  num(b) = num(d) And dateopti(b) < dateopti(d) And dateopti(b) > date4mois And dateopti(d) > date4mois Then
                     
                    For k = d + 1 To e                      'Décalage vers le bas
                        num(k-1) = num(k)
                        dateopti(k - 1) = dateopti(k)
                    Next k                                        'Suppression de la dernière ligne
                        dateopti(e) = Null
                        num(e)=""
                    e = e - 1                                    'Reduction de la taille max du tableau
                        
                End If
                
                d = d - 1
              
            Wend
            
            b = b - 1
            
        Wend
    
     For i = 1 To UBound(dateopti)
       
            Worksheets(Nomfeuille).Range("A" & i) = dateopti(i)
            Worksheets(Nomfeuille).Range("B" & i) = dateopti(i)
            
        Next i 
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      je suppose que la ligne 8 remplace le code où tu introduis des dates incorrectes dans
      dateopti
      .

      les noms de tes variables sont mal choisis: ils ne donnent aucune idée de à quoi servent les variables.

      en ligne 39, pourquoi n'utilises-tu pas e?

      je pense que tu peux supprimer les lignes 25 et 26.
      0
      1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        après la ligne 29, je pense qu'il faut soustraire 1 de b si b >d.
        0
  4. VictorVM1 Messages postés 15 Statut Membre
     
    Concernant l'assignation ça ressemble à ça:

    
    Dim i as Long
    Dim a as Long
    Dim date4mois as Date
    Dim date6mois as Date
    
    date4mois = DateAdd("d", 120, dateajd)
    date6mois = DateAdd("d", 180, dateajd)
    
    a = 0
    i = 1
    
    While Worksheets(Nomfeuille1).Cells(i, 1) <> ""
            
            If date4mois < Worksheets(Nomfeuille1).Cells(i, 17) And Worksheets(Nomfeuille1).Cells(i, 17) < date6mois Then
    
                ReDim Preserve nom(a)
                ReDim Preserve dateopti(a)
    
                nom(a) = Worksheets(Nomfeuille1).Cells(i, 1)
                dateopti(a) = Worksheets(Nomfeuille1).Cells(i, 2)
                
                a = a + 1
           End If
    i = i + 1
    Wend
    
    
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      voyons si le soucis persiste après avoir changé le type de dateopti.
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. VictorVM1 Messages postés 15 Statut Membre
     
    Merci beaucoup yg_be, effectivement il n'y avait nul besoin de supprimer ces dernières lignes! Maintenant il ne me reste plus qu'à regrouper sous forme de tableau
    0