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
 

Fichiers joints

Calvus

XLDnaute Accro
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
 

Staple1600

XLDnaute Barbatruc
Re,

Tu me rediras, stp, quand tu auras le temps si mon code fonctionne sur ton PC ;)
(en prenant ton fichier exemple du message#1)
Merci.
 

zebanx

XLDnaute Accro
Oui, il a fonctionné.
Pas de soucis.

Et je ne connaissais pas ce
c.NumberFormatLocal = "jj-mm-aa"

Super. ;)
 

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
 

zebanx

XLDnaute Accro
Salut Mapomme

Ne te prive jamais pour donner tes codes :cool:
Merci !

Bonne soirée à toi
zebanx
 

Discussions similaires


Haut Bas