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 :

Trouver une bonne logique VBA


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 Trouver une bonne logique VBA
    Bonjour amis programmeurs,

    Bon, je perfectionne une macro (précédemment développée ici-même !), et je rencontre encore une difficulté...

    Voilà ce que j'ai actuellement :



    Ce que je cherche à faire :
    1. On commence la fonction à partir de la ligne 2.
    2. Lorsque la cellule Ax n'est pas vide, copier toutes les lignes suivantes.
    3. Créer une nouvelle feuille.
    4. Coller la sélection (en début de feuille).
    5. Répéter l'opération sur cette nouvelle feuille jusqu'à ce qu'il n'y ait plus de cellule Ax non vide.

    L'algo général que je cherche à faire :
    _Tant que Colonne Ax est non vide
    ___Tant que Ligne_x est non vide
    _______Copier Ligne_x
    _______Copier Ligne_x + 1
    ___Fin Tant que
    ___Créer nouvelle feuille
    ___Coller Selection Ligne_x
    _Fin Tant que

    Donc le truc, est-ce que dejà ma logique algo vous paraît bonne ? Ou existe-t-il plus simple ? Pourriez-vous me mettre sur la bonne voie ??
    Personnellement, il y a truc qui cloche, ou plutôt je m'embrouille tout seul... (oui, c'est pour ça que je suis nul en prog ^___^)

    Note : Découle de ce topic

    En vous remerciant !
    - Zifnab -

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 393
    Points : 451
    Points
    451
    Par défaut
    Tout d'abord si tu commences à la ligne 2 et que tu fais Tant que A2 est non vide, ta macro s'arrêtera nette...
    Tu peux essayer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Tant que (FeuilleActive.Cellule[A(x)] non vide)
        s = FeuilleActive
        Insérer NouvelleFeuille
        Copier s.Plage[B2:IV(dernière ligne utilisée)] vers FeuilleActive.Cellule[A1]
    Fin Tant que
    en VBA :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Do While ActiveSheet.Range("A1") <> ""
         Set s = ActiveSheet
         ThisWorkbook.Worksheets.Add
         s.Range("B2:IV" & (s.UsedRange.Rows.Count)).Copy ActiveSheet.Range("A1")
    Loop

  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
    Ta fonction fonctionne, mais en fait, c'est mon raisonnement qui est erroné... (comme je le pensais..)

    Je n'arrive pas à traduire correctement mon problème...

    En fait, ce que je veux obtenir est la chose suivante :
    "A chaque fois que l'on rencontre une cellule Ax remplie, il faut copier cette cellule (ligne) et les lignes suivantes, puis les coller dans une nouvelle feuille."

    En gros, ce qu'on veut, c'est qu'à la place d'un très gros tableau, on en est plusieurs petits (sur plusieurs feuilles), et la cellule Ax est la cellule qui indique s'il s'agit d'un nouveau "tableau" ou non...

    Donc la condition : Do While ActiveSheet.Range("A1") <> "" est juste, mais il doit manquer un truc...

    Raaah ! Ce problème me tue, je passe des heures à tenter de le décortiquer... J'ai l'impression de raisonner faux (un comble). Pour le moment, je n'obtiens que des boucles infinies (erreur) ou une copie ratée...

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 563
    Points : 1 691
    Points
    1 691
    Par défaut
    pas très facile de te comprendre.
    sur le premier topic, il s'agit d'une suite de phrase situées en colone A. les espaces situés avant le premier mot permettent de se situer. dans le deuxieme, il s'agit des mêmes phrases, mais situées en colonne A puis B puis C. question, qu'el est l'element qui permet de déterminer que la premiere phase est terminée pour passer a la seconde.
    au lieux de mettre uniquement le départ du fichier, il serais plus interressant de mettre, soit un vrai extrait du fichier, soit au moins de nous permettre de visualiser l'endroit qui marque le changement de ligne, c'est a dire au moins deux séries. perso, je prefere un extrait du fichier, ça évite de retaper.
    on a aussi du mal a comprendre ce que tu veux obtenir sur tes nouvelles feuilles. es ce une seule ligne ou un ensemble de ligne
    maitre
    corbeau
    sur un arbre
    perché
    tenait
    dans son bec
    un fromage
    ça nous donne en feuille 2
    maitre corbeau sur un arbre perché
    et en feuille 3
    tenait dans son bec un fromage
    ou alors ça nous donne
    en feuille 2
    maitre
    corbeau
    sur un arbre
    perché
    et en feuille 3
    tenait
    dans son bec
    un fromage

    je pense que tu devrais nous donner un cas concret de ce que tu veux obtenir, sans les étapes intermediaires.

  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
    Oui, je suis parfaitement conscient que mon explication n'est pas claire étant donné que moi-même j'ai du mal à la définir...

    Donc voici des fichiers pour mieux comprendre mon problème :

    - Cmap_Import.xls : fichier excel qui traite des données provenant d'un fichier texte issu d'un logiciel nommé Cmap / Note : Utiliser le bouton "Plan"
    - Concept_processus.txt : fichier exemple issu de Cmap (à noter que Cmap exporte toujours sous ce format et mise en page)
    - Essai1.xls : le fichier obtenu actuellement grâce à Cmap_Import.xls
    - Essai2.xls : le fichier que je souhaite obtenir automatiquement (je l'ai fait manuellement)

    Je suis désolé si ça a l'air kafkaïen (côté VBA), je n'ai jamais été particulièrement doué en prog, j'ai appris les bases, mais toujours eu du mal pour structuré mes programmes...

    Dans VBA, pour cette macro, c'est les modules 2 et 4 qui sont utilisées (et donc à modifier) (le 3 aussi mais il n'y a rien à modifier).

    Donc voilà... J'espère qu'une personne ici aura la patience pour me guider dans cette macro.

    -------------------------------

    @alsimbad : Il s'agit d'obtenir un "ensemble de ligne"

    AVANT
    1ère feuille :
    maitre
    _corbeau
    __sur un arbre
    ____perché
    tenait
    _dans son bec
    __un fromage

    APRES
    1ère feuille :
    maitre
    _corbeau
    __sur un arbre
    ____perché

    2ème feuille :

    tenait
    _dans son bec
    __un fromage

    -------------------------------
    Fichiers attachés Fichiers attachés
    • Type de fichier : zip VBA.zip (53,4 Ko, 129 affichages)

  6. #6
    Membre averti Avatar de mordrhim
    Inscrit en
    Avril 2007
    Messages
    270
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Avril 2007
    Messages : 270
    Points : 314
    Points
    314
    Par défaut
    Et ce fichier te va ou pas ?

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 393
    Points : 451
    Points
    451
    Par défaut
    Citation Envoyé par Zifnab
    AVANT
    1ère feuille :
    maitre
    _corbeau
    __sur un arbre
    ____perché
    tenait
    _dans son bec
    __un fromage

    APRES
    1ère feuille :
    maitre
    _corbeau
    __sur un arbre
    ____perché

    2ème feuille :

    tenait
    _dans son bec
    __un fromage

    -------------------------------
    Ca y est je viens de comprendre. En fait comme je ne voyais pas de 2e cellule dans la colonne A qui avait des données, je pensais que tu t'étais trompé... Mais non...
    Essaie :
    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
    Sub petitstableaux()
        Dim feuilori As Worksheet, feuilnew As Worksheet
        Set feuilori = Feuil1
        nblignes = feuilori.UsedRange.Rows.Count
        i = 1
        ' Si Ax non vide
        While feuilori.Range("A" & i) <> ""
            k = i + 1
            ' Va chercher la prochaine ligne où Ax non vide
            Do While (feuilori.Range("A" & k) = "" And k <= nblignes)
                k = k + 1
            Loop
            ' Insertion de la nouvelle feuille
            Set feuilnew = ThisWorkbook.Worksheets.Add
            ' Copie de la plage entre le 1er Ax non vide et le dernier Ax non vide trouvé
            feuilori.Range(i & ":" & k - 1).Copy feuilnew.Range("A1")
            ' Recommencer à partir du dernier Ax non vide trouvé
            i = k
        Wend
        Set feuilori = Nothing
        Set feuilnew = Nothing
    End Sub

  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
    @mordrhim : Malheureusement non. Il fonctionne effectivement mais ne prends en compte qu'une partie de mon problème. C'est en partie de ma faute, j'ai encore une fois mal exprimé mon problème...

    En fait, il faudrait qu'il obtienne ça :

    AVANT
    1ère feuille :
    maitre
    _corbeau
    __sur
    _un arbre
    __perché
    tenait
    _dans
    __son
    ___bec
    __un
    ___fromage

    APRES
    1ère feuille :
    maitre
    _corbeau
    __sur
    _un arbre
    __perché

    2ème feuille :

    tenait
    _dans
    __son
    ___bec
    __un
    ___fromage

    Ce n'est pas "linéraire" (je ne sais pas si on me comprend...).

    ----------------------------------

    @dadavyvy : Je suis en train d'analyser ton code, actuellement, il me fait une boucle infinie (donc je suis en mode debuggage pour découvrir le problème).

Discussions similaires

  1. [Dojo] [Grid] Trouver une bonne documentation
    Par csperandio dans le forum Bibliothèques & Frameworks
    Réponses: 4
    Dernier message: 29/10/2009, 23h19
  2. [RUP] Ou trouver une bonne introduction ?
    Par elitost dans le forum xUP
    Réponses: 3
    Dernier message: 28/11/2006, 10h17
  3. [CR] trouver une bonne doc
    Par ina dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 17/06/2004, 17h43

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