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 :

Questions diverses sur macros [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Conseiller Finance
    Inscrit en
    Juillet 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Conseiller Finance
    Secteur : Services de proximité

    Informations forums :
    Inscription : Juillet 2014
    Messages : 19
    Points : 5
    Points
    5
    Par défaut Questions diverses sur macros
    Bonjour,

    Je débute sur VBA Excel (voire VBA tout court ^^) donc ne m'en veuillez pas si j'ai du mal à m'exprimer...

    J'ai une facture sous excel qui fallait rendre moins touffue.
    La solution : une macro afficher toutes les cellules :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub AFFICHER()
    Dim cellule As Range
        For Each cellule In Union(Range("E32:e35"), Range("e39:e43"), Range("e47:e48"), Range("e52"), Range("e55"))
        cellule.EntireRow.Hidden = False
        Next cellule
    End Sub
    J'ai trouvé ce code en farfouillant un peu, il y a peut être plus facile...

    Ensuite une macro qui permet de masquer des lignes qui contiennent un cellule de référence vide (une quantité) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub MASQUER()
     
        Dim cellule As Range
        For Each cellule In Union(Range("E32:e35"), Range("e39:e43"), Range("e47:e48"), Range("e52"), Range("e55"))
        If cellule.Value = "" Then
        cellule.EntireRow.Hidden = True
        End If
        Next cellule
     
    End Sub
    Ca fonctionne bien, j'ai rajouté des boutons sur la feuille et ca marche aussi.

    J'aimerai rajouter dans le code un autre critère que "", par exemple 0.
    Si la cellule est vide ou contient un 0 alors il faut la masquer.

    J'ai essayé avec Or mais ca ne masque pas la ligne ou la cellule de réf contient 0, seulement si c'est vide.



    Ensuite, l'idéal serait de pouvoir automatiser le code AFFICHER à l'ouverture du classeur.
    J'ai bien trouvé en cherchant le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Workbook_Open()
    Dim cellule As Range
        For Each cellule In Union(Range("E32:e35"), Range("e39:e43"), Range("e47:e48"), Range("e52"), Range("e55"))
        cellule.EntireRow.Hidden = False
        Next cellule
    End Sub
    Mais ca ne marche pas.

    De même j'aimerai pouvoir automatiser le code MASQUER lors de l'impression :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Workbook_BeforePrint(Cancel As Boolean)
        Dim cellule As Range
        For Each cellule In Union(Range("E32:e35"), Range("e39:e43"), Range("e47:e48"), Range("e52"), Range("e55"))
        If cellule.Value = "" Then
        cellule.EntireRow.Hidden = True
        End If
        Next cellule
     
    End Sub

    Merci d'avance pour le coup de main.

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2014
    Messages : 271
    Points : 335
    Points
    335
    Par défaut
    Bonjour,

    J'aimerai rajouter dans le code un autre critère que "", par exemple 0.
    Utilise ElseIf
    "Ensuite, l'idéal serait de pouvoir automatiser le code AFFICHER à l'ouverture du classeur.
    Il faut enregistrer cette macro dans "This workbook"

    Idem pour masquer

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Conseiller Finance
    Inscrit en
    Juillet 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Conseiller Finance
    Secteur : Services de proximité

    Informations forums :
    Inscription : Juillet 2014
    Messages : 19
    Points : 5
    Points
    5
    Par défaut
    Merci pour tes réponses


    Citation Envoyé par had4789 Voir le message
    Bonjour,

    "J'aimerai rajouter dans le code un autre critère que "", par exemple 0."

    Utilise ElseIf
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub MASQUER()
     
        Dim cellule As Range
        For Each cellule In Union(Range("E32:e35"), Range("e39:e43"), Range("e47:e48"), Range("e52"), Range("e55"))
        If cellule.Value = "" Then
        ElseIf cellule.Value = "0" Then
        cellule.EntireRow.Hidden = True
        End If
        Next cellule
     
    End Sub
    Ca me masque les 0 mais plus les vides

    Citation Envoyé par had4789 Voir le message


    "Ensuite, l'idéal serait de pouvoir automatiser le code AFFICHER à l'ouverture du classeur."

    Il faut enregistrer cette macro dans "This workbook"
    C'est enregistré dans thisworkbook mais ca ne fonctionne pas

    Idem pour masquer

  4. #4
    Invité
    Invité(e)
    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
    Sub MASQUER()
     
        Dim cellule As Range
        For Each cellule In Union(Range("E32:e35"), Range("e39:e43"), Range("e47:e48"), Range("e52"), Range("e55"))
        If trim("" & cellule.Value) = ""  or trim("" & cellule.Value) = "0" Then
            cellule.EntireRow.Hidden = True
       else
           cellule.EntireRow.Hidden = false
        End If
        Next cellule
     
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_Open()
    MASQUER
    End Sub

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Conseiller Finance
    Inscrit en
    Juillet 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Conseiller Finance
    Secteur : Services de proximité

    Informations forums :
    Inscription : Juillet 2014
    Messages : 19
    Points : 5
    Points
    5
    Par défaut
    Impeccable ca marche pour les 0.
    Merci.

    Par contre pas pour l'ouverture.
    J'ai ce message d'erreur :

    Nom : excel.jpg
Affichages : 166
Taille : 141,8 Ko

  6. #6
    Invité
    Invité(e)
    Par défaut
    a l'ouverture ton fichier n'est pas placé sur une feuille d'ou l'erreur!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     For Each cellule In Union(sheets("Feuil1").Range("E32:e35"),sheets("Feuil1").Range("e39:e43"), sheets("Feuil1").Range("e47:e48"), sheets("Feuil1").Range("e52"), sheets("Feuil1").Range("e55"))
        If trim("" & cellule.Value) = ""  or trim("" & cellule.Value) = "0" Then
            cellule.EntireRow.Hidden = True
       else
           cellule.EntireRow.Hidden = false
        End If
        Next cellule
     
    End Sub
    Dernière modification par Invité ; 30/07/2014 à 12h20.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Conseiller Finance
    Inscrit en
    Juillet 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Conseiller Finance
    Secteur : Services de proximité

    Informations forums :
    Inscription : Juillet 2014
    Messages : 19
    Points : 5
    Points
    5
    Par défaut
    A l'impression c'est bon, les cellules se masquent.
    Par contre à l'ouverture, j'ai toujours un soucis.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub AFFICHER()
     Dim cellule As Range
     For Each cellule In Union(Sheets("Facture").Range("E32:e35"), Sheets("Facture").Range("e39:e43"), Sheets("Facture").Range("e47:e48"), Sheets("Facture").Range("e52"), Sheets("Facture").Range("e55"))
             cellule.EntireRow.Hidden = False
           Next cellule
    "La méthode 'sheets' de l'objet '_global' a échoué" et ce, uniquement si je rajoute le code macro à l'ouverture :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub Workbook_Open()
    AFFICHER
    End Sub
    Si je l'enlève, ca fonctionne.

  8. #8
    Invité
    Invité(e)
    Par défaut
    même soucie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Workbook_Open()
    sheets("Feuil1").select
    AFFICHER
    End Sub
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub MASQUER()
     
        Dim cellule As Range
        For Each cellule In Union(sheets("Feuil1").Range("E32:e35"), sheets("Feuil1").Range("e39:e43"), sheets("Feuil1").Range("e47:e48"),sheets("Feuil1"). Range("e52"),sheets("Feuil1"). Range("e55"))
        If trim("" & cellule.Value) = ""  or trim("" & cellule.Value) = "0" Then
            cellule.EntireRow.Hidden = True
       else
           cellule.EntireRow.Hidden = false
        End If
        Next cellule
     
    End Sub

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Conseiller Finance
    Inscrit en
    Juillet 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Conseiller Finance
    Secteur : Services de proximité

    Informations forums :
    Inscription : Juillet 2014
    Messages : 19
    Points : 5
    Points
    5
    Par défaut
    Je vais laisser tomber, l'erreur concerne "select" maintenant.
    Je vais plutot opter pour le bouton sur lequel cliquer à chaque ouverture, qui permet d'afficher toutes les lignes.
    Ca fonctionne bien, c'est juste manuel


    Par contre, si je veux duppliquer ces macros sur une autre feuille du meme classeur, je dois juste changer le nom de la feuille dans le code ?
    C'est la même structure, mais les tarifs changent

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2014
    Messages : 271
    Points : 335
    Points
    335
    Par défaut
    Bonjour,

    Ton select vient peut être du fait que tu essais d'afficher des cellules qui ne sont pas masquées.

    Pour ta question, oui il suffit de changer de copier ton code et de changer le nom de correspondant dans ta feuille.

  11. #11
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    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
    Option Explicit
     
    Sub Afficher(ByVal Ws As Worksheet)
     
    With Ws
        Union(.Range("E32:E35"), .Range("E39:E43"), .Range("E47:E48"), .Range("E52"), .Range("E55")).EntireRow.Hidden = False
    End With
    End Sub
     
     
    Sub Masquer(ByVal Ws As Worksheet)
    Dim c As Range
     
    With Ws
        For Each c In Union(.Range("E32:E35"), .Range("E39:E43"), .Range("E47:E48"), .Range("E52"), .Range("E55"))
            c.EntireRow.Hidden = c.Value = "" Or c.Value = 0
        Next c
    End With
    End Sub
     
     
    Sub AfficheAll()
     
    Afficher Worksheets("Feuil1")
    Afficher Worksheets("Feuil2")
    End Sub
     
    Sub MasquerAll()
     
    Masquer Worksheets("Feuil1")
    Masquer Worksheets("Feuil2")
    End Sub
    Pas besoin de sélectionner
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Conseiller Finance
    Inscrit en
    Juillet 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Conseiller Finance
    Secteur : Services de proximité

    Informations forums :
    Inscription : Juillet 2014
    Messages : 19
    Points : 5
    Points
    5
    Par défaut
    @ had4789

    Ca marche en manuel.
    J'ai peu de temps pour terminer, donc je vais éviter de m'éterniser
    A moins qu'on puisse m'apporter une réponse qui règle tout ^^

    Concernant ma question, j'ai créé 2 autres macro dont j'ai copié le code et modifié le nom des feuilles.
    Ca à l'air de fonctionner.

    Merci pour l'aide


    @ mercatog

    Je n'avais pas vu ce message..

    Je dois le mettre ou tout ça ?

    Tout fonctionne à part le fait de pouvoir executer la macro "AFFICHER" à l'ouverture.

  13. #13
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2014
    Messages : 271
    Points : 335
    Points
    335
    Par défaut
    Tu as mis ta fonction dans la même feuille que pour le sub MASQUER?

    Est-ce que tu as un message d'erreur à l'ouverture ou rien du tout?

    Essaye:



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Workbook_Open()
     
    Call AFFICHER ' A Remplacer par le nom de la macro que tu veux lancer à l'ouverture
     
    End sub

  14. #14
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Par exemple mettre les procédures dans un module standard

    Et dans le module ThisWorkbook

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Workbook_Open()
     
    AfficheAll
    End Sub
    Testé et fonctionnelle (actions sur feuil1 et feuil2 avec Feuil3 étant la feuille active. Donc pas besoin de sélectionner ou activer quoique ce soit)
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Conseiller Finance
    Inscrit en
    Juillet 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Conseiller Finance
    Secteur : Services de proximité

    Informations forums :
    Inscription : Juillet 2014
    Messages : 19
    Points : 5
    Points
    5
    Par défaut
    C'est de pire en pire xD

    la feuille doit être protégée, donc entre temps, j'ai rajouté

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Facture HC").Unprotect Password:="mon mot de passe"
    Et du coup, erreur methode "sheets" de l'objet "_global"

    Actuellement, pour l'execution de la macro à l'impression j'ai ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Workbook_BeforePrint(Cancel As Boolean)
    Sheets("Facture").Select
    Masquer
    Sheets("Facture HC").Select
    MASQUER_HC
    End Sub

    Mais je me rends compte, que du coup ca modifie les 2 feuilles, même si je fais imprimer la feuille active.
    Il n'y a pas une possibilité de lancer la macro uniquement sur la feuille active ?

  16. #16
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Une énième fois, pas besoin de sélectionner les feuilles ou les activer

    Module standard
    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
    Option Explicit
     
    Sub Afficher(ByVal Ws As Worksheet)
     
    With Ws
        Union(.Range("E32:E35"), .Range("E39:E43"), .Range("E47:E48"), .Range("E52"), .Range("E55")).EntireRow.Hidden = False
    End With
    End Sub
     
     
    Sub Masquer(ByVal Ws As Worksheet)
    Dim c As Range
     
    With Ws
        For Each c In Union(.Range("E32:E35"), .Range("E39:E43"), .Range("E47:E48"), .Range("E52"), .Range("E55"))
            c.EntireRow.Hidden = c.Value = "" Or c.Value = 0
        Next c
    End With
    End Sub
     
     
    Sub AfficheAll()
     
    Afficher Worksheets("Facture")
    Afficher Worksheets("Facture HC")
    End Sub
    Module ThisWorkbook
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Option Explicit
     
    Private Sub Workbook_Open()
    Const Mdp As String = "Ton mot de passe"
     
    Worksheets("Facture").Protect Password:=Mdp, UserInterfaceOnly:=True
    Worksheets("Facture HC").Protect Password:=Mdp, UserInterfaceOnly:=True
    AfficheAll
    End Sub
     
    Private Sub Workbook_BeforePrint(Cancel As Boolean)
     
    Masquer ActiveSheet
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  17. #17
    Futur Membre du Club
    Homme Profil pro
    Conseiller Finance
    Inscrit en
    Juillet 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Conseiller Finance
    Secteur : Services de proximité

    Informations forums :
    Inscription : Juillet 2014
    Messages : 19
    Points : 5
    Points
    5
    Par défaut
    J'ai compris cette fois, désolé, je me suis un peu embrouillé avec tous ces messages...

    Bon, ca fonctionne bien sur l'impression.
    Par contre, toujours un message d'erreur quand j'ouvre le fichier :

    La méthode 'Workshets' de l'objet '_Global' a échoué.
    Quand je cliques sur débogage il me surligne :

    Afficher Worksheets("Facture")

  18. #18
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Je ne saurai reproduire ton erreur
    Qu'as tu de spécial sur tes feuilles et ton classeur (hormis feuilles protégées par mdp)
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  19. #19
    Futur Membre du Club
    Homme Profil pro
    Conseiller Finance
    Inscrit en
    Juillet 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Conseiller Finance
    Secteur : Services de proximité

    Informations forums :
    Inscription : Juillet 2014
    Messages : 19
    Points : 5
    Points
    5
    Par défaut
    Ce sont des factures pour des centres de loisirs.
    Il y a plusieurs onglets, notamment pour le calcul des tarifs, en fonction de la situation familiale

    Rien de bien spécial

  20. #20
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Tu auras un fichier exemple fidèle au tien (sans les données bien sûr)?
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

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

Discussions similaires

  1. Questions diverses sur MySQL 5.0
    Par AsmCode dans le forum SQL Procédural
    Réponses: 14
    Dernier message: 25/01/2007, 16h35
  2. Questions diverses sur les packages
    Par Stief dans le forum Mise en forme
    Réponses: 1
    Dernier message: 15/10/2006, 11h35
  3. [RSS] Questions diverses sur les flux RSS (Google et phpBB)
    Par leserapheen dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 06/10/2006, 14h35
  4. [DW8] Questions diverses sur le logicie
    Par syn_42 dans le forum Dreamweaver
    Réponses: 3
    Dernier message: 01/03/2006, 17h23
  5. Questions diverses sur TIBDataset et TDBGrid
    Par AlexB59 dans le forum Bases de données
    Réponses: 2
    Dernier message: 23/11/2005, 17h14

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