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 :

Eclater une base de donnees variable en plusieurs classeurs Excel => un classeur par info colonne.


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Eclater une base de donnees variable en plusieurs classeurs Excel => un classeur par info colonne.
    Bonjour a tous,

    Dans le cadfre du travail, j'ai elabore une macro me permettant d'obtenir une base de donnees mais je ne parviens pas a trouver de solution pour la derniere etape; mon niveau en vb n'est pas tres eleve...

    Ma base de donnees se compose d'un nombre de ligne variable selon le fichier excel attaque par la macro.
    Dans cette base, j'ai toutes les informations necessaires pour travailler mais il me faut l'eclater en fonction des valeurs de la colonne B; les valeurs dans ma colonne represente le critere d'eclatement de ma base.

    Exemple : ma base commence en A13 jusque AB13.
    Si ma base fait 20 lignes et que j'ai 2 valeurs differentes dans la colonne B (10 lignes pour chaque valeur par exemple), je voudrais obtenir 2 nouveaux classeurs (nom du classeur = valeur) reprenant les 10 lignes pour chaque valeur associee.
    Les donnees dans la colonne B sont triees par ordre croissant si ca peu aider.

    De plus, est-il possible de generer des nouveaux classeurs avec un nom correspondant a la valeur de la conne B mais sans que ce classeur ne soit encore enregistrer; l'enregistrement serait effectue par l'utilisateur...

    Quelqu'un pourrait-il m'aider ?

    Merci beaucoup par avance pour votre aide !

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

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Bonjour,
    Un nombre de ligne variable? la solution :
    Dernière ligne et la dernière colonne renseignées d'une feuille

    Ouvrir un nouveau classeur
    Je conseillerai meme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dim Wb as workbook
     
    set wb = workbooks.add
    Cela te permettre de travailler sur le nouveau calsseur en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wb.worksheets("feuil1").range("a1")
    Ensuite tu doit l'enregistrer
    Regarde l'aide sur saveas

    Le nouveau classeur n'aura de nom qu'une fois enregistré

    Commence ta macro et revient nous voir si tu as des difficulté. Essaye au moins d'avoir l'algorithme (même en pseudo code si tu galère vraiment en VBA)
    « Il n'y a pas de recette miracle qui permet aux gens d’écrire des programmes corrects sans avoir à réfléchir. Il faut apprendre aux gens comment réfléchir »

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup pour ta reponse !

    Concernant la selection des donnees, je me suis arrange pour mettre une donnee permanente en premiere colonne de maniere a pouvoir utiliser le code basique de selection:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Range("A13:AA13").Select
    Range(Selection, Selection.End(xlDown)).Select
    De cette maniere ma plage de donnees est bien selectionnee. Le probleme maintenant est de dispatcher les lignes en fonction de la valeur se situant en colonne B de chaque ligne.
    A chaque valeur, creation d'un classeur dans lesquellles sont coupees collees chaque ligne.
    Pour cela, j'avais pour idee d'utiliser:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    For Each cell In Selection
            If cell(i, 2).Value <> cell(i + 1, 2).Value Then
                workbook.add
                'selectionner les lignes dans le fichier initial et les coller dans fichier cree.
            End If
        Next
    Le probleme est que cela me cree un nombre illimite de nouveau fichier excel...
    De plus, je ne vois pas comment exprimer le fait de couper la ou les lignes d'une valeur dans un fichier et la ou les lignes d'une autre valeur dans un autre...

    Penses-tu pouvoir m'aider ?

    Merci beaucoup par avance

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

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Premièrement ca serais sympa d'utiliser les balise code (voir le premier psote du forum sur l'utilisation des boutons)
    Deuxièmement je pense que tu devrais utiliser option explicite
    tu met au début de chaque module (un petit lien)
    Ca va te forcer a déclarer toutes tes variables c'est toujours bon


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    For Each cell In Selection
    If cell(i, 2).Value <> cell(i + 1, 2).Value Then
    workbook.add
    'selectionner les lignes dans le fichier initial et les coller dans fichier cree.
    End If
    Next
    Tu boucle sur une variable de type range nommé cell
    et tu testes la cellule ligne i et ligne i+1.
    Il n'y a aucune lien entre i et cell
    donc soit tu test cell et la cellule décalé d'un cran soit tu boucle sur i qui va de 1 a la dernière ligne
    (tu coup tu ouvre autant de classeur que tu as de cellule dans ta selection


    Pour ce qui est de
    cela revien a dire, je selection une zoneA et japplique quelquchose a la zone sélectionné
    autant dire j'applique quelque chose a la zone sélectionné. Tu verra rapidement que c'est plus rapide et ca évite certain souci

    donc dès que tu as
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    XXXX.select
    selection.YYYYYY
    tu remplace par
    « Il n'y a pas de recette miracle qui permet aux gens d’écrire des programmes corrects sans avoir à réfléchir. Il faut apprendre aux gens comment réfléchir »

Discussions similaires

  1. [XL-2003] Contenu d'une base de donnees Access dans menu deroulant Excel
    Par robx2309 dans le forum Excel
    Réponses: 8
    Dernier message: 06/05/2011, 19h51
  2. Compter une variable dans une base de donnees
    Par spinakur dans le forum Django
    Réponses: 2
    Dernier message: 18/06/2009, 09h31
  3. Macro Import de donnees de plusieurs fichier excel ds une base de donnees
    Par usualpierrot dans le forum Macros et VBA Excel
    Réponses: 22
    Dernier message: 21/08/2007, 17h31
  4. taille maximale d'une base de donnée paradox
    Par Anonymous dans le forum Paradox
    Réponses: 5
    Dernier message: 14/02/2004, 17h39
  5. [VB6] [ODBC] Référencer une base de données avec vb
    Par af.balog dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 13/09/2002, 09h51

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