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 pour mise en page [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Débutant  
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    887
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 887
    Points : 206
    Points
    206
    Par défaut Macro pour mise en page
    Bonjour,

    Je dois créer une macro qui doit effectuer un certain nombre de mises en forme.
    Parmi ces mises en forme, il y en une qui me x@!!! ahhh ....!

    Je dois, en fonction des valeurs situées dans une colonne A décaler (pas copier), ou pas, les montants correspondants de la colonne B vers la colonne C. Je dois ensuite supprimer la colonne qui contient les valeurs de référence.

    Ainsi :
    Dans le colonne A, j'ai deux valeurs 1 et 2. Si A1 = 1, donc valeur de B1 doit être décalée en colonne C1 et la B1 reste vide. Si A1 = 2 donc B1 ne bouge pas de là.


    Est-ce clair ?

    Et rassurez-moi, la macro exécutera mes mises en formes dans l'ordre dans lequel je l'aurai enregistrée ? Car si ce n'est pas le cas, j'ai peur que la macro bug vu que la colonne qui contient les valeurs 1 et 2 doit être supprimée (or c'est cette colonne qui conditionne le décalage ou non des valeurs).

    Merci pour votre aide.
    Je rappelle que cette macro enregistrée dans "macro personnelle" comporte d'autres mises en forme

  2. #2
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bonjour,

    L'enregistreur de macro te permettrait de trouver des bouts de code pour réaliser ce genre de manipulation.

    Teste ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub test()
    Dim i As Integer
     
    For i = 1 To Range("A" & Rows.Count).End(xlUp).Row
        If Range("A" & i) = 1 Then Range("B" & i).Cut Range("C" & i)
    Next
     
    'pour supprimer la colonne A
    Range("A1").EntireColumn.Delete
     
    End Sub

  3. #3
    Débutant  
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    887
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 887
    Points : 206
    Points
    206
    Par défaut
    Bonsoir et merci,
    J'ai cherché des codes partout sur le net, j'en ai vus qui se rapprochaient de mon cas, je les ai copiés, étudiés, appliqués et zéro résultat.
    Je vais tester le tien de suite

    ça marche pas
    Voici un exemple fidèle du fichier à travailler. C'est l'export brut d'un logiciel comptable. Pour pouvoir l'exporter dans un autre logiciel comptable, il faut modifier quelque peu la mise en forme pour qu'elle corresponde à celle du logiciel cible. Il y a notamment la suppression de certaines colonnes, de valeurs, etc... puis s'agissant des colonnes J, K, L, je dois
    - trier de A à Z la colonne J afin d'avoir en premier tous les lignes C (comme crédit) et ensuite toutes les D (comme débit)
    - déplacer en L, toutes les valeurs correspondant au opérations de crédit (C) et laisser en K toutes les valeurs correspondant au opérations de débit (D)
    - une fois cela effectué, supprimer la colonne J.

    Cette opération doit faire partie des nombreuses mise en forme qui constituent la macro que je dois créer (dans macro personnelles) pour automatiser la manip d'export de fichiers.

    Est-ce plus clair ?
    Fichiers attachés Fichiers attachés

  4. #4
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Bonjour,

    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
    Option Explicit
    Sub test()
    Dim i As Integer
    Dim DerLig As Long
    Dim Cel As Range
        With Worksheets("RAC022012")
            DerLig = .Range("J" & Rows.Count).End(xlUp).Row
            .Sort.SortFields.Clear
            .Sort.SortFields.Add Key:=Range("J2:J" & DerLig), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
                xlSortNormal
            With .Sort
                .SetRange Range("A2:Z" & DerLig)
                .Header = xlGuess
                .MatchCase = False
                .Orientation = xlTopToBottom
                .SortMethod = xlPinYin
                .Apply
            End With
            For Each Cel In .Range("J2:J" & DerLig)
                If Cel.Value = "C" Then
                    Cel.Offset(0, 1).Cut Cel.Offset(0, 2)
                Else
                    Cel.Offset(0, 2) = ""
                End If
            Next
            Range("J1").EntireColumn.Delete
        End With
    End Sub
    Cordialement.

  5. #5
    Débutant  
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    887
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 887
    Points : 206
    Points
    206
    Par défaut
    C'est fou ! Merciiiiiiiiiii bcp, ça marche !
    Je n'aurais jamais pu trouver ça avec tous les codes que j'ai trouvés et épluchés.

    Merci également à Fringe pour sa contribution. SI j'avais dès le départ joint le fichier (que je n'avais pas à ce moment là), cela aurait été plus simple pour toi.

    Petite question toutefois, la feuille de travail ne portera pas toujours ce nom.
    Par quoi je dois remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With worksheets("xxxx")
    pour qu'elle désigne une feuille de manière générale ?

    Par ailleurs, j'ai oublié de signaler que la première ligne (A1) sera supprimée avant la macro. Du coup, j'ai modifié le code que tu m'as donné mais il ne fonctionne plus.

    Enfin, le code n'est pas pris en compte dans la macro qui va concentrer toutes les mises en forme. Du coup, je ne pourrai pas appliquer ma macro globale avec mon contrôle clavier !!! bouh ! comment faire pour que toutes mes manip soient dans une seule macro et pas 2 macros ?

  6. #6
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Bonjour,

    Par quoi je dois remplacer With worksheets("xxxx") pour qu'elle désigne une feuille de manière générale ?
    Tu ne peux pas désigner une feuille de manière "générale". Il faut identifier la feuille sur laquelle est réalisé le traitement. Par contre, si cette feuille est la feuille active, tu peux te passer de cette référence.
    Le code s’écrit alors
    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
    Sub test()
    Dim i As Integer
    Dim DerLig As Long
    Dim Cel As Range
            DerLig = Range("J" & Rows.Count).End(xlUp).Row
            Sort.SortFields.Clear
            Sort.SortFields.Add Key:=Range("J1:J" & DerLig), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
                xlSortNormal
            With Sort
                .SetRange Range("A1:Z" & DerLig)
                .Header = xlGuess
                .MatchCase = False
                .Orientation = xlTopToBottom
                .SortMethod = xlPinYin
                .Apply
            End With
            For Each Cel In Range("J1:J" & DerLig)
                If Cel.Value = "C" Then
                    Cel.Offset(0, 1).Cut Cel.Offset(0, 2)
                Else
                    Cel.Offset(0, 2) = ""
                End If
            Next
            Range("J1").EntireColumn.Delete
    End Sub
    Par ailleurs, j'ai oublié de signaler que la première ligne (A1) sera supprimée avant la macro. Du coup, j'ai modifié le code que tu m'as donné mais il ne fonctionne plus.
    Le code ci-dessus prend en compte cette modification.
    Enfin, le code n'est pas pris en compte dans la macro qui va concentrer toutes les mises en forme.
    Du coup, je ne pourrai pas appliquer ma macro globale avec mon contrôle clavier !!! bouh ! comment faire pour que toutes mes manip soient dans une seule macro et pas 2 macros ?
    Tu peux appeler cette procédure Test depuis ta procédure générale.

    Cordialement.

  7. #7
    Débutant  
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    887
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 887
    Points : 206
    Points
    206
    Par défaut
    ça bug sur
    Sinon, je me suis mal exprimée tout à l'heure. Je voulais dire que cette cette action (et pas cette macro) intervient après la suppression de la ligne 1. Je ne sais pas si ça a une importance. Je ne veux pas sous-entendre qu'il y a deux macros mais bien une seule qui doit gérer toutes les modifs que j'ai à effectuer.

    Voilà comment je procédais jusqu'à maintenant :
    - je lançais le processus de création Macro -> enregistrer une macro en affectant un raccourci, puis je commençais mes manip (suppr ligne 1, effacer suppr colonne A, changer format date colonne B, tri de la colonne de J, etc...)
    - ensuite après ces manip, j'ouvrais la fenêtre VBA et je collais le code.

    Probl, quand j'exécutais la macro avec le raccourci clavier, tout marchait sauf le code !

    Qu'est-ce que j'ai mal fait ?

  8. #8
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    J’effectue le test suivant avec ton fichier modèle :
    Je place le code Test dans le module de la feuille RAC022012.
    J’ajoute un bouton sur la feuille pour lancer la procédure Test.
    (Ce fichier est à disposition en pièce jointe)

    Je supprime la ligne 1.
    Je lance le test.
    Pas de problème .... Essaie de voir ce que tu ne fais pas à l’identique.

    Cordialement.
    Fichiers attachés Fichiers attachés

  9. #9
    Débutant  
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    887
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 887
    Points : 206
    Points
    206
    Par défaut
    ça marche !

    Ok, je crois savoir pourquoi ça ne marchait pas. J'ai collé le code dans un module.
    Est-cela qui aurait pu faire que ?

    Sinon, quand je vais enregistrer ma macro dans classeur de macro perso (vu qu'il y aura chaque mois 10 fichiers à traiter) et que je lui flanquerai le raccourci clavier pour l'exécuter, à quel moment je colle ce code ?

    Car je viens à nouveau de faire ce que je vais faire et appliquer au boulot et ça ne marche pas.
    Le code ne fonctionne pas quand je le colle dans l'éditeur VBA dans personal.xlsb...

  10. #10
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Bonjour,

    Ok, je crois savoir pourquoi ça ne marchait pas. J'ai collé le code dans un module.
    Est-cela qui aurait pu faire que ?
    Effectivement, si tu places le code dans un module standard, il ne peut pas deviner sur quelle feuille appliquer les instructions.

    Le code ne fonctionne pas quand je le colle dans l'éditeur VBA dans personal.xlsb...
    Fais le test avec le code ci-dessous intégré à PERSONAL.XLSB.

    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
    Sub test()
    Dim i As Integer
    Dim DerLig As Long
    Dim Cel As Range
    Dim Ws As Worksheet
            Set Ws = ActiveSheet
            With Ws
                DerLig = .Range("J" & .Rows.Count).End(xlUp).Row
                .Sort.SortFields.Clear
                .Sort.SortFields.Add Key:=.Range("J1:J" & DerLig), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
                    xlSortNormal
                With .Sort
                    .SetRange Ws.Range("A1:Z" & DerLig)
                    .Header = xlGuess
                    .MatchCase = False
                    .Orientation = xlTopToBottom
                    .SortMethod = xlPinYin
                    .Apply
                End With
                For Each Cel In .Range("J1:J" & DerLig)
                    If Cel.Value = "C" Then
                        Cel.Offset(0, 1).Cut Cel.Offset(0, 2)
                    Else
                        Cel.Offset(0, 2) = ""
                    End If
                Next
                .Range("J1").EntireColumn.Delete
            End With
    End Sub
    Cordialement.

  11. #11
    Débutant  
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    887
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 887
    Points : 206
    Points
    206
    Par défaut
    Ok.

    Je suis en train de faire différents tests pour voir le fonctionnement du code, je le décortique aussi.

    Peux-tu me dire pourquoi, quand je repars à zéro, que j'ouvre mon fichier excel vierge de toute macro et modif, que je fais "enregistrer une macro" dans "classeur de macro perso", que je commence mes modifs puis que j'ouvre l'éditeur VBA pour coller le code dans Personal.xlsb dans feuil1, que je ferme l'éditeur et que je fais arrêter l'enregistrement, lorsque je fais exécuter une macro cela me propose 2 macros différentes (une qui s'appelle PERSONAL.XLSB!Macro1 et l'autre PERSONAL.XLSB!Feuil1.test) ?

  12. #12
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Quand tu fais "enregistrer une macro" dans "classeur de macro perso", tu crée une nouvelle macro (Macro1).
    Si dans PERSONAL.XLSB il y a déjà la macro Feuil1.test, c’est normal qu’il te propose le choix entre ces 2 macros quand tu vas demander à exécuter une macro.
    Si tu veux une seule macro, il faut que tu regroupes les 2 codes dans une seule macro.

    Cordialement.

  13. #13
    Débutant  
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    887
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 887
    Points : 206
    Points
    206
    Par défaut
    Je ne suis pas sûre de comprendre. Si je repars de zéro. Aucune macro en cours.
    Si j'enregistre une macro perso, tu es OK avec moi que je ne crée qu'une macro. Quand j'enregistre ma macro, je fais toutes les modif que je veux et je colle mon code puis j'arrête l'enregistrement. A quel moment dans cette manip je crée une deuxième macro ? Comment faire pour n'avoir qu'une et seule macro qui regroupe toutes mes modifs ?

  14. #14
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Si tu enregistres une macro dans le classeur de macros personnelles Personal.XLSB, elle vient s'ajouter aux autres macros de ce classeur.

    Quand tu es dans l'éditeur VB, est-ce que tu vois le projet PERSONAL.XLSB ?
    Si c'est le cas, tu dois voir ce que contiennent les Modules.

    Cordialement.

  15. #15
    Débutant  
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    887
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 887
    Points : 206
    Points
    206
    Par défaut
    Le truc c'est que j'avais pas d'autres macros ! C'est pour ça que je te disais que je partais à zéro.

    Oui je vois la macro XLSB. J'en vois deux d'ailleurs toutes les deux comme je le disais avec la même extension XLSB mais une qui s'appelle macro1 et l'autre bah feuil1

    Je crois que c'est le collage du code qui identifie cette action comme la création d'une nouvelle macro, non ?

  16. #16
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Je crois que c'est le collage du code qui identifie cette action comme la création d'une nouvelle macro, non ?
    Pas du tout et tans pis si je me répète.
    Quand tu fais "enregistrer une macro" dans "classeur de macro perso", puis OK, tu lances l'enregistreur de macro.
    Il enregistre les différentes actions que tu réalises dans ta feuille jusqu'au moment où tu arrêtes l'enregistrement.
    A cet instant, la macro est créée dans PERSONAL.XLSB. Tu n'as aucun collage à faire.
    Par contre, si tu as réalisé plusieurs enregistrements et que tu veux les regrouper en une seule macro, il faut que tu regroupes les différents codes dans une seule macro. Là effectivement tu auras un peu de cuisine à faire.

    Cordialement.

  17. #17
    Débutant  
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    887
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 887
    Points : 206
    Points
    206
    Par défaut
    Désolée si je te fais répéter.
    Ok pour les modifs à faire pendant l'enregistrement de la macro mais le code que tu m'as donné, j'en fais quoi ? A quel moment il intervient ?

  18. #18
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Bon je reprends depuis le début.
    Lorsque tu dis que tu vois 2 macros (PERSONAL.XLSB!Macro1 et PERSONAL.XLSB!Feuil1.test) ,
    Cela veut dire que la première macro (Macro1 ) se trouve dans le classeur PERSONAL.XLSB, sous Modules / Module 1 et que la seconde macro (test ) se trouve dans le classeur PERSONAL.XLSB, sous Feuil1 (Feuil1).
    Regarde ces 2 macros et dis-moi si c’est bien ça.

  19. #19
    Débutant  
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    887
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 887
    Points : 206
    Points
    206
    Par défaut
    désolée.
    je n'enregistre pas mes tests et j'efface Xlstart.
    je reprends tout depuis le début.
    laisse moi le temps de refaire un test et je reviens

  20. #20
    Débutant  
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    887
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 887
    Points : 206
    Points
    206
    Par défaut
    alors, voilà ce que j'ai fait.
    j'ai ouvert un classeur à retraiter. J'ai fait "enregistrer une macro", j'ai sélectionné "classeur de macros perso" puis ok.
    j'ai ensuité supprimé la ligne A puis ouvert l'éditeur vba et collé ton code non pas dans un module mais dans feuil1.

    Résultat, qd j'affiche les macro, j'en ai deux

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-2003] Macro pour mise en page, affichant le nombre total de pages du classeur entier
    Par BtjpsspgrW dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/10/2014, 09h38
  2. Macro pour mise en page formulaire
    Par chahnou dans le forum VBA Access
    Réponses: 9
    Dernier message: 13/12/2013, 20h18
  3. [XL-2003] Adapter macro 2007/2010 pour mise en page
    Par Jean-Philippe André dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/11/2013, 13h29
  4. macro pour mise en page d'un tableau
    Par teen6517 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/09/2010, 14h52

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