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 :

[EXCEL] Validation des données et enregistrement [Débutant(e)]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 18
    Par défaut [EXCEL] Validation des données et enregistrement
    Bonjour,

    j'ai un formulaire a faire sous excel et je peine un peu... Je ne sais pas vraiment si je suis au bon endroit, mais s'il vous plait aidez moi.
    Je dois au final avoir un fichier excel, qui servira de model.
    Avec des zones de saisie obligatoires.

    Ce que j'aimerais faire c'est d'une, bloquer l'enregistrement sur le model (ca j'y suis a moitié arrivé ) afin de ne pas écraser l'original.
    Et empecher tout enregistrement (même sous) tant que les zones demandés ne sont pas renseignés.
    C'est la que ca bloque, je ne vois pas du tout comment proceder (mais je peux vous assurer que j'ai cherché) et je suis débutant en programation. ( ca se trouve la création d'un module n'est même pas nécessaire)

    merci d'avance

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 18
    Par défaut
    Ca peut dépendre du format de fichier?
    Peut être que je me suis mal exprimé

    Je reformule ma question :

    Comment bloquer l'enregistrement total d'un fichier excel, tant que celui ci n'est pas completé?

    (la sortie du programme restant active biensur)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 18
    Par défaut
    Bon je cherche toujours...

    J'ai créer une macro qui s'execute correctement à premiere vu, mais j'ai des doute quand à certaine donnée que j'ai inseré ( save and save as)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Static Sub name()
     
    If Range("K38") = Empty Then
        Save = False
        SaveAs = False
        msg = "erreur"
        MsgBox msg
     
    End If
    End Sub

    Maintenant j'aimerai executer cette maccro automatiquement quand la personne tente d'enregistrer, j'ai débuter quelque chose sur "thisworkbook", mais je ne sais même pas si c'est bien la qu'il faut inserer la commande.

    Si quelqu'un peut m'aider... merci

    de toute maniere je continu à chercher et informerai de l'évolution

  4. #4
    Invité
    Invité(e)
    Par défaut


    C'est pas mal du tout, il faut bien mettre ton code dans "ThisWorkbook" !

    Dans l'évènement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    End Sub
    Gros problème c'est que ça va t'empècher toi également d'enregistrer les modifications si tu n'as pas remplie les cellules

    Sinon pour tester si certaines cellules sont bien remplies, voilà ce que j'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Set TabVal = Application.ActiveWorkbook.Sheets("Params").Range("ValObl")
      ' Vérification de la saisie
      For Each Cel In TabVal  ' Pour chaque cellule obligatoire
        If Sheets("NomFeuilleATester").Range(Cel).Value = 0 Then
          ' Si la valeur de la cellule est égale à VIDE, on affiche un message d'erreur
          Sheets("NomFeuilleATester").Range(Cel).Select
          Msgbox "Cette cellule n'est pas remplie !"
          Cancel = True
          ' On sort de la procédure
          Exit For
        End If
      Next
    J'ai également une feuille "Params" cachée, dans laquelle J'ai saisie les unes en dessous des autres toutes les références obligatoires.
    Cette zone de cellules obligatoires est nommée "ValObl"

    Voilà
    Fichiers attachés Fichiers attachés
    Dernière modification par Invité ; 21/11/2006 à 16h54.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 18
    Par défaut
    Ahhh je te remerci
    Je viens de tester ton fichier et effectivement c'est exactement ce que je veux

    Mais pour le moment je n'arrive pas à le faire fonctionner dans le miens, il m'affiche un message d'erreur ("erreur d'execution 1004....") et le debog me surligne ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set TabVal = Application.ActiveWorkbook.Sheets("Params").Range("ValObl")
    Je vais (essayer) voir pkoi.

    Encore merci

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 18
    Par défaut
    Bon je me suis permi de copier/coller ma feuille a la place de celle des zones obligatoire dans ton fichier.

    Le systeme marche, mis a part le fait qu'il m'affiche toujours une erreur, mais la procedure ne s'arrete pas pour autant....

    Je commence à voire la lumiere au bout du tunnel
    Je ne vois pas, par contre, à quoi correspond la commande "Sheets(1)" ...
    Si je me permet à penser, je dirai que c'est le moyen de définir la feuille, mais vraiment pas sur :/

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 18
    Par défaut
    Ouai ca fonctionne

    Le message d'erreur était du au fait que j'ai une zone obligatoire de moin que celle définit dans "Params". j'en ai rajouté une et ca passe

    Si tu pouvais m'expliquer comment tu fais pour définir ta zone "ValObl" ?

    (parce que il faut que je puisse supprimer une des zone obligatoire)

    Gros problème c'est que ça va t'empècher toi également d'enregistrer les modifications si tu n'as pas remplie les cellules
    Effectivement lol, a chaque fois je suis obligé de desactiver la procedure et les validations.

    Ah et j'allais oublier une partie tout aussi importante

    Parmi mes zones obligatoire, j'ai 2 cases à coché, dont l'une d'entre elle doit être lié à une cellule (si oui, inserer information suplémentaire dans la cellule lié)

    Donc je souhaiterai savoir comment faire pour lié, dans un premier temps, la case a coché à ma cellule, et par la suite rendre obligatoire la saisi de l'info sup. , si la case est coché.

    Mine de rien je commence à y prendre gout, mes yeux fixé sur toute ces lignes de code , je vois pas le temps passer ^^

    Thank

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 18
    Par défaut
    ca devient un monologue....

    J'ai réussi a modifier la longueur de la zone ValObl (j'ai eu du mal a voir d'ou ca venait et c'est en fait tout con...)

    mais mon autre probleme reste entier :s

  9. #9
    Invité
    Invité(e)
    Par défaut
    Rixou,

    Désolé pour le monologue, mais j'avais trop de boulot,
    impossible de consulter mes forums préférés

    Si tu pouvais m'expliquer comment tu fais pour définir ta zone "ValObl" ?
    Pour ça, tu sélectionnes la zone qui contient les valeurs obligatoires,
    Tu va dans le menu "Insertion" -> "Nom" -> "Définir"
    Là, tu rentre le nom que tu souhaite définir pour ta zone et OK

    Plus rapide, il suffit d'aller dans le rectangle en haut à gauche de ta feuille,
    ou est marqué la référence de la cellule active ! Tu saisi dedans le nom souhaité et "Entrée"


    Pour les cases à cocher.
    Tu fait un clique droit sur ton "CheckBox1" -> Propriété
    Dans la propriété "LinkCell" tu mets la cellule que tu veux liée.
    Il te suffit ensuite de tester cette cellule.

    Mine de rien je commence à y prendre gout, mes yeux fixé sur toute ces lignes de code , je vois pas le temps passer
    C'est clair qu'avec le VBA on peut faire tout un tas de trucs vraiments géniaux

    A+

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 18
    Par défaut
    Bonsoir Bruno,

    Désolé pour le monologue, mais j'avais trop de boulot,
    impossible de consulter mes forums préférés
    Tu es trop bon, tu t'excuses en plus... lol ne t'inquiete pas je m'en suis douté, mais bon c'est surtout que je ne pense pas que tu soit le seul sur ce forum :p
    J'avou que j'ai pas mal posté en peu de temps, mais j'ai soif d'apprendre


    Tu fait un clique droit sur ton "CheckBox1" -> Propriété
    donc si je veux appeler la case a cocher par le traitement, c'est "checkbox"...
    J'ai réussi avant de partir du taf à :

    - lier la case à cocher à ma cellule
    - et a modifier la zone "ValObl"

    J'ai juste eu le tps de faire quelque test concernant ma case a cocher, mais j'obtient pas ce que je veux...
    Et je pense pas que je puisse la rajouté au traitement précedent, j'ai donc créer une maccro a part sur la fonction "OnClick".
    Mais cette âne (c'est peut être moi l'ane...) m'affiche le message au moment ou je décoche la case et non quand je la coche...


    Merci encore pour ton aide c'est vraiment sympa, je verrai ca demain au boulot.

    A bientot

  11. #11
    Invité
    Invité(e)
    Par défaut
    Dans l'évènement "OnClick" il suffit de tester la valeur du CheckBox

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Private Sub CheckBox1_Click()
      If Me.CheckBox1.Value = True Then
        MsgBox "Tu as bien coché la case"
      End If
    End Sub
    Voilà

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 18
    Par défaut
    Il ne m'accepte pas le mot clé "Me"

    donc pour le moment j'ai mis ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Public Sub resto_Quandclick()
    If Sheets(1).Range("C2").Value = True Then
        MsgBox "Veuillez indiquer la ville !"
        Sheets(1).Range("I12").Select
        End If
    End Sub
    Est ce qu'il y a moyen d'inserer la boucle pour empecher la sauvegarde uniquement si la case a cocher est , coché et qu'il manque l'information suplémentaire dans la cellule lié? ou juste sur une action précise ?

    du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Sheets(1).Range("C2").Value = True Then
        If Sheets(1).Range("I12").Value = 0 Then
            SaveAsUI = False
    Je vais voir ca

  13. #13
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Rixou
    Il ne m'accepte pas le mot clé "Me"
    Désolé, je n'avais pas précisé que le code était à mettre dans la case à cocher.
    Clique droit sur la Case à Cocher -> Visualiser le Code
    Il faut dire aussi que j'utilise le CheckBox de la boite à outils "Boîtes à Outils controles"

    Citation Envoyé par Rixou
    donc pour le moment j'ai mis ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Public Sub resto_Quandclick()
    If Sheets(1).Range("C2").Value = True Then
        MsgBox "Veuillez indiquer la ville !"
        Sheets(1).Range("I12").Select
        End If
    End Sub
    C'est bon, si la cellule "C2" contient la valeur de ton CheckBox

    Citation Envoyé par Rixou
    Est ce qu'il y a moyen d'inserer la boucle pour empecher la sauvegarde uniquement si la case a cocher est , coché et qu'il manque l'information suplémentaire dans la cellule lié? ou juste sur une action précise ?

    du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Sheets(1).Range("C2").Value = True Then
        If Sheets(1).Range("I12").Value = 0 Then
            SaveAsUI = False
    Plus simple tu teste simplement si la case à cocher n'est pas cochée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    ' Si la case n'est pas cochée, on sort de la procédure de test
    If Sheets(1).Range("C2").Value = False then exit sub
    ....
    End Sub
    Voilà

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 18
    Par défaut
    Voila tout est nikel !

    Merci pour ton aide Bruno

    Donc le traitement au complet avec la case a cocher et tout donne :

    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
    Dim TabVal As Object, Cel As Object
     
    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
      Set TabVal = Application.ActiveWorkbook.Sheets("Params").Range("ValObl")
      ' Vérification de la saisie
      For Each Cel In TabVal  ' Pour chaque cellule obligatoire
        If Sheets(1).Range(Cel).Value = 0 Then
          ' Si la valeur de la cellule est égale à VIDE, on affiche un message d'erreur
          ' Et on empèche la fermeture de la feuille si réponse négative
          Sheets(1).Range(Cel).Select
          MsgBox "Vous avez oublié de saisir une valeur !"
          Cancel = True
          ' On sort de la procédure
          Exit For
        End If
        Next
        If Sheets(1).Range("H12").Value <> 0 Then Exit Sub
        If Sheets("Params").Range("C2").Value = False Then Exit Sub
            If Sheets("Params").Range("C2").Value = True Then
                    MsgBox "Veuillez indiquer la ville !"
                    Sheets(1).Range("I12").Select
     
        Cancel = True
        End If
     End Sub

    Mon premier traitement VBA

    Probleme résolu

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

Discussions similaires

  1. C#: Ouvrir un fichier Excel, ajouter des donneés, et enregistrer
    Par soufian1364 dans le forum Services Web
    Réponses: 4
    Dernier message: 24/03/2009, 14h12
  2. [EXCEL] Validation des données saisies - nouvelle Question :-)
    Par Paloma dans le forum Macros et VBA Excel
    Réponses: 39
    Dernier message: 29/11/2006, 13h28
  3. [Excel] Récupérer des données d'une base Access
    Par FoxDeltaSierra dans le forum Excel
    Réponses: 8
    Dernier message: 03/09/2005, 10h22
  4. Réponses: 3
    Dernier message: 25/07/2005, 09h40
  5. dbgrid AND validation des données
    Par samlerouge dans le forum Bases de données
    Réponses: 10
    Dernier message: 11/06/2004, 23h08

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