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 :

"Actualiser" une case


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Octobre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage

    Informations forums :
    Inscription : Octobre 2017
    Messages : 4
    Points : 2
    Points
    2
    Par défaut "Actualiser" une case
    Bonjour à tous,

    Je suis entrain de traiter des dates dans un fichier excel, afin de les convertir de mm/jj/aaa hh:mm à jj/mm/aaa hh:mm.
    Pour cela pas de soucis, j'ai utilisé le code suivant (même si en parcourant le forum j'ai pu en croiser des plus propre):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(k, 3) = Mid(Cells(i, 1), 4, 3) + Mid(Cells(i, 1), 1, 3) + Mid(Cells(i, 1), 7, 2) + Mid(Cells(i, 1), 9, 9)
    Ensuite, avec ces dates et une deuxième colonne, je trace un graphique.
    Seulement voilà, j'ai un problème, excel ne comprend pas vraiment que les chaines de caractères que j'ai entrées sont des dates.
    La tabulation est collée à gauche, et le graphique m'affiche en abscisses :"1,2,3..."
    Nom : Capture1.PNG
Affichages : 202
Taille : 30,9 Ko

    Pour que tout rentre dans l'ordre, j'ai trouvé comme solution de double-cliquer sur chaque cellule, puis de faire "entrer". La tabulation passe ainsi à droite, et l'abscisse passe bien en mode "dates".
    On dirait qu'il faut que je fasse "entrer" pour qu'Excel "comprenne" ce qui est écrit dans ces cellules.

    Nom : Capture2.PNG
Affichages : 203
Taille : 29,8 Ko

    Comment pourrais-je automatiser cette "actualisation"?

    j'ai déjà essayé avec SendKeys ("{Entrer}"), d'utiliser Workbook.RefreshAll, utiliser la fonction convertir (via un enregistrement de macro), rien ne marche...

    Merci à vous!

  2. #2
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    la manière la plus simple est d'utiliser l'outil convertir accessible via l'onglet DONNEES >> CONVERTIR
    je ne comprend pas que cela n'ai pas fonctionné ... je viens de recopier quelques lignes sources de ta copie écran, utilisé ta procédure d'extraction, puis l'outil Convertir avec succès (un filtre automatique me propose bien des filtres chronologiques)

    l'enregistreur de macro te donnera la méthode appropriée, voici ce que tu dois capturer :

    1) Sélectionner la colonne complète
    2) cliquer sur l'outil CONVERTIR
    3) directement cliquer sur Terminer
    4) les dates sont maintenant des dates et plus du texte

  3. #3
    Membre émérite

    Homme Profil pro
    Technicien Métrologie R&D
    Inscrit en
    Janvier 2007
    Messages
    1 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien Métrologie R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 610
    Points : 2 523
    Points
    2 523
    Billets dans le blog
    1
    Par défaut
    essaies de copier la valeur 1 d'une cellule et colles la en multipliant sur ta plage de date

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Lorsque tu concatènes des parties de dates, le résultat est une chaîne de caractère et non pas une date.
    Il te faut forcer la valeur retournée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(k, 3) = DATEVALUE(Mid(Cells(i, 1), 4, 3) + Mid(Cells(i, 1), 1, 3) + Mid(Cells(i, 1), 7, 2) + Mid(Cells(i, 1), 9, 9))
    Mais comme le dit joe.levrai (salut), l'outil de conversion fonctionne bien en utilisant le format de la date tel qu'il apparaît sur la page.
    Excel s'occupera de les transformer dans le format Windows que tu utilises.
    Attention à l'utiliser qu'une seule fois, par contre...
    MPi²

  5. #5
    Candidat au Club
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Octobre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage

    Informations forums :
    Inscription : Octobre 2017
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par joe.levrai Voir le message
    Bonjour,

    la manière la plus simple est d'utiliser l'outil convertir accessible via l'onglet DONNEES >> CONVERTIR
    je ne comprend pas que cela n'ai pas fonctionné ... je viens de recopier quelques lignes sources de ta copie écran, utilisé ta procédure d'extraction, puis l'outil Convertir avec succès (un filtre automatique me propose bien des filtres chronologiques)

    l'enregistreur de macro te donnera la méthode appropriée, voici ce que tu dois capturer :

    1) Sélectionner la colonne complète
    2) cliquer sur l'outil CONVERTIR
    3) directement cliquer sur Terminer
    4) les dates sont maintenant des dates et plus du texte
    Merci pour ta réponse si rapide!
    En effet, si je fais convertir à la main, cela marche, même si je choisis le mode standard.
    Seulement voilà, quand 'j'enregistre la macro, qui me donne le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Sub convertir()
       'Convertir les données
        Columns("C:C").Select
        Selection.TextToColumns Destination:=Range("C1"), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
            Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
            :=Array(1, 1), TrailingMinusNumbers:=True
    Et que je l'exécute, les lignes restent "à gauche", et l'abscisse du graphique reste pareil... Il faut que je fasse entrer à chaque case pour que cela marche.
    D'ailleurs, je précise bien que cliquer sur la case et faire entrer ne suffit pas, il faut que je la sélectionne, clique sur la barre de formule en haut, puis fait entrer pour que cela marche.

    Afin de vous aider à comprendre le problème (j'aurais du y penser plus tôt), voici mon fichier:
    Classeur1 - Copie.xlsm

    La macro est à lancer en cliquant sur le gros bouton macro (je l'ai limitée à 10 lignes pour accélérer les tests)

    Merci pour votre aide

  6. #6
    Candidat au Club
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Octobre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage

    Informations forums :
    Inscription : Octobre 2017
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par parmi Voir le message
    Lorsque tu concatènes des parties de dates, le résultat est une chaîne de caractère et non pas une date.
    Il te faut forcer la valeur retournée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(k, 3) = DATEVALUE(Mid(Cells(i, 1), 4, 3) + Mid(Cells(i, 1), 1, 3) + Mid(Cells(i, 1), 7, 2) + Mid(Cells(i, 1), 9, 9))
    Mais comme le dit joe.levrai (salut), l'outil de conversion fonctionne bien en utilisant le format de la date tel qu'il apparaît sur la page.
    Excel s'occupera de les transformer dans le format Windows que tu utilises.
    Attention à l'utiliser qu'une seule fois, par contre...
    Merci pour cette réponse, en effet cela fonctionne.
    Au détail près qu'il me faut une valeur en date + h, et que DateValue m'as forcé toutes les heures à 00:00...
    Pour le convert, même problème, quand je le fais à la main pas de soucis, quand j'enregistre et que j'exécute la macro qui me les convertit en date, cela ne change rien...

  7. #7
    Candidat au Club
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Octobre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage

    Informations forums :
    Inscription : Octobre 2017
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Daranc Voir le message
    essaies de copier la valeur 1 d'une cellule et colles la en multipliant sur ta plage de date
    Ok merci, ça marche
    Mais c'est pas très beau^^

+ Répondre à la discussion
Cette discussion est résolue.

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