VBA/Macro

Résolu
caillasse147 Messages postés 71 Statut Membre -  
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour à tous.

J'ai créé une macro sous Excel afin de faire tourner un fichier au boulot.

Or, le problème est que si je n'exécute pas cette dernière, ça ne tourne pas et lorsque je décide de l'exécuter ça fonctionne parfaitement mais par contre la macro ne tourne qu'une seule fois et même en changeant mes données de base, mes résultats restent figés.
Je ne sais pas si j'ai été clair, c'est pas évident et n'étant pas un pro d'Excel et surtout des VBA, j'aurais aimé savoir :

1) Comment faire tourner la macro automatiquement à chaque nouvelle entrée d'une valeur ?
2) Comment la faire tourner tout le temps sans avoir besoin de cliquer sur "exécuter" à chaque fois?

Ma macro actuelle est la suivante :

Sub Cellules_vides()
Dim cel As Range
For Each cel In Range("A10:A69")
If cel = "" Then
cel.EntireRow.Hidden = True
End If
Next
End Sub

Merci d'avance

7 réponses

  1. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    Bonjour,

    Pour cela tu mets ton code dans une macro événementielle dans ta feuille
    Private Sub Worksheet_Change(ByVal Target As Range)
    ' ton code
    End Sub
    

    0
    1. caillasse147 Messages postés 71 Statut Membre
       
      Merci de ta réponse mais ça ne fonctionne pas, rien n'a bougé
      0
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    bonjour,

    il faut faire pour ce que tu demandes
    Comment faire tourner la macro automatiquement à chaque nouvelle entrée d'une valeur ?
    utiliser une macro événementielle à écrire dans le module feuille de l'éditeur vba

    dans ton cas c'est le changement de valeur à qui déclenche et si j'ai pigé en supprimant la valeur ?
    si oui
    Option Explicit

    Private Sub Worksheet_Change(ByVal Target As Range)
    'zone d'action:range A20:A69; target:cellule qui a changée
    'si l 'intersection de target et de la zone n'est pas rien et si target est vide alors
    If Not Intersect(Target, Range("A20:A69")) Is Nothing And IsEmpty(Target) Then Rows(Target.Row).Hidden = True
    End If
    End Sub




     Michel
    0
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      Caillasse, je sens le paté ?
      0
      1. caillasse147 Messages postés 71 Statut Membre > michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Lol Non pourquoi?
        0
    2. caillasse147 Messages postés 71 Statut Membre
       
      oui oui c'est exactement cela, or je n'ai pas compris comment saisir ton code ci-dessus,

      Merci d'avance
      0
      1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320 > caillasse147 Messages postés 71 Statut Membre
         
        Caillasse, je sens le paté ?

        oui oui c'est exactement cela


        merci
        0
  3. caillasse147 Messages postés 71 Statut Membre
     
    Je n'ai pas réussi à trouver solution à mon problème,

    Je pense que je n'écris pas mon code au bon endroit.....
    0
    1. Utilisateur anonyme
       
       
      Bonjour caillasse147, bonjour le forum,

      Quand tu es sur ta feuille de calcul Excel, fais < Alt >< F11 > pour aller
      sur Microsoft Visual Basic. À gauche, tu peux voir une ligne avec :
      « VBAProject (nom de ton classeur) » ; dessous, il y a cette ligne :
      « Microsoft Excel Objets » ; dessous encore, il y a la liste des feuilles
      du classeur et ThisWorkbook ; clic sur Feuil1 ; < Entrée > : la page
      blanche qui s'est ouverte est la feuille de code de Feuil1 : c'est là
      que tu dois mettre la Sub Worksheet_Change(ByVal Target As Range).

      Cordialement.  :)
       
      0
    2. caillasse147 Messages postés 71 Statut Membre > Utilisateur anonyme
       
      Bonjour,

      C'est évidemment ce que je faisais mais le code ne change rien dans mon tableau, malheureusement...
      0
    3. Utilisateur anonyme > caillasse147 Messages postés 71 Statut Membre
       
      Essaye avec : Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      au lieu de : Private Sub Worksheet_Change(ByVal Target As Range)
      0
    4. caillasse147 Messages postés 71 Statut Membre
       
      Donc je met ça au début seulement et ensuite je mets mon code exactement comme je l'avais écrit au début on est d'accord?

      Merci!!!!!
      0
    5. caillasse147 Messages postés 71 Statut Membre
       
      Non ça change toujours rien
      0
  4. caillasse147 Messages postés 71 Statut Membre
     
    J'ai essayé avec l'astuce de chacun d'entre vous et même la dernière, celle d'albkan et ça ne fonctionne pas je pense que je suis mal exprimé, c'est même certain.

    En fait j'ai un onglet qui comprend 3 colonnes dont deux qui ne bougent jamais qui sont "expéditeurs" et "destinataire" et ensuite ma 3e colonne est celle ou je rentre mes volumes donc évidemment elle varie en fonction du chiffre ou nombre que je renseigne

    Concernant le deuxième onglet, appelé "récapitulatif", j'ai mis en forme un tableur que je pourrai directement envoyer à mon client, avec une forme particulière et évidemment professionnelle.

    Et justement c'est dans ce tableau que j'ai besoin de ma macro

    J'ai déjà inclus des fonctions "si" pour lesquelles si un volume est renseigné dans le premier onglet alors les 3 colonnes s'affichent et s'il n'y a pas de renseignements rien ne s'affiche.

    Jusque la tout va bien et tout fonctionne parfaitement.

    Mais le problème c'est que évidemment les lignes vides apparaissent dans mon second onglet même quand je n'ai pas renseigné de volumes sur le premier onglet donc j'avais trouvé un code permettant de les effacer qui fonctionne très bien mais le soucis que je rencontre c'est que pour qu'il fonctionne il faut à chaque fois que j'aille sur "développeur" pour exécuter ma macro donc j'aimerais que ça se fasse automatiquement dans un premier temps et le deuxième problème c'est que lorsque je l'exécute et bien même en modifiant les volumes ça reste intact, et les nouvelles lignes n'apparaissent plus.
    Donc en fait une fois l'exécution de la macro, si par inattention j'ai oublié un de mes volumes et que je dois le rajouter bah je suis "niqué" (désolé pour l'expression) car il ne se rajoute pas dans mon tableau final....

    Je pense avoir été plus clair

    Et merci à tous d'essayer d'éclaircir avec moi tout cela
    0
    1. Utilisateur anonyme
       
      Pour ton message #12, tu as essayé trop vite ! Tu aurais dû attendre ma réponse :
      c'est le message #15.
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    re Caillasse
    mets ton classeur en pièce jointe la macro que je t'avais proposé avait été testé et fonctionnait donc en fonction de ce que tu demandais, effectivement, d'après tes derniers messages, tu t'étais mal exprimé
    pour cela:
    Mettre le classeur sans données confidentielles en pièce jointe sur « mon-partage.fr »
    et faire un clic droit-coller le raccourci dans votre message


     Michel
    0
  7. caillasse147 Messages postés 71 Statut Membre
     
    Bonjour à tous, mon problème est déjà résolu grâce à Michel et Albkan ici présents, ils ont fait un gros travail sur mon fichier et je les en remercie.

    Je posterai ci-dessous les codes apportés par Michel qui ont pu m'aider à solutionner mon problème,

    Merci encore à vous deux,

    Bonne journée à tous,
    0
  8. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    erreur d'envoi, excusez moi

     Michel
    0