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 d'une table en date


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Femme Profil pro
    ingenieur
    Inscrit en
    Juin 2016
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : ingenieur

    Informations forums :
    Inscription : Juin 2016
    Messages : 32
    Points : 21
    Points
    21
    Par défaut Conversion d'une table en date
    Bonjour,
    C'est un sujet récurrent mais je ne parviens pas à résoudre le problème sur ma macro.
    Je dispose d'un onglet avec des données sources et un autre onglet dans lequel je veux venir copier certaines informations des données sources.
    Le champ commun entre les deux onglets est une référence opération.
    Je viens récupérer des dates mais au moment des les inscrire dans l'onglet résultat les jours et les mois sont inversé. Pourriez vous 'maider?

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    Sub Macro1()
     
    nb_lignes_Operation_Req = Application.WorksheetFunction.CountA(Sheets("projects").Range("$E:$E"))
    nb_lignes_Operation_Res = Application.WorksheetFunction.CountA(Sheets("Feuil1").Range("$A:$A"))
     
    'Selection de la feuille avec les résultats de la requete
    Sheets("projects").Select
     
    'Déclaration des tables de la requete
    Dim TabRefOperation()
    Dim TabStadeOperation()
    Dim TabDateChgtStade()
     
    TabRefOperation() = Range("A2:A" & nb_lignes_Operation_Req).Value
    TabStadeOperation() = Range("I2:I" & nb_lignes_Operation_Req).Value
    TabDateChgtStade() = Range("T2:T" & nb_lignes_Operation_Req).Value
     
    'Selection de la feuille  sur laquelle on va écrire les résultats
    Sheets("Feuil1").Select
     
    'Déclaration des tables résultats
    Dim TabRefOperation_Res()
    Dim TabStadeOperation_Res()
    Dim TabPassStade1_1_Res()
    Dim TabPassStade2_Res()
    Dim TabPassStade3_Res()
    Dim TabPassStade4_Res()
    Dim TabPassStade4_1_Res()
    Dim TabPassStade4_2_Res()
    Dim TabPassStade4_5_Res()
    Dim TabPassStade4_9_Res()
     
     
    TabRefOperation_Res() = Range("A2:A" & nb_lignes_Operation_Res).Value
    TabStadeOperation_Res() = Range("B2:B" & nb_lignes_Operation_Res).Value
    TabPassStade1_1_Res() = Range("C2:C" & nb_lignes_Operation_Res).Value
    TabPassStade2_Res() = Range("D2:D" & nb_lignes_Operation_Res).Value
    TabPassStade3_Res() = Range("E2:E" & nb_lignes_Operation_Res).Value
    TabPassStade4_Res() = Range("F2:F" & nb_lignes_Operation_Res).Value
    TabPassStade4_1_Res() = Range("G2:G" & nb_lignes_Operation_Res).Value
    TabPassStade4_2_Res() = Range("H2:H" & nb_lignes_Operation_Res).Value
    TabPassStade4_5_Res() = Range("I2:I" & nb_lignes_Operation_Res).Value
    TabPassStade4_9_Res() = Range("J2:J" & nb_lignes_Operation_Res).Value
     
     
    'Traitement
    'For i = 1 To nb_lignes_Operation_Req - 1
    For i = 78 To 79
        'For j = 1 To nb_lignes_Operation_Res - 1
        For j = 78 To 79
            If TabRefOperation(i, 1) = TabRefOperation_Res(j, 1) Then
                If TabStadeOperation(i, 1) = "Stade 1.1 Attente de finalisation" Then
                    TabRefOperation_Res(j, 1) = TabRefOperation(i, 1)
                    TabStadeOperation_Res(j, 1) = TabStadeOperation(i, 1)
                    TabPassStade1_1_Res(j, 1) = TabDateChgtStade(i, 1)
                ElseIf TabStadeOperation(i, 1) = "Stade 2 : Simulation convertie en chantier / Chantier déclaré" Then
                    TabRefOperation_Res(j, 1) = TabRefOperation(i, 1)
                    TabStadeOperation_Res(j, 1) = TabStadeOperation(i, 1)
                    TabPassStade2_Res(j, 1) = TabDateChgtStade(i, 1)
                ElseIf TabStadeOperation(i, 1) = "Stade 3 : Offre signée / Travaux à venir ou en cours" Then
                    TabRefOperation_Res(j, 1) = TabRefOperation(i, 1)
                    TabStadeOperation_Res(j, 1) = TabStadeOperation(i, 1)
                    TabPassStade3_Res(j, 1) = TabDateChgtStade(i, 1)
                ElseIf TabStadeOperation(i, 1) = "Stade 4 : Travaux réalisés / Premier contrôle en cours" Then
                    TabRefOperation_Res(j, 1) = TabRefOperation(i, 1)
                    TabStadeOperation_Res(j, 1) = TabStadeOperation(i, 1)
                    TabPassStade4_Res(j, 1) = TabDateChgtStade(i, 1)
                ElseIf TabStadeOperation(i, 1) = "Stade 4.1 : Dossier incomplet / Anomalie" Then
                    TabRefOperation_Res(j, 1) = TabRefOperation(i, 1)
                    TabStadeOperation_Res(j, 1) = TabStadeOperation(i, 1)
                    TabPassStade4_1_Res(j, 1) = TabDateChgtStade(i, 1)
                ElseIf TabStadeOperation(i, 1) = "Stade 4.2 : Deuxième contrôle en cours" Then
                    TabRefOperation_Res(j, 1) = TabRefOperation(i, 1)
                    TabStadeOperation_Res(j, 1) = TabStadeOperation(i, 1)
                    TabPassStade4_2_Res(j, 1) = TabDateChgtStade(i, 1)
                ElseIf TabStadeOperation(i, 1) = "Stade 4.5 : Contrôles terminés" Then
                    TabRefOperation_Res(j, 1) = TabRefOperation(i, 1)
                    TabStadeOperation_Res(j, 1) = TabStadeOperation(i, 1)
                    TabPassStade4_5_Res(j, 1) = TabDateChgtStade(i, 1)
                ElseIf TabStadeOperation(i, 1) = "Stade 4.9 : Dossier export ODICEE" Then
                    TabRefOperation_Res(j, 1) = TabRefOperation(i, 1)
                    TabStadeOperation_Res(j, 1) = TabStadeOperation(i, 1)
                    TabPassStade4_9_Res(j, 1) = TabDateChgtStade(i, 1)
                End If
            End If
        Next
    Next
     
    Sheets("Feuil1").Range("A2:A" & nb_lignes_Operation_Res).Value = TabRefOperation_Res
    Sheets("Feuil1").Range("B2:B" & nb_lignes_Operation_Res).Value = TabStadeOperation_Res
    Sheets("Feuil1").Range("C2:C" & nb_lignes_Operation_Res).Value = TabPassStade1_1_Res
    Sheets("Feuil1").Range("D2:D" & nb_lignes_Operation_Res).Value = TabPassStade2_Res
    Sheets("Feuil1").Range("E2:E" & nb_lignes_Operation_Res).Value = TabPassStade3_Res
    Sheets("Feuil1").Range("F2:F" & nb_lignes_Operation_Res).Value = TabPassStade4_Res
    Sheets("Feuil1").Range("G2:G" & nb_lignes_Operation_Res).Value = TabPassStade4_1_Res
    Sheets("Feuil1").Range("H2:H" & nb_lignes_Operation_Res).Value = TabPassStade4_2_Res
    Sheets("Feuil1").Range("I2:I" & nb_lignes_Operation_Res).Value = TabPassStade4_5_Res
    Sheets("Feuil1").Range("J2:J" & nb_lignes_Operation_Res).Value = TabPassStade4_9_Res
     
    End Sub

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 129
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 129
    Points : 1 652
    Points
    1 652
    Par défaut
    Salut,

    En résumé, en fonction de certains critères, tu veux extraire des lignes d'une table A pour les dispatcher dans des tables B, C, D, E.

    Jettes VBA à la poubelle et tournes-toi vers PowerQuery.
    Un peut lourdingue à apprendre au début, mais tellement plus efficace.

  3. #3
    Membre averti Avatar de Nain porte koi
    Homme Profil pro
    a
    Inscrit en
    Novembre 2023
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : a

    Informations forums :
    Inscription : Novembre 2023
    Messages : 242
    Points : 326
    Points
    326
    Par défaut
    Hello,

    @BPython : un petit fichier d'exemple pour tester ?

    @deedolith : vous avez certainement raison sur le principe, mais si la personne à fait de cette façon ça n'est pas forcément une mauvaise façon et c'est peut-être plus simple pour elle de maintenir un code, voire de le maintenir à plusieurs plutôt que de tout jeter et tout changer.
    Je ne maitrise pas PowerQuery, est-il possible de mettre des commentaires comme dans le VBA pour expliquer la démarche ?
    JièL
    Membre des AMIS
    Anti Macro Inutilement Superfétatoire

  4. #4
    Membre à l'essai
    Femme Profil pro
    ingenieur
    Inscrit en
    Juin 2016
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : ingenieur

    Informations forums :
    Inscription : Juin 2016
    Messages : 32
    Points : 21
    Points
    21
    Par défaut
    [QUOTE=Nain porte koi;12018659]Hello,

    En PJ le fichier test
    Fichiers attachés Fichiers attachés

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 129
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 129
    Points : 1 652
    Points
    1 652
    Par défaut
    Premier point:
    Il est préférable de ne pas toucher aux données source, afin de ne pas les perdre en cas de "connerie".
    Ce qui implique de générer les résultats ailleurs (sur une nouvelle feuille par exemple).

    Deuxième point:
    On va oublier VBA et tout le coté technique pour l'instant,
    Peux-tu nous expliquer, en français, comment, à partir des données sources, arriver au résultat ?
    (Exemple: Sous X conditions, je veux prendre les colonne A, B, C de la feuille 1, les colonnes D, E, F de la feuille 2 dont la colonne K est commune).

  6. #6
    Membre averti Avatar de Nain porte koi
    Homme Profil pro
    a
    Inscrit en
    Novembre 2023
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : a

    Informations forums :
    Inscription : Novembre 2023
    Messages : 242
    Points : 326
    Points
    326
    Par défaut
    première analyse : les dates n'en sont pas, ce sont des textes
    Du coup tes macros ont des problèmes
    JièL
    Membre des AMIS
    Anti Macro Inutilement Superfétatoire

Discussions similaires

  1. Réponses: 1
    Dernier message: 22/10/2008, 18h08
  2. conversion d'une chaine en date
    Par monphp dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 31/05/2007, 10h29
  3. Remplir une table de dates
    Par Michtopelo dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 18/01/2007, 18h57
  4. Extraire données d'une table par date
    Par Hombe dans le forum Langage SQL
    Réponses: 7
    Dernier message: 08/11/2006, 23h03
  5. Réponses: 7
    Dernier message: 24/08/2006, 08h28

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