VBA//modifier format colonne

Résolu/Fermé
Bahia - 13 juil. 2011 à 10:04
 Bahia - 13 juil. 2011 à 13:00
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


A voir également:

3 réponses

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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
13 juil. 2011 à 10:15
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
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
Au fait..
merci pour votre aide :)
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
13 juil. 2011 à 10:44
réponds déjà à cette petite question :

Pourquoi déclares-tu DateDemande et DebutRealisation As Range?
0
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
MrQuant Messages postés 45 Date d'inscription mardi 3 juin 2008 Statut Membre Dernière intervention 3 septembre 2012 1
Modifié par MrQuant le 13/07/2011 à 11:30
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
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
13 juil. 2011 à 12:37
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
13 juil. 2011 à 12:38
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
13 juil. 2011 à 12:39
je répondrais quand le site ira mieux...
0
MrQuant Messages postés 45 Date d'inscription mardi 3 juin 2008 Statut Membre Dernière intervention 3 septembre 2012 1
13 juil. 2011 à 12:47
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
C'est ce que j'ai fait et ça marche.
Et ton code à toi aussi pikaju marche parfaitement. Merciiiiii
0