XL 2010 Format heure impossible à changer ou exploiter

Alexi64

XLDnaute Nouveau
Bonsoir à tous,

JE suis nouveau sur le Forum. C'est sur les conseils d'un camarade que je viens vous exposer mon problème. Merci de m'accueillir et par avance merci de votre indulgence.
J'ai un fichier Excel avec des colonnes aux formats HH:MM:SS (une) et H:MM:SS (deux) et je veux toutes les passer en HH:MM:SS.
Mais c'est impossible de changer le format.
Et Excel qui ne reconnait aucun des deux formats ne me fait pas les calculs ou report que je souhaite.
Pour autant, je me suis aperçu qu'en rentrant dans la cellule par F2, comme par magie le format devient vraiment du temps dont je peux faire tout ce que je veux !!!!
Mais je ne me vois pas rentrer dans des centaines de cellules une a une, pour, comment dire, "valider" le format...

Je vous mets un bout de fichier. Il y a trois colonnes grisées.

Merci de m'aider.
 

Pièces jointes

  • Pour download.xlsx
    12.5 KB · Affichages: 23

Alexi64

XLDnaute Nouveau
Bonjour Alexi64 ,MJ13, Dranreb, le forum

  • Dans l’importe quelle cellule vide du tableau, tapez 1
  • Ouvrez le menu Edition > Copier
  • Sélectionnez la colonne contenant les heures
  • Ouvrez le menu Edition > Collage spécial
  • Choisissez Multiplication et validez
  • Sélectionnez la colonne contenant les heures
  • mettre au format hh:mm:ss
Cdt
Bonjour Chris24,
Par le "1" ça fonctionne. Je vais tester sur le fichier original.
Merci de votre coup de main.
JE vais maintenant tester la macro de Dranreb..
 

Alexi64

XLDnaute Nouveau
Bonjour

Si tu sélectionnes toute la colonne, auquel tu imposes le format [hh]:mm, cela ne fonctionne pas ? Chez moi, avec ton fichier, c'est OK. Après, je peux ajouter des durées à ces valeurs, en les écrivant sous la forme 1/24 pour 1 heure.

@ plus
Pour pour vous dépanner cette macro tente de transformer tous les textes de la forme "*:*" des cellules de la feuille active en valeurs d'heures.
VB:
Option Explicit
Sub ConvertirHeures()
   Dim R As Range, T(), L As Long, C As Long
   Set R = ActiveSheet.UsedRange
   T = R.Value
   On Error Resume Next
   For L = 1 To UBound(T, 1): For C = 1 To UBound(T, 2)
      If VarType(T(L, C)) = vbString Then If T(L, C) _
         Like "*:*" Then T(L, C) = TimeValue(T(L, C))
      Next C, L
   R.Value = T
   End Sub

A tous, je viens de tester sur mon bout de fichier (celui que vous avez) et la macro de Dranreb fonctionne. Je passe ensuite en format hh:mm:ss les colonnes en AM PM ou je ne sais, et je récupère mes petits !
Je ne sais pas quoi dire !
Ou plutôt j'ai une question : où apprend-on toute ses combinaisons ?
Car je n'ai fait que copier. Et j'aimerais comprendre.
Merci de votre aide et des prochains cours que je vais devoir apprendre ?
Alexi
 

Dranreb

XLDnaute Barbatruc
Ma macro complétée de façon à mettre aussi le format:
VB:
Option Explicit
Sub ConvertirHeures()
   Dim R As Range, T(), L As Long, C As Long
   Set R = ActiveSheet.UsedRange
   T = R.Value
   On Error Resume Next
   For L = 1 To UBound(T, 1): For C = 1 To UBound(T, 2)
      If VarType(T(L, C)) = vbString Then If T(L, C) _
         Like "*:*" Then T(L, C) = TimeValue(T(L, C))
      Next C, L
   R.Value = T
   Set R = Intersect(ActiveSheet.[4:1000000], R)
   R.Columns(1).NumberFormat = "hh:mm:ss"
   R.Columns(5).NumberFormat = "hh:mm:ss"
   R.Columns(7).NumberFormat = "hh:mm:ss"
   End Sub
