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 :

aide pour créer une macro


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    446
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Septembre 2006
    Messages : 446
    Par défaut aide pour créer une macro
    Bonjour a tous, j'ai besoin d'une aide pour realiser une macro sur excel, moi je suis debutant donc je connais presque rien de ce sujet.

    Moi j'ai un tableau avec comme colonne CDC, Description CDC, Factor_CDC, Description_Facteur_CDC.

    ce que je voudrais et de faire une macro qui me permet pour chaque CDC de faire un feuille et inserer les colonnes CDC, Description CDC, Facteur_CDC, Descritpion_Facteur_CDC.

    donc quand je ouvre excel il doit apparaitre une fenetre avec un bouton blanc qui me permet d'excetuer la macro, donc que pour chaque CDC va creer un feuille et cree le tableau avec les colonnes CDC, Description CDC, Facteur_CDC, Descritpion_Facteur_CDC.

    comment je peux faire ça?


    comment je peux faire pour fa

  2. #2
    Membre chevronné Avatar de drakkar_agfa
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 618
    Par défaut
    Bonjout TOI,

    Dans chaque feuille, il doit avoir le tableau de ta première feuille avec le CDC de la feuille mais toutes les colonnes?

    Feuille 1:
    aaaa 111 111
    bbbb 222 222
    cccc 333 333

    Feuille 2:
    aaaa 111 111

    Feuille 3:
    bbbb 222 222

    etc...

    Est-ce bien cela?

    Tu devrais connaitre la notion de boucle.
    Pour parcourir ton tableau, et à chaque ligne, ajouter une feuille et copier la ligne du tableau dans cette feuille.

  3. #3
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    446
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Septembre 2006
    Messages : 446
    Par défaut
    Oui t'as bien compris ce que je voudrais faire mais le probleme est que je pas comment le faire...

  4. #4
    Membre chevronné Avatar de drakkar_agfa
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 618
    Par défaut
    Connais-tu les boucles?
    Et l'ajout d'une feuille?

    Montre nous ce que tu as jusqu'à maintenant et on regardera tout ceci ensemble.

  5. #5
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    446
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Septembre 2006
    Messages : 446
    Par défaut
    No je connais pas ça, je jamais fais des macro et donc je sais pas...

  6. #6
    Membre chevronné Avatar de drakkar_agfa
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 618
    Par défaut
    Alors voici le 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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Sub Separer()
        Dim sh As Worksheet
        Dim shNouveau As Worksheet
        Dim i As Integer
     
        Set sh = ActiveSheet
     
        For i = 2 To Range("A65536").End(xlUp).Row 'Depart des données, j'imagine que la ligne 1 est l'en-tête.
     
            Set shNouveau = Sheets.Add
            shNouveau.Name = sh.Cells(i, 1)
            shNouveau.Cells(1, 1) = sh.Cells(1, 1)
            shNouveau.Cells(1, 2) = sh.Cells(1, 2)
            shNouveau.Cells(1, 3) = sh.Cells(1, 3)
            shNouveau.Cells(1, 4) = sh.Cells(1, 4)
     
            shNouveau.Cells(2, 1) = sh.Cells(i, 1)
            shNouveau.Cells(2, 2) = sh.Cells(i, 2)
            shNouveau.Cells(2, 3) = sh.Cells(i, 3)
            shNouveau.Cells(2, 4) = sh.Cells(i, 4)
     
        Next i
     
    End Sub
    Il crée une feuille pour chaque ligne. Il copie l'en-tête de la primière feuille.
    Il copie la ligne et la place sous l'en-tête.

    Si tu as des questions, n'hésite pas!

  7. #7
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 27
    Par défaut
    Drakkar_afga :
    si je comprends bien ton code, tu pars de la ligne 2 et tu fais un boucle jusqu'à la ligne 65536, juste?

    Si c'est le cas, ne serait-ce pas plus propre de regarder le contenu de la colonne CDC, et plutot que de faire un for de i jusqu'à 65536, faire un while tant que i<>""?

    C'est une question juste par intérêt et qui est peut être totalement erronnée, je débute également sur VB, je suppose que ton code fonctionne, je n'ai pas encore eu le temps de le tester

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut Alainpinpin

    Bien regarder la ligne suivante et la comprendre, dans le code de drakkar_agfa
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = 2 To Range("A65536").End(xlUp).Row
    siginifie que l'on s'arrête à la dernière cellule non vide de la colonne de référence. Pour trouver cette cellule, on remonte de la dernière du tableau jusqu'à trouver une cellule occupée.

    Pour des raisons de compatibilité 2007, on peut utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = 2 To Range("A" & Rows.Count).End(xlUp).Row
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  9. #9
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    446
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Septembre 2006
    Messages : 446
    Par défaut
    Moi j'ai inseré le conde dans Visual Basic de excel mais quand je l'execute il me dit: Impossible de renomer une feuille avec le meme nom d'une autre feuille, de reference à un autre objet ou à un dossier referé de visual basic.

    J'ai compris le probleme. il faut dire que chaque fois qu'il trouve un code Cdc nouveau il va creer une feuille et il va inserer les colonnes et les données.

    donc par ex:

    feuille general
    Cdc Prod Desc ...
    yyy 4 llllll
    yyy 5 pakdai
    ooo 2 proror
    ppp 5 pppppp
    yyy 2 ciiais

    la macro doit faire :

    feuille YYY
    Cdc Prod Desc ...
    yyy 4 llllll
    yyy 5 pakdai
    yyy 2 ciiais


    Feuille OOO
    Cdc Prod Desc ...
    ooo 2 proror

    etc...

  10. #10
    Membre chevronné Avatar de drakkar_agfa
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 618
    Par défaut
    Ok, plusieurs code peuvent revenir?
    J'avais pris en compte qu'un code peut être présent une seul fois.

    Dans ce cas ci, au lieu de directement créé une feuille avec le code, il faut vérifier si une feuille est déja présente avec le nom. Si elle est présente, il faut ajouter à la suite au lieu de créé une feuille.

  11. #11
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    446
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Septembre 2006
    Messages : 446
    Par défaut
    Oui et s'il y a pas le nom il faut creer une feuille.

  12. #12
    Membre chevronné Avatar de drakkar_agfa
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 618
    Par défaut
    Bonjour, je m'excuse du délais
    Voici ce que j'ai trouvé:
    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
    Option Explicit
     
    Sub Separer()
        Dim sh As Worksheet, Feuille As Worksheet
        Dim i As Integer, iRendu As Integer
        Dim Verificateur As Boolean
        Dim NomFeuille As String
     
        Set sh = ActiveSheet
     
        For i = 2 To Range("A65536").End(xlUp).Row
            Verificateur = False
            NomFeuille = sh.Cells(i, 1)
     
            For Each Feuille In Worksheets
                If Feuille.Name = NomFeuille Then
                    Verificateur = True
                End If
            Next Feuille
     
            If Verificateur = False Then
                Call AjouterFeuille(NomFeuille)
            Else
                Worksheets(NomFeuille).Activate
            End If
     
            iRendu = Range("A65536").End(xlUp).Row + 1
     
            Worksheets(NomFeuille).Cells(iRendu, 1) = sh.Cells(i, 1)
            Worksheets(NomFeuille).Cells(iRendu, 2) = sh.Cells(i, 2)
            Worksheets(NomFeuille).Cells(iRendu, 3) = sh.Cells(i, 3)
            Worksheets(NomFeuille).Cells(iRendu, 4) = sh.Cells(i, 4)
     
        Next i
     
    End Sub
     
    Function AjouterFeuille(Nom As String)
     
        Dim shNouveau As Worksheet
        Dim sh As Worksheet
     
        Set sh = ActiveSheet
        Set shNouveau = Sheets.Add
     
        shNouveau.Name = Nom
     
        shNouveau.Cells(1, 1) = sh.Cells(1, 1)
        shNouveau.Cells(1, 2) = sh.Cells(1, 2)
        shNouveau.Cells(1, 3) = sh.Cells(1, 3)
        shNouveau.Cells(1, 4) = sh.Cells(1, 4)
     
    End Function
    Essais ceci, s'il quelque chose d'autre....

  13. #13
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    446
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Septembre 2006
    Messages : 446
    Par défaut
    MERCIIIIIIIIIIIIIIIIIII la macro marche tres bien.... vraiment tu m'as fait un grand plaisir.... merci merci

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

Discussions similaires

  1. Aide pour créer une boucle
    Par laroche1 dans le forum MATLAB
    Réponses: 2
    Dernier message: 04/12/2007, 15h51
  2. Réponses: 1
    Dernier message: 01/11/2006, 17h36
  3. aide pour créer une base
    Par irnbru dans le forum Débuter
    Réponses: 3
    Dernier message: 19/09/2006, 18h03
  4. aide pour créer une faq sur inno setup
    Par fsx999 dans le forum Langage
    Réponses: 3
    Dernier message: 12/06/2006, 20h16
  5. [FLASH MX2004] Aide pour créer une animation
    Par SnakeTales dans le forum Flash
    Réponses: 5
    Dernier message: 04/08/2005, 10h50

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