Microsoft 365 Suppression espace indésirable et avoir une date courte

AD95

XLDnaute Junior
Bonjour la team,

Merci d'avance de voter aide.

Pourriez vous svp me dire comment je peux supprimer en code vba les espaces indésirables dans la date (il y en a en fin de chaine de caractère après les secondes et entre la date et l'heure ? Je n'arrive pas à les passer en date courte à cause de ces espaces en manuel ça passe mais pas avec le code vba que j'ai ici :eek:

VB:
Sub TraitementITBExternes()
    ' Déclaration des variables
    Dim ws As Worksheet
    Dim rng As Range
    Dim cell As Range
    
    ' Spécifier la feuille de travail
    Set ws = ThisWorkbook.Sheets("Externes")
    
    ' Spécifier la plage dans la colonne H (de la ligne 2 à  la dernière ligne utilisée)
    Set rng = ws.Range("H2:H" & ws.Cells(ws.Rows.Count, "H").End(xlUp).Row)
    
    ' Supprimer les doubles espaces dans la colonne H et ne laisser qu'un seul espace
    For Each cell In rng
        cell.Value = Application.WorksheetFunction.Trim(cell.Value)
        cell.Value = Replace(cell.Value, " ", "  ")
    Next cell
    
    ' Mettre la date en format court dans la colonne H (supposons que les valeurs soient des dates)
    rng.NumberFormat = "Short Date"
    
End Sub

1705420163144.png
 
Solution
Bonjour.
Comme ça :
VB:
Sub TraitementITBExternes()
' Déclaration des variables
   Dim Wsh As Worksheet, Rng As Range, T(), L As Long
  
' Spécifier la plage dans la colonne H (de la ligne 2 à  la dernière ligne utilisée)
   Set Wsh = ThisWorkbook.Sheets("Externes")
   Set Rng = Wsh.Range("H2:H" & Wsh.Cells(Wsh.Rows.Count, "H").End(xlUp).Row)
  
' Convertir les textes en dates
   T = Rng.Value
   For L = 1 To UBound(T, 1)
     If VarType(T(L, 1)) = vbString Then T(L, 1) = CDate(T(L, 1))
     Next L
   Rng.Value = T
  
' Mettre la date en format court dans la colonne H (supposons que les valeurs soient des dates)
   Rng.NumberFormat = "dd/mm/yyyy hh:mm"
   End Sub

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour AD,
Sans fichier test difficile de répondre.
Comme vous avez "bidouillé" la date en manuel, il faut avoir le format exact pour rectifier.
Le contenu de la cellule est il une date ou un texte ? Apparemment c'est un texte, donc le NumberFormat ne fonctionnera pas car cette fonction ne traite que des nombres.
Peut être alors avec :
VB:
ValDate=Mid(ContenuCellule,10)
Mais cela restera du texte, non une date.
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Comme ça :
VB:
Sub TraitementITBExternes()
' Déclaration des variables
   Dim Wsh As Worksheet, Rng As Range, T(), L As Long
  
' Spécifier la plage dans la colonne H (de la ligne 2 à  la dernière ligne utilisée)
   Set Wsh = ThisWorkbook.Sheets("Externes")
   Set Rng = Wsh.Range("H2:H" & Wsh.Cells(Wsh.Rows.Count, "H").End(xlUp).Row)
  
' Convertir les textes en dates
   T = Rng.Value
   For L = 1 To UBound(T, 1)
     If VarType(T(L, 1)) = vbString Then T(L, 1) = CDate(T(L, 1))
     Next L
   Rng.Value = T
  
' Mettre la date en format court dans la colonne H (supposons que les valeurs soient des dates)
   Rng.NumberFormat = "dd/mm/yyyy hh:mm"
   End Sub
 

Modeste geedee

XLDnaute Barbatruc
Bonjour la team,

Merci d'avance de voter aide.

Pourriez vous svp me dire comment je peux supprimer en code vba les espaces indésirables dans la date (il y en a en fin de chaine de caractère après les secondes et entre la date et l'heure ? Je n'arrive pas à les passer en date courte à cause de ces espaces en manuel ça passe mais pas avec le code vba que j'ai ici :eek:

VB:
Sub TraitementITBExternes()
    ' Déclaration des variables
    Dim ws As Worksheet
    Dim rng As Range
    Dim cell As Range
  
    ' Spécifier la feuille de travail
    Set ws = ThisWorkbook.Sheets("Externes")
  
    ' Spécifier la plage dans la colonne H (de la ligne 2 à  la dernière ligne utilisée)
    Set rng = ws.Range("H2:H" & ws.Cells(ws.Rows.Count, "H").End(xlUp).Row)
  
    ' Supprimer les doubles espaces dans la colonne H et ne laisser qu'un seul espace
    For Each cell In rng
        cell.Value = Application.WorksheetFunction.Trim(cell.Value)
        cell.Value = Replace(cell.Value, " ", "  ")
    Next cell
  
    ' Mettre la date en format court dans la colonne H (supposons que les valeurs soient des dates)
    rng.NumberFormat = "Short Date"
  
End Sub

Regarde la pièce jointe 1188547
bonsour®
Pour info : l'espace insécable a pour code Chr(160) !!!
de nombreux exemples de mise en œuvre sont régulièrement proposé dans le forum...
 
Dernière édition:

AD95

XLDnaute Junior
Bonjour.
Comme ça :
VB:
Sub TraitementITBExternes()
' Déclaration des variables
   Dim Wsh As Worksheet, Rng As Range, T(), L As Long
 
' Spécifier la plage dans la colonne H (de la ligne 2 à  la dernière ligne utilisée)
   Set Wsh = ThisWorkbook.Sheets("Externes")
   Set Rng = Wsh.Range("H2:H" & Wsh.Cells(Wsh.Rows.Count, "H").End(xlUp).Row)
 
' Convertir les textes en dates
   T = Rng.Value
   For L = 1 To UBound(T, 1)
     If VarType(T(L, 1)) = vbString Then T(L, 1) = CDate(T(L, 1))
     Next L
   Rng.Value = T
 
' Mettre la date en format court dans la colonne H (supposons que les valeurs soient des dates)
   Rng.NumberFormat = "dd/mm/yyyy hh:mm"
   End Sub
Bonjour Dranreb,

Nickel ça marche merci beaucoup c'est exactement ce qui me fallait.
@sylvanu @Modeste geedee @Dranreb Merci pour votre aide et expertise

Bonne journée à vous
 

AD95

XLDnaute Junior
Bonjour.
Comme ça :
VB:
Sub TraitementITBExternes()
' Déclaration des variables
   Dim Wsh As Worksheet, Rng As Range, T(), L As Long
 
' Spécifier la plage dans la colonne H (de la ligne 2 à  la dernière ligne utilisée)
   Set Wsh = ThisWorkbook.Sheets("Externes")
   Set Rng = Wsh.Range("H2:H" & Wsh.Cells(Wsh.Rows.Count, "H").End(xlUp).Row)
 
' Convertir les textes en dates
   T = Rng.Value
   For L = 1 To UBound(T, 1)
     If VarType(T(L, 1)) = vbString Then T(L, 1) = CDate(T(L, 1))
     Next L
   Rng.Value = T
 
' Mettre la date en format court dans la colonne H (supposons que les valeurs soient des dates)
   Rng.NumberFormat = "dd/mm/yyyy hh:mm"
   End Sub
@Dranreb comment je peux lui dire que s'il n'y a pas de donnée à partir de H2 alors passer à l'étape suivante ou ignorer etc... sur mon fichier original j'intègre ton code dans un code qui récupère des données dans une feuille et les colle dans une autre - puis ton code fait le travail dans la colonne H2.quand il y a une donnée tout fonctionne parfaitement par contre des qu'il n'a rien il affiche un message d'erreur

1705505328358.png


1705505355963.png
 

Cousinhub

XLDnaute Barbatruc
Inactif
Bonjour,
Comme tu as 365, tu peux également utiliser Power Query, notamment pour ce traitement, voire même pour effectuer toute la manipulation (import dans un autre onglet, traitements autres....)
sur mon fichier original j'intègre ton code dans un code qui récupère des données dans une feuille et les colle dans une autre
Le code pour convertir :
PowerQuery:
let
    Source = Excel.CurrentWorkbook(){[Name="Tableau1"]}[Content],
    ModType = Table.TransformColumnTypes(Source,{{"TEST ", type datetime}})
in
    ModType

Voici ton fichier. Pour mettre à jour, clic droit dans la requête, "Actualiser"
Bonne fin d'apm
 

Pièces jointes

  • Suppression_Espace_Date.xlsx
    18.5 KB · Affichages: 3

AD95

XLDnaute Junior
Bonjour,
Comme tu as 365, tu peux également utiliser Power Query, notamment pour ce traitement, voire même pour effectuer toute la manipulation (import dans un autre onglet, traitements autres....)

Le code pour convertir :
PowerQuery:
let
    Source = Excel.CurrentWorkbook(){[Name="Tableau1"]}[Content],
    ModType = Table.TransformColumnTypes(Source,{{"TEST ", type datetime}})
in
    ModType

Voici ton fichier. Pour mettre à jour, clic droit dans la requête, "Actualiser"
Bonne fin d'apm
Bonojur Cousinhub,

Merci beaucoup pour ton retour, Avec la commande "On Error Resume Next", je garde de côté ton astuce je m'y connais pas trop en power query tu me donne l'occasion de m'instruire dessus je vais étudier ça.

Merci à toi et bonne journée
 

Discussions similaires

Statistiques des forums

Discussions
315 096
Messages
2 116 173
Membres
112 677
dernier inscrit
Justine11