Je dirais que vous pouvez déjà apprendre beaucoup en posant des question ici.
 

Alexi64

XLDnaute Nouveau
Je ne sais pas quoi vous dire. Merci de votre aide. Vraiment.
Existe-il un livre style les macros pour les nuls, ou langage VBA, pour apprendre à quoi correspondent ces codes empruntés à votre macro (pour l'exemple) :
On Error Resume Next For L = 1 To UBound(T, 1): For C = 1 To UBound(T, 2) If VarType(T(L, C)) = vbString Then If T(L, C) _ Like "*:*" Then T(L, C) = TimeValue(T(L, C)) Next C, L

et comment on combine les possibilités ?
 

Pounet95

XLDnaute Occasionnel
Bonjour,
Je crois qu'il y a un problème quand même concernant la durée d'intro.
Il me semble que ça ne dure guère longtemps, alors voir des 12:14:00 AM ça me "choque"
Je pense qu'il s'agit de 14s , non ?
Je vous propose d'essayer de modifier avec ça :

VB:
Sub Transforme_Texte_Colonne_G()
    Dim derlig As Long
    Dim cell As Range
    
    On Error Resume Next
    'la denière ligne
    derlig = Range("G100000").End(xlUp).Row
    Range("G4:G" & derlig).Select

    For Each cell In Selection
        If cell <> "" Then
            cell.Offset(0, 2) = "00:" & cell
            cell.Offset(0, 3).Value = TimeValue(cell.Offset(0, -1))
        End If
    Next
End Sub
 

Alexi64

XLDnaute Nouveau
Re bonjour incroyables créateurs de miracles.
JE reviens vers vous, mais cette fois c'est un autre problème qui a toutefois un impact énorme sur mes timings.
Pour mes noms d'artistes, quand il y a deux artistes ou un nom de groupe un peu long, le logiciel me met ça sur deux lignes, mais le pire c'est qu'il me décale la durée du titre.
Je vous passer un bout de fichier au cas où il existe aussi un miracle pour ça !
Je vous ai mis dans le fichier, le problème et mon souhait en dessous en sachant que je vais devoir travailler sur des centaines de lignes… et que le problème ne survient pas tout le temps.
Mais je ne sais pas si je suis sur le bon post.
Merci d'avance.
 

Pièces jointes

  • Pour download 2.xlsx
    12.2 KB · Affichages: 6

Dranreb

XLDnaute Barbatruc
Il me faudrait tous les cas de figure, parce que là je n'ai pas assez d'information sur la logique de la structure des donnée sur laquelle m'appuyer quand l'un, l'autre ou les deux textes sont continués sur la ou les lignes suivantes …
 

Pounet95

XLDnaute Occasionnel
Bonsoir,
Pour le principe, A adapter en fonction de ce que pourrait être les données issues du logiciel spécial.

VB:
Sub Regrouper_Lignes()
    'Dernière heure colonne A
    derlig = Range("A10000").End(xlUp).Row
    Range("A4").Select
    
    lig = ActiveCell.Row
    Do While lig < derlig
        If Cells(lig, 1) <> "" Then
            'chercher durée
            suite = 0
            Do While Cells(lig + suite, 4) = ""
                suite = suite + 1
            Loop
            If suite > 0 Then
                'artiste suite
                txt = Cells(lig + suite, 2)
                'concaténer avec artiste au dessus
                Cells(lig, 2) = Cells(lig, 2) & vbCrLf & Cells(lig + suite, 2)
                'durée monte cellule au dessu
                Cells(lig, 4) = Cells(lig + suite, 4)
                'Efface le contenu de la ligne suite
                Range(Cells(lig + suite, 1), Cells(lig + suite, 6)).ClearContents
            End If
        End If
        lig = lig + 1
    Loop
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 100
Messages
2 085 290
Membres
102 851
dernier inscrit
didine501