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 :

Macro de conversion d'un tableau [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 491
    Par défaut Macro de conversion d'un tableau
    Bonjour,

    J'ai un fichier sous MsMOnney 2002 et ce logiciel me pompe donc j'ai décidé de passer mes comptes sur Excel.
    Le hic c'est que l'exportation du compte se fait sous un format qif et lorsque je l'ouvre sous excel, j'ai un tableau sur une seule colonne comme suit:
    ^
    D18/06'2001
    C*
    MCholet - Paris
    T-20.89
    LDéplacement:SNCF
    ^
    D18/06'2001
    C*
    MSergio Bossi Cholet
    T-39.18
    LCoiffeur
    ^
    D19/06'2001
    C*
    MPharmacie
    T10.09
    LRemboursement Mutuelle:CPAM
    ^
    D20/06'2001
    C*
    T-2.50
    LFrais bancaires:Compte Service CA
    Après les séparateur, je ne peux rien faire car chaque ligne n'est pas identique.

    Voici les correspondances :
    ^ => nouvelle ligne
    D => jj/mm'aaaa (date)
    C => opération marquée si présence de *
    M => commentaire
    T => débit si - ou crédit si rien
    L => catégorie:sous catégorie


    Mon souhait (mais je ne sais pas par où et comment commencer) c'est de remettre cette unique colonne en 7 colonnes :
    Date / Catégorie / Sous Catégorie / Commentaire / Crédit / Débit / Validé

    et ce pour chaque opération.

    Dans mon exemple par exemple, j'ai :
    [QUOTE]A1 ^
    A2 D18/06'2001
    A3 C*
    A4 MCholet - Paris
    A5 T-20.89
    A6 LDéplacement:SNCF
    [QUOTE]

    Il faudrait que j'obtienne:
    [QUOTE]A1 ^
    B1 D18/06'2001
    B2 C*
    B3 MCholet - Paris
    B4 T-20.89
    B5 LDéplacement:SNCF
    [QUOTE]

    Le truc c'est que pour une ligne sous ms money on a pas obligatoirement sous excel 5 lignes car si par exemple je n'ai pas de commentaire la ligne M n'existe pas


    Est ce que qq1 peux m'aider ?

    Par avance merci

    Nini

  2. #2
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Bonjour,

    Je suppose que tu as déjà réfléchie a comment faire non?
    Je te propose d'essayer de faire un algorythme qui ressemble a ca (tu le transforme en VBA et en cas de souci tu nous dit ce qui coince mais ne compte pas sur moi pour le faire a ta place )

    tu parcour ta colonne
    Pour chaque cellule tu testes la première lettre avec un select case
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select case left(cells(i,1),1)
    pour chaque cas
    tu copies le reste dans un autre onglet

    Utilise une variable pour savoir a quelle ligne le copier tu incrémente la variable à chaque ^
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    case "^"
    Lignedecopie=lignedecopie+1
    case "D"
    cells(lignedecopie,1)=right(cells(i,1),len(cells(i,1))-1)
    case...
    pour le cas C pense a travailler sur la ligne de dessous et à incrémenté i de 1 de plus que pour les autres

    Je te laisse commencer, en cas de soucis revient avec un code

  3. #3
    Membre expérimenté
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Par défaut
    Voici une proposition,
    Etudie le code pour pouvoir le reproduire si tu en as besoin.
    J'ai testé sur ton cas et chez moi ça fonctionne.
    Donc ta colonne venant de Money est en colonne A de la feuil1, le tableau se créé en feuille 2 et commence à se remplir en ligne 2.
    Je te laisse mettre les en têtes de colonne à la main.

    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
    Sub tri()
    Dim Derlig As Long
    Dim Plage As Range, C As Range
    Dim i As Long
    Dim F As Worksheet
    Dim Tableau() As String
     
    Derlig = Range("A65536").End(xlUp).Row
    Set F = Worksheets(2)
    Set Plage = Range("A1", "A" & Derlig)
    i = 1
    For Each C In Plage
     
    If C.Value = "^" Then i = i + 1
     
    If Left(C.Value, 1) = "D" Then F.Cells(i, 1).Value = Right(C.Value, 10)
     
    If Left(C.Value, 1) = "L" Then
        C.Value = Replace(C.Value, "L", "")
        Tableau = Split(C.Value, ":")
        On Error Resume Next
        F.Cells(i, 2).Value = Tableau(1)
        F.Cells(i, 3).Value = Tableau(2)
    End If
     
    If Left(C.Value, 1) = "M" Then F.Cells(i, 4).Value = Right(C.Value, Len(C.Value) - 1)
     
    If Left(C.Value, 1) = "T" Then
        If Mid(C.Value, 2, 1) = "-" Then
        F.Cells(i, 6).Value = Right(C.Value, Len(C.Value) - 2)
        Else
        F.Cells(i, 5).Value = Right(C.Value, Len(C.Value) - 1)
        End If
    End If
     
    If Left(C.Value, 1) = "C" And Mid(C.Value, 2, 1) = "*" Then F.Cells(i, 7).Value = "Validé"
     
    Next C
     
    End Sub
    Edit:
    Moi j'ai pris le temps de le faire car ça m'a permis de m'entrainer à la manipulation de caractère.Pas totalement désinterressé l'oiseau.
    Si tu veux être capable de le reproduire, je te propose de lire mon code et de le reproduire ensuite à ta façon. Un lien sur la manipulation de chaines de caractères:
    http://silkyroad.developpez.com/VBA/...racteres/#LI-B
    Sinon comme le propose Krovax on peut mettre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select case=left(c.value,1)
    et ensuite remplacer tous les If left(c.value,1)=
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    case is "C"
    case is "D" '...

  4. #4
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Citation Envoyé par diude54 Voir le message
    Moi j'ai pris le temps de le faire car ça m'a permis de m'entrainer à la manipulation de caractère.Pas totalement désinterressé l'oiseau.
    Rah quel égoïste il en profite pour apprendre et empêcher les autres de progresser. Tu as bien raison c'est comme cela que l'on apprend le plus et tant pis pour ce qui ne veulent pas apprendre

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 491
    Par défaut
    Merci

    Je vais voir ce que je peux en faire pour l'intégrer et le digérer !

    Il est vrai que le mieux serait que je ponde le code tout seul mais mon niveau est vraiment faible et je fonctionne plus à la bidouille de code qu'à la ponte de code.

    Mais j'y travaille

    J'ai fait un pas à pas pour étudier le code.

    1er question ?

    Le 1er End if ferme quel If ?
    Je croyais qu'à chaque If, il fallait un End if

  6. #6
    Membre expérimenté
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Par défaut
    Pas forcement si tu mets

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If ... then "ce que tu veux faire"
    Alors pas besoin de end if

    Si tu veux faire plusieurs choses. Alors il faut :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If ... then
    1 ère chose
    2ème chose
    ...
    end if

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 491
    Par défaut
    le code pour les données commençant pas L

    Bravo

    c'est tout ce que j'ai a dire

    Clairement et j'en suis désolé pour moi même, je n'ai pas ce niveau.

    Par contre j'aurai du penser à la structure du code car çà n'impose pas de connaissance sur le code mais il faut avoir un cerveau pour réfléchir.
    C'est peut être par là qu'il faut que je commence

    Merci encore pour votre aide (code ...)

    Nini la loose

  8. #8
    Membre expérimenté
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Par défaut
    Tu sais, il y a deux mois je ne connaissait rien à VBA et j'ai appris tout seul. (Enfin presque il y a le forum DVP.net heureusement)
    Je n'ai donc pas un niveau exeptionnel, loin de là. Tout ça pour dire que mon niveau est parfaitement accessible pour quelqu'un qui souhaite s'y mettre.

  9. #9
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Citation Envoyé par liop49 Voir le message

    Par contre j'aurai du penser à la structure du code car çà n'impose pas de connaissance sur le code mais il faut avoir un cerveau pour réfléchir.
    C'est peut être par là qu'il faut que je commence
    Oui c'est la première étape, réfléchir a l'algo sans penser langage ca "tout le monde" peut le faire.
    Un cours pour apprendre algorithmique et a formaliser cette étape

    Une fois le pseudo code réaliser le passer en VBA est l'affaire de quelques minutes, enfin pas toujours

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

Discussions similaires

  1. Conversion d'un tableau en fichier Excel.
    Par Fred2209 dans le forum C++Builder
    Réponses: 13
    Dernier message: 26/10/2006, 20h41
  2. Conversion d'un tableau d'octets en entier
    Par noutnout53 dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 25/09/2006, 11h54
  3. macro copier cellules d'un tableau
    Par fabiend83 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 03/07/2006, 23h10
  4. Conversion d'un tableau de float en double ?
    Par alex6891 dans le forum C++
    Réponses: 5
    Dernier message: 05/01/2006, 06h04
  5. Réponses: 1
    Dernier message: 30/09/2005, 19h17

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