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 :

Besoin d'aide (compréhension)


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2007
    Messages : 8
    Points : 4
    Points
    4
    Par défaut Besoin d'aide (compréhension)
    Bonjour à tous, amis programmeurs

    Je cherche à réaliser une macro Excel qui va retraiter automatiquement la mise en page d'un fichier particuliers.

    Voilà ce qui se passe :
    1. Importation d'un fichier .txt dans Excel toujours structuré de la même façon
    2. Créer une "boucle" qui va tester chaque ligne du fichier dans le style suivant :
    2a. si X "espace" avant mot / caractère, envoyer le contenu des caractères de la ligne à la colonne X
    2b. si aucun caractère sur une ligne de la feuille Excel, arrêt de la macro
    J'ai quelques connaissances de base en programmation, mais très peu en VBA, c'est pourquoi je me tourne vers vous pour m'orienter correctement (et ne pas perdre inutilement du temps).

    Voici un exemple d'une feuille Excel :


    Note : ce fichier texte est créé par une autre application (CMAP) qui génère automatiquement l'indentation.

    Peut-être existe-t-il une autre manière d'y arriver plus simple...
    Si vous avez des questions, je reste bien entendu à votre disposition

    En vous remerciant pour votre aide,
    Zifnab

  2. #2
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Ça m'amuserais de faire ça pour toi. Profites-en, ça ne m'arrives pas souvent.

    De retour quand j'aurai quelque chose à te proposer.

    zaza

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2007
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    [EDIT] (Destiné à traiter de mes avancées / découvertes sur la macro)

    Le fichier .txt importé dans Excel (cf. ci-dessus) met toutes les données dans les cellules de la colonne A (par ligne bien sûr). Et en comptant ces maudits espaces, j'ai pu voir que ceux-ci étaient par groupe de 4.

    En gros :
    Les séparateurs se font sur 4 "espaces".
    Donc :
    Si 0 "espace" dans la cellule Ax -> couper / coller du contenu dans cellule Ax (on laisse comme tel donc)
    Si 4 "espace" dans la cellule Ax -> couper / coller du contenu dans cellule Bx
    Si 8 "espace" dans la cellule Ax -> couper / coller du contenu dans cellule Cx
    etc. jusqu'à 92 "espace" (...)

    Le truc, c'est comment compter les espaces sous VBA Excel...

    @zazaraignée : lol ^____^ (mais merci !) de toute façon, je cherche aussi pour comprendre

  4. #4
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Justement, c'est une aubaine! Tu examines le code et pour chaque bidule que tu ne comprends pas, tu appuies sur F1. Sinon, tu demandes, je t'expliquerai.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2007
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Et bien, je n'en reviens pas ^____^. La partie qui me posait problème fonctionne grâce à ton code :
    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
        Dim plage As Range, cellule As Range
        Dim chaine As String, texte As String
        Dim n As Integer
        ' Replacer le texte dans les bonnes colonnes selon l'indentation du texte 
        Set plage = Range(Range("A1"), Range("A1").End(xlDown))
        For Each cellule In plage
            chaine = cellule.Value
            texte = Trim(chaine)
            n = Len(chaine) - Len(texte)
            If n > 0 Then
                cellule.Offset(0, (n / 4)).Value = Trim(cellule.Value)
                cellule.Clear
            End If
        Next
        Set plage = Nothing
    Je suis en train de la décortiquer pour mieux la comprendre, il y a en effet certaines syntaxes VBA que je ne connais pas.

    En tout cas, un grand merci !
    Ne me reste plus qu'à paufiner la macro pour qu'elle réponde à tous mes besoins (mais tu viens de faire au moins 70% de la macro).

  6. #6
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    J'ai fait ce code assez rapidement. J'ai donc une recommandation. Remplace la fonction Trim par LTrim. Trim enlève les espaces à chaque bout de la chaîne. Donc, s'il y a des espace aussi à droite, ça faussera la donne.

    LTrim enlève les espace à gauche seulement. Ce sera plus approprié, je crois.

  7. #7
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Ce n'aurait pas été plus simple de faire un Replace (dans le fichier texte d'origine) de 4 espaces par un Tab et d'importer le fichier avec séparateur Tab???

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2007
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Et bien j'y ai pensé (utiliser le "Tab"), mais ma macro buggait. J'ai renoncé quand Zaza m'a généreusement donné une solution quasiment toute faite (enfin je l'ai intégrée à ma macro multi-fonction).

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

Discussions similaires

  1. Besoin d'aide pour compréhension modèle étoile
    Par Juwan dans le forum Conception/Modélisation
    Réponses: 1
    Dernier message: 19/02/2012, 17h53
  2. Besoin d'aide pour la compréhension de certains termes techniques !
    Par kev42100 dans le forum Moteurs de jeux vidéo
    Réponses: 3
    Dernier message: 06/08/2010, 18h49
  3. besoin d'aide pour le composant DBComboBox
    Par jane2002 dans le forum Bases de données
    Réponses: 8
    Dernier message: 28/02/2004, 19h01
  4. [TP]besoin d'aide pour commandes inconnues
    Par Upal dans le forum Turbo Pascal
    Réponses: 15
    Dernier message: 03/10/2002, 10h48
  5. Besoin d'aide pour l'I.A. d'un puissance 4
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 17h05

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