Autres [A1].currentregion : transformer String dans bon format (nb, date)

zebanx

XLDnaute Accro
Bonjour à tous,

Pourriez-vous s'il vous plait m'apporter vos lumières concernant, dans une plage définie par une "currentregion", la valeur des cellules contentant du texte (STRING) soit :
- en date
- en chiffre (format "général")
- ne rien faire si vide

Plus clair avec un fichier.

Je vous remercie par avance pour vos réponses. Bonne journée
zebanx
 

Pièces jointes

  • Convertit_date.xlsm
    18.3 KB · Affichages: 22

Calvus

XLDnaute Barbatruc
Bonjour zebanx, le forum,

Je n'ai pas réussi avec le With, mais voici une autre solution qui fonctionne.
VB:
Sub convert()

Set plage = [A1].CurrentRegion.Offset(1, 0)
Dim cel As Range

For Each cel In plage
If cel <> "" And IsNumeric(cel) Then cel.Value = CInt(cel.Value)
Next

End Sub

A+
 

zebanx

XLDnaute Accro
Bonjour Calvus,

Je te remercie. C'est une partie de traitée :cool:

(Je continue de mon côté à regarder le cas des cellules qui doivent au final correspondre à une date en partant de ton code).

@+

Edit : ok pour les dates avec -
Encore Merci @Calvus

VB:
Sub convert()

Set plage = [A1].CurrentRegion.Offset(1, 0)
Dim cel As Range

On Error Resume Next

For Each cel In plage
'-- cas 1 : valeur numérique et non vide)
If cel <> "" And IsNumeric(cel) Then
cel.Value = CInt(cel.Value)
Else
'-- cas 2 : date
tmp = Split(cel.Value, "/")
    If UBound(tmp) > 0 Then
    cel.Value = CDate(cel.Value)
        '-- cas 2.b = date seulement (entier)
        If cel.Value = Int(cel.Value) Then
        cel.NumberFormat = "dd-mm-yy"
        End If
    End If
End If
Next

End Sub
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, zebanx, Calvus
A tester
(Sur mon PC, cela fonctionne mais pas toujours...;))
VB:
Sub Test()
Dim plage As Range, c As Range
Set plage = [A1].CurrentRegion
On Error Resume Next
For Each c In plage.SpecialCells(xlCellTypeConstants, 2)
If c.Column < 9 Then
If InStr(c, "/") > 0 And InStr(c, "/") <= 4 Then
c = CDate(c) * 1: c.NumberFormatLocal = "jj-mm-aa"
End If
End If
Next
End Sub
 

zebanx

XLDnaute Accro
Bonjour Staple1600

Je te remercie pour avoir regardé ce fil et y avoir bien répondu.

La plage que je traite dans ce fichier n'est pas très longue, le code en #3 est rapide mais l'utilisation de specialcells sera bien utile surement si la plage est beaucoup plus longue.

Bonne soirée à toi
zebanx
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir à tous,

Pour le fun et pour tous vous saluer :),
Code:
Sub convert()
Dim t, col, xcell, i&
  With Sheets("Feuil1")
    For Each col In [a1].CurrentRegion.Columns
      Select Case col.Column
      Case Cells(1, "a").Column, Cells(1, "g").Column
        t = col.Value
        For i = 1 To UBound(t)
          If t(i, 1) <> "" Then
            If IsNumeric(t(i, 1)) Then t(i, 1) = Val(t(i, 1))
          End If
        Next i
        col.NumberFormat = "General": col.Value = t
      Case Cells(1, "c").Column, Cells(1, "d").Column, Cells(1, "i").Column
        t = col.Value
        For i = 1 To UBound(t)
          If t(i, 1) <> "" Then
            If IsDate(t(i, 1)) Then t(i, 1) = CDate(t(i, 1))
          End If
        Next i
        col.NumberFormat = "General": col.Value = t
      End Select
    Next col
  End With
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 899
Membres
101 834
dernier inscrit
Jeremy06510