Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

  • Initiateur de la discussion Initiateur de la discussion zebanx
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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+
 
Bonjour Calvus,

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

(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:
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
 
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
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
773
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…