IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

convertir date et nombre stockés en format texte


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2015
    Messages : 6
    Par défaut convertir date et nombre stockés en format texte
    bonjour à tous,

    voila j'ai pu a l'aide de recherche sur le net de trouver des code en VBA pour convertir des colonne contenants des date stocké en format texte ainsi que des colonnes de nombre stocké aussi en format texte le souci est lors de l'exécution des deux macro (voir plus bas) y'a une lenteur de l'ordre de 6 à 7 second.

    ma question est es qu'il ya un moyen pour les rendre plus rapide sachant que mon fichier contient approximativement 90 000 lignes.

    merci par avance

    -Code pour convertir Date colonnes concernés H et I)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Sub convdate()
     
    Application.ScreenUpdating = False
     
    Dim d&, tablo, p&, t&, j&, pablo
    d = [h1000000].End(xlUp).Row
    tablo = Application.Transpose(Range("h1:h" & d))
    On Error Resume Next 'si toutes les valeurs ne sont pas des dates
    For p = 2 To d
    tablo(p) = CDbl(CDate(tablo(p)))
    Next
    With [h1].Resize(d)
    .NumberFormat = "dd/mm/yyyy" 'ou autre format Date
    .Value = Application.Transpose(tablo)
    End With
    t = [i1000000].End(xlUp).Row
    pablo = Application.Transpose(Range("i1:i" & t))
    On Error Resume Next 'si toutes les valeurs ne sont pas des dates
    For j = 2 To t
    pablo(j) = CDbl(CDate(pablo(j)))
    Next
    With [i1].Resize(t)
    .NumberFormat = "dd/mm/yyyy" 'ou autre format Date
    .Value = Application.Transpose(pablo)
    End With
    Application.ScreenUpdating = True
    End Sub
    -code pour convertir nombre: ( colonnes concernés J et k)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Sub convNbr() 'remplace les virgules par des points
    Application.ScreenUpdating = False
     
    Dim i As Long, oDat()
    oDat = Columns("j:j").Value
    For i = 1 To UBound(oDat, 1)
    oDat(i, 1) = Replace(oDat(i, 1), ",", ".")
    Next i
    Columns("j:j").NumberFormat = "0.00"
    Columns("j:j").Value = oDat
    Columns("k:k").NumberFormat = "0.00"
    Columns("k:k").Value = oDat
     
    Application.ScreenUpdating = True
     
    End Sub

  2. #2
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 128
    Par défaut
    Bonjour,

    En effet il y a plein de façon d'optimiser du code.

    Mais là, tu n'as pas utilisé la "balise code" pour y insérer ton code, c'est horrible à lire.
    Peux-tu éditer ton sujet et faire un effort de présentation ?

    merci,

    Slooby.
    (Je t'aiderai avec plaisir si tu rédiges correctement aux normes du forum )

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pour remplacer les points par des virgules il n'est pas utile de passer par une boucle
    Cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Columns("j:j").Replace ".", ","
    Au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim i As Long, oDat()
    oDat = Columns("j:j").Value
    For i = 1 To UBound(oDat, 1)
    oDat(i, 1) = Replace(oDat(i, 1), ",", ".")
    Next i
    Pour convertir des dates en texte (je suppose que les dates sont écrites '15/05/2016'
    J'utilise le Copier/Collage spécial - Multiplier après avoir copier le contenu d'une cellule ayant comme valeur le chiffre 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     With ThisWorkbook
     .Worksheets("Feuil2").Range("A1").Copy ' la cellule doit contenir le chiffre 1
      With .Worksheets("Feuil1").Columns("A:A")
     .PasteSpecial Operation:=xlMultiply
     .NumberFormat = "dd/mm/yyyyy"
      End With
     End With
    J'ajouterais qu'il n'est pas judicieux de travailler sur une colonne dans ce cas précis mais bien préciser la plage de données

    Les deux codes proposés peuvent fonctionner sur plusieurs lignes et plusieurs colonnes (Exemple A2:C15000).
    Pour les dates, si la cellule est vide, la valeur sera 00/01/1900

    Attention encore, s'il s'agit de dates enregistrées au format américain cette solution ne renverra pas les bonnes valeurs.

    S'il s'agit d'une opération après lecture d'un fichier csv, Il existe une meilleure solution avec la méthode TextToColumns où l'on peut gérer les séparateurs de milliers et les dates au bon format
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

Discussions similaires

  1. [Toutes versions] Questions pour convertir des nombres stockés en format texte
    Par antoisse3 dans le forum Excel
    Réponses: 7
    Dernier message: 20/04/2015, 09h55
  2. Conversion de Nombre stockés en format texte.
    Par tytyxam dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 13/09/2011, 15h52
  3. Convertir Date en nombre
    Par ducatece2 dans le forum MATLAB
    Réponses: 1
    Dernier message: 08/07/2011, 15h18
  4. [XL-2007] Nombre stocké sous format texte
    Par locosr dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 17/05/2011, 22h17
  5. Nombre stocké sous format texte
    Par oliver75 dans le forum Macros et VBA Excel
    Réponses: 28
    Dernier message: 22/07/2009, 13h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo