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 :

VBA Fonction IF


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 19
    Par défaut VBA Fonction IF
    Bonjour à tous,

    Voilà, j’aimerai développer , dans un de mes tableau excel, une macro, associée à un bouton :

    Si la case D8 est remplie, c’est parfait, on passe à la condition suivante
    Sinon, message d’erreur « veuillez selectionner vos initiales »

    Ensuite, Si la case E14 est remplie, alors la case F14 doit etre remplie, la case L14doit etre <>0 et les cases GHIJK 35 doivent être égales à 1 (et cela pour les lignes 14 à 33)
    Si ce n'est pas le cas, message d’erreur « veuillez vérifier vos activités et vos entrées temps »
    Par contre, si la case E14 n’est pas remplie, alors la case F14 est vide et la case L14 doit être =0

    Si tout est vérifié, la macro enregistre le fichier et ferme le classeur.

    Je suppose qu'il faut utiliser la fonction IF et une boucle...cependant, je suis nu gros débutant...

    Merci de m’aider,

    Cordialement

  2. #2
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Salut Bykeman (fan de bike ?)

    Bienvenue au forum :

    En vitesse ta solution pourrait être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    if Range("D8").value = "" then
      Msgbox.....
     else
      for line = 14 to 33
      If Range("E" & line).value <> "" then
        if Range("F" & line).value = "" or Range("L" & Line).value = 0 Or Range("G" &line).value <> 1 Or Range("H" &line).value <> 1 Or Range("H" &line).value <> 1  Or Range("I" &line).value <> 1 Or Range("J" &line).value <> 1 Or Range("K" &line).value <> 1  then
           Msgbox.....
       endif
     next line
    endif
    NB : je n'ai pas compris ton 35 après HGIJK, car s'il est juste, ta conbdition ne doit pas etre dans la boucle des lignes 14 à 33

  3. #3
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 19
    Par défaut
    Merci de ta réponse ( et je suis un ancien fan de bike )

    Par contre, ce que je souaites pour les lignes HGIJK, c'est que si la colonne E est remplie, alors au moins une des cellule HGIJK 35 doit être égale à 100%...

    Le mieux c'est que je te montre mon tableau.. quel est le moyen le plus simple?

    En tout cas, encore merci d'avoir passer un peu de temps sur mon problème

  4. #4
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 19
    Par défaut
    Après avoir remodelé mon tableau, Je pense ne plus être moin de la solution! Par contre, comment faire arreter la macro automatiquement après l'affichage d'un message d'erreur? (je voudrai un équivalent du "stop" qui se trouve sous ma première msgbox, car ce stop ne fonctionne pas, et la macro me lance le débogeur a chaque fois...)

    Si aucnu message d'erreur, la macro enregristre le fichier, sinon, la mcro s'arrete après le message d'erreur
    voici mon 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
    25
    26
    27
    Sub Envoyer_click() 
     
    If Range("j4" ).Value = "" Then 
    MsgBox "Veuillez sélectionner vos initiales" 
    Stop 
    Else 
      For Line = 10 To 29 
            If Range("k" & Line).Value <> "" Then 
                If Range("l" & Line).Value = "" Then 
                MsgBox "Veuillez vérifier vos thèmes" 
     
                    ElseIf Range("r" & Line).Value = 0 Then 
                    MsgBox "Veuillez vérifier vos entrées temps" 
     
                        ElseIf Range("m31" ) <> 1 Or Range("n31" ) <> 1 Or Range("o31" ) <> 1 Or Range("p31" ) <> 1 Or Range("q31" ) <> 1 Then 
                        MsgBox "Veuillez vérifier vos entrées temps" 
     
                End If 
            End If 
     
     Next Line 
     
    ActiveWorkbook.saveas Filename:=Range("c1" ) & "\DT" & Range("u5" ) & ".xls" 
     
    End If 
     
    End Sub

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

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    B'jour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Range("j4" ).Value = "" Then 
    MsgBox "Veuillez sélectionner vos initiales" 
    Exit Sub

  6. #6
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 19
    Par défaut
    Merci God et Fring, tout marche à la perfection!!!!

    Mais j'a une dernière petite question:
    J'aimerai que la personne qui ouvre le fichier ai juste accès au tableau (aucune barre d'outils, aucun ccès a la barre de menu etc....) Comment faire?

    Merci encore

  7. #7
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut


    Puis-je te suggérer de cloturer ce post et de faire un nouveau pour ta question
    Mais j'a une dernière petite question:
    J'aimerai que la personne qui ouvre le fichier ai juste accès au tableau (aucune barre d'outils, aucun ccès a la barre de menu etc....) Comment faire?
    Cela rendra plus exploitable la fonction de recherche sur le forum après.

    Merci de cloturer ce post-ci par

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

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Juste une question avant de proposer une solution, faut-il que l'utilisateur puisse sauvegarder le classeur ? Si oui par quel moyen comptes-tu le faire si plus aucune barre d'outils ? On ferme le classeur comment, par la petite croix ?

  9. #9
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 19
    Par défaut
    Le fichier sera automatiquement sauvegardé via la précédente macro

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

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Tu peux tester ceci :

    Codes à insérer dans un 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
    Dim Cbar As CommandBar
     
    Sub Cbar_off()
        For Each Cbar In CommandBars
            Cbar.Enabled = False
        Next
    End Sub
     
    Sub Cbar_on()
        For Each Cbar In CommandBars
            Cbar.Enabled = True
        Next
    End Sub
    Codes à insérer dans ThisWorkbook
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Cbar_on
    End Sub
     
    Private Sub Workbook_Open()
    Cbar_off
    End Sub
    PS : Godzestla à raison, évite de poser différentes questions dans un même post pour différentes raisons, notamment la réponse peut intéresser d'autres personnes qui ne la trouveront jamais en effectuant une recherche vu que cette question/réponse est noyée dans un autre sujet

  11. #11
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Un exemple (vous pouvez aussi mettre ce code également dans ThisWorkBook avec : Sub WorkBook_Open() )

    Ici on utilise une feuille nommée "Menu" qui comprend les boutons par exemple : Lancer le traitement et Quitter et la procédure "Sub Quit_Appli()" est affectée à ce dernier. Elle enregistre le fichier et rétablit les Barres d'outils, de menus etc...)

    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
    Sub Auto_Open()
    CommandBars.ActiveMenuBar.Enabled = False
     
      Dim CmdB As CommandBar
      For Each CmdB In Application.CommandBars
      If CmdB.Type <> msoBarTypeMenuBar Then CmdB.Enabled = False
      Next CmdB
          With Application
        .DisplayFullScreen = True
        .DisplayFormulaBar = False
        .CommandBars("Full Screen").Visible = False
        .DisplayStatusBar = False
       End With
        ActiveWindow.DisplayWorkbookTabs = False
        Application.EnableAutoComplete = False
        ActiveWindow.DisplayHeadings = False
     
    Sheets("Menu").Activate
     
    End Sub
    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 Quit_Appli()
     
    Dim CmdB As CommandBar
    For Each CmdB In Application.CommandBars
     If CmdB.Type <> msoBarTypeMenuBar Then CmdB.Enabled = True
    Next CmdB
     
        With Application
            .DisplayFormulaBar = True
            .DisplayStatusBar = True
     
        End With
        Application.DisplayFullScreen = False
        Application.CommandBars("Full Screen").Visible = False
        Application.WindowState = xlMaximized
        CommandBars.ActiveMenuBar.Enabled = True
        ActiveWindow.DisplayWorkbookTabs = True
        Application.EnableAutoComplete = True
        ActiveWindow.DisplayHeadings = True
     
    Sheets("Menu").Activate
    ActiveWorkbook.Save
    Application.Quit
    End Sub

    Remarque : Quelle que soit la façon de procéder, rien n'empêche un utilisateur d'ouvrir le fichier en empêchant le lancement du code.
    Il suffit d'ouvrir le fichier en maintenant la touche "Shift" enfoncée.

  12. #12
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 19
    Par défaut
    Les commandes marchent! J'avais peur que le tout s'applique à l'ensemble des fichiers excel mais en fait c'est bon!

    Merci les gens

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

Discussions similaires

  1. [VBA] fonction vba à l'ouverture d'un fichier access
    Par fabiolous dans le forum VBA Access
    Réponses: 3
    Dernier message: 18/05/2007, 16h27
  2. [VBA-E] Equivalent VBA :fonction " = Cellule"
    Par Xaphyr dans le forum Excel
    Réponses: 4
    Dernier message: 01/04/2007, 12h57
  3. [VBA]Fonction 'ajout' en vba sur une table
    Par rico63 dans le forum VBA Access
    Réponses: 15
    Dernier message: 28/03/2007, 16h56
  4. [VBA] Fonction non définie dans l'expression
    Par DREADY dans le forum VBA Access
    Réponses: 17
    Dernier message: 08/03/2007, 16h49
  5. [Excel VBA]fonction dans une cellule qui modifie une autre cellule
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 24/01/2007, 17h43

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