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 :

conversion en date uniquement sur une partie de la colonne


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 52
    Par défaut conversion en date uniquement sur une partie de la colonne
    Bonjour à toutes et tous,

    J'ai créé une macro manuelle (j'enregistre mes actions et je nettoie les actions inutiles).

    La conversion en date que je réalise via données > conversion > date jjmmaaaa ne se fait que sur une partie de la colonne (environ 350 lignes) mais pas sur la totalité et je ne comprends pas pourquoi. Ci-dessous le code enregistré.

    au départ, j'ai environ 350 lignes.
    - le format est standard mais devient personnalisé si je rentre dans la cellule.
    - certaines cellules sont vides (pas de date), les autres contiennent des données sous la forme "27/11/2023 15:24"
    à la fin, j'ai 100 lignes au format date reconnu par excel et des lignes qui restent au format "27/11/2023 15:24"

    Est-ce que vous avez une explication ou un "truc" pour que la totalité de la colonne corresponde finalement à des dates excel ?

    Merci par avance pour votre aide.
    Bonne réception.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        Columns("B:B").Select
        Selection.TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
            Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
            :=Array(1, 4), TrailingMinusNumbers:=True

  2. #2
    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,
    Vous ne précisez pas la version d'excel avec laquelle vous travaillez.
    A votre place, je passerais par Power Query qui est complètement intégré à Excel depuis la version 2016 ou supérieure et pour 2010 et 2013 c'est un Add-In

    Onglet [Données], groupe Récupérer et transformer des données Requêtes et connexions et là vous sélectionnez le type de fichier, base de données, etc. que vous voulez charger et transformer.
    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

  3. #3
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 52
    Par défaut
    Merci Philippe !

    Vous ne précisez pas la version d'excel avec laquelle vous travaillez.

    ah zut, j'avais précisé Excel 365 dans le champ de titre : ce n'est pas la bonne info ?

    A votre place, je passerais par Power Query ...

    Le souci est que je n'ai pas accès à une base de données : on part d'un fichier excel unique à chaque fois exporté manuellement au format xls.
    Ensuite, sur cet export, on fait toujours les mêmes actions : on supprime des colonnes, on les change de place, et on fait cette fameuse étape de transformation de date qui n'est faite que partiellement en vba.
    J'imaginais que les utilisateurs feraient un copier coller du tableau dans le fichier de mise en forme avec un bouton "mettre en forme" pour réaliser cette mise en forme complète.

    Je ne connais pas Query : je vais regarder comment utiliser et si cela est exploitable pour tous les utilisateurs mais j'aurai bien aimé comprendre ce qui pose souci avec une démarche en VBA.

    Bonne réception et encore Merci pour votre réponse et vos propositions

  4. #4
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Bonjour, vois si ça peut te convenir:

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Sub ConvertirEnDate()
        Dim ws As Worksheet
        Dim rng As Range
        Dim cell As Range
        Dim lastrow As Long
     
        ' Spécifie la feuille de calcul
        Set ws = ThisWorkbook.Sheets("Feuil1")  ' Remplace par le nom de ta feuille
     
        ' Spécifie la dernière cellule utilisée
        lastrow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row
     
        ' Spécifie la plage à convertir
        Set rng = ws.Range("B1:B" & lastrow)
     
        ' Désactive les mises à jour pour améliorer la performance
        Application.ScreenUpdating = False
     
        ' Boucle à travers chaque cellule de la plage spécifiée
        For Each cell In rng
            ' Vérifie si la cellule n'est pas vide
            If Not IsEmpty(cell.Value) Then
                ' Vérifie si la cellule a une partie heure
                If InStr(cell.Text, " ") > 0 Then
                    ' Si oui, extrait la partie date
                    cell.Value = Left(cell.Text, InStr(cell.Text, " ") - 1)
                    ' Convertit la valeur en date
                    cell.Value = CDate(cell.Value)
                    ' Formate la cellule en tant que date
                    cell.NumberFormat = "DD/MM/YYYY" ' Vous pouvez ajuster le format ici
                End If
            End If
        Next cell
     
        ' Réactive les mises à jour
        Application.ScreenUpdating = True
     
    End Sub

  5. #5
    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,
    ah zut, j'avais précisé Excel 365 dans le champ de titre : ce n'est pas la bonne info ?
    Effectivement mais avec sa couleur bleu foncé, je n'ai pas vu

    Le souci est que je n'ai pas accès à une base de données : on part d'un fichier excel unique à chaque fois exporté manuellement au format xls.
    Ensuite, sur cet export, on fait toujours les mêmes actions : on supprime des colonnes, on les change de place, et on fait cette fameuse étape de transformation de date qui n'est faite que partiellement en vba.
    J'imaginais que les utilisateurs feraient un copier coller du tableau dans le fichier de mise en forme avec un bouton "mettre en forme" pour réaliser cette mise en forme complète.
    C'est fait pour cela. J'aurais dû être plus précis "vous sélectionnez le type de fichier, base de données, etc.". Le type de fichier c'est csv, xls, et d'autres encore.

    Je ne connais pas Query : je vais regarder comment utiliser et si cela est exploitable pour tous les utilisateurs mais j'aurai bien aimé comprendre ce qui pose souci avec une démarche en VBA.
    Cela fait presque 25 ans que je programme en VBA mais depuis que j'ai découvert Power Query, je ne transforme mes fichiers qu'à l'aide de ce produit. C'est nettement plus rapide à mettre en place.
    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

  6. #6
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 52
    Par défaut
    Bonjour Franc et Philippe,

    Merci pour vos retours.

    Franc, j'ai compris l'idée du code. par contre, j'ai une "erreur d'execution 13 : incompatibilité de type ' sur la ligne de code cell.Value = CDate(cell.Value)

    Philippe, je vais regarder Power Query demain. C'est juste que je m'inquiète de déployer auprès de 50 utilisateurs qui ne maitrisent que très partiellement excel. un "copier - coller" du fhicher source dans un xlsx. avec une macro "mise en forme" me semblait accessible pour les utilisateurs
    A voir avec ce que je vais trouver sur Query.

    Merci dans tous les cas pour vos retours.
    Bonne réception.

Discussions similaires

  1. Réponses: 7
    Dernier message: 18/06/2012, 15h53
  2. Requête sur une partie de la date
    Par Wise_Sherkaan dans le forum SQL
    Réponses: 7
    Dernier message: 13/01/2011, 16h40
  3. Requete de mise à jour sur une partie de la table uniquement
    Par alex830001 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 31/10/2008, 09h56
  4. Filtre sur une partie de la date
    Par souminet dans le forum Débuter
    Réponses: 1
    Dernier message: 12/05/2008, 10h31
  5. Problème de contrainte sur une partie de date (l'année)
    Par shefla dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 11/04/2006, 21h50

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