VBA//modifier format colonne

Résolu
Bahia -  
 Bahia -
Bonjour,

Suite à l'exportation du tableau sur lequel je travaille, les cellules des colonnes dates ne comportent plus que des "######". Le pb est que je dois faire une grosssse macro qui permettrait à mon boss de n'avoir à s'occuper de rien.
Comment automatiser le changement de format, qd ce morceau de code ne marche pas:

Sub Preparation()

Sheets("Depart").Activate
'Modifier automatiquement le format des colonnes donnant la date de demande d'intervention, et celle demandant la date de réalisation de celle-ci

Columns("L:L").Select
Selection.NumberFormat = "jj/mm/aaaa hh:mm:ss"
Columns("BR:BR").Select
Selection.NumberFormat = "jj/mm/aaaa hh:mm:ss"

End Sub

3 réponses

  1. Bahia
     
    autre précision: j'ai essayé de mettre "dd/mm/yyyy hh:mm:ss" plutôt que "JJ/mm/aaaa ..."
    et ça n'a pas marché
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 772
       
      Bonjour,
      Je viens de tester sur des dates en Colonne L, la solution par :
      Columns("L:L").Select
      Selection.NumberFormat = "dd/mm/yyyy hh:mm:ss"
      fonctionne bien.
      Si vous obtenez des #######, deux choix.
      1- vous n'aviez pas des dates dans les cellules concernées
      2- vos colonnes ne sont pas suffisamment larges. Essayez de les agrandir...
      0
    2. Bahia
       
      C'était effectivement la largeur de ma cellule qui n'allait pas. J'y aurais jamais pensé..
      Mais du coup la suite de mon code bug un peu (en fait certaines lignes marchent et d'autres ne marche plus, mais plus important, il ne veut plus me calculer le délai :s)

      Sub Preparation()

      Sheets("Depart").Activate

      'On commence par modifier la largeur des colonnes pour que la suite du code marche
      Columns("A:FO").ColumnWidth = 20

      'Création d'une colonne permettant de calculer le temps écoulé entre la date de demande d'intervention et la date de réalisation de l'intervention
      'puis d'une colonne indiquant si l'intervention RER considérée a été réalisée dans les délais ou hors délai
      'et enfin une dernière indiquant si l'intervention BER considérée a été réalisé dans les délai ou hors délai
      Columns("AY:AY").Select
      Range("AY1").Resize(, 3).EntireColumn.Insert Shift:=xlToRight

      'On les nomme
      Range("AY1").FormulaR1C1 = "Calcul du Délai"
      Range("AZ1").FormulaR1C1 = "Respect du délai RER"
      Range("BA1").FormulaR1C1 = "Respect du délai BER"


      Dim i As Long
      Dim DateDemande As Range
      Dim DebutRealisation As Range


      For i = 2 To Range("A65536").End(xlUp).Row
      DateDemande = Range("L" & i).Value
      DebutRealisation = Range("BS" & i).Value
      Range("AY" & i).FormulaLocal = DateDiff("h", DateDemande, DebutRealisation, vbMonday, vbFirstJan1)
      Next i

      End Sub
      0
    3. Bahia
       
      Au fait..
      merci pour votre aide :)
      0
    4. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 772
       
      réponds déjà à cette petite question :

      Pourquoi déclares-tu DateDemande et DebutRealisation As Range?
      0
    5. Bahia
       
      C'est vrai que finalement, même qd le calcul de delai marche, le résultat que j'obtient et bizarrement faux :s
      Lorsque je les définis comme des dates, ça ne plait pas au vbe (ce sont les variables qui récupère la date et l'heure de demande d'intervention, ou de réalisation de celle-ci)

      J'ai pensé à utiliser Selection.Autofill Destination...
      Mais je suis un peu perdu car mon pb reste le même: récupérer ce qu'il y a dans mes cellules
      0
  2. MrQuant Messages postés 56 Statut Membre 1
     
    Salut,
    Je ne comprend pas trop ce que tu cherche mais il me semble qu'en insérant
    With Worksheets("TaFeuille") 
          .Columns.AutoFit 
    End With 
    

    tu aura des colonnes avec des largeurs automatiques.
    et tu vas sur ta feuille et sur la colonne date tu spécifie le format date approprié.

    Cheers
    0
  3. Bahia
     
    Merci à tous les deux pour votre aide.
    Malheureusement, votre code Pikaju ne convient pas, j'ai des "00:00:00" qui apparaissent partout sur ma feuille de calcul, et sur le fichier que je vous ai montré, c'est pareil, sauf que j'ai des dates en plus qui ne veulent pas dire grd chose.

    Et pour répondre à MrQuant, je dois créer une big macro pour mon boss, qu'il pourra utiliser sans passer par des calculs intermédiaires, tout ce qu'il veut c'est copié collé son tableau et obtenir directement le résultat, sans se préoccuper des détails
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 772
       
      Sur le classeur que tu nous as passé, les calculs de DateDiff sont exacts...
      Si tu obtiens des 00:00:00 c'est surement un problème de formatage de cellule...
      Ajoutons à cela un souci, certainement du à "FormulaLocal", et on a des résultats tout pourris!!!
      Essaye ceci et dis moi :
      Sub Delai()
      Dim Lign As Long
      Dim DateDemande As Date, DebutRealisation As Date
      
      For Lign = 2 To Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row
          DateDemande = CDate(Range("A" & Lign).Value)
          DebutRealisation = CDate(Range("B" & Lign).Value)
          Range("C" & Lign).Value = Val(Format(DebutRealisation - DateDemande, "[h]"))
      Next Lign
      End Sub
      0
    2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 772
       
      Sur le classeur que tu nous as passé, les calculs de DateDiff sont exacts...
      Si tu obtiens des 00:00:00 c'est surement un problème de formatage de cellule...
      Ajoutons à cela un souci, certainement du à "FormulaLocal", et on a des résultats tout pourr*s!!!
      Essaye ceci et dis moi :
      Sub Delai() 
      Dim Lign As Long 
      Dim DateDemande As Date, DebutRealisation As Date 
      
      For Lign = 2 To Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row 
          DateDemande = CDate(Range("A" & Lign).Value) 
          DebutRealisation = CDate(Range("B" & Lign).Value) 
          Range("C" & Lign).Value = Val(Format(DebutRealisation - DateDemande, "[h]")) 
      Next Lign 
      End Sub
      0
    3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 772
       
      je répondrais quand le site ira mieux...
      0
    4. MrQuant Messages postés 56 Statut Membre 1
       
      Salut,

      si ta Macro ne va servir qu'à formater une colonne date alors elle sera une perte de temps car tu peux le faire directement sur Excel en peu de temps.

      Sinon tu peux activer l'enregistreur de macro et tu effectue la tache que tu souhaite et tu te base sur le code générée !

      Sinon pour avoir des réponses précises il faut que u nous spécifie exactement ce que tu veux faire !

      Cheers.
      0
    5. Bahia
       
      C'est ce que j'ai fait et ça marche.
      Et ton code à toi aussi pikaju marche parfaitement. Merciiiiii
      0