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 :

Calculs dans feuille après fermeture d'un UserForm [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut Calculs dans feuille après fermeture d'un UserForm
    Bonjour à tous,

    J'ai un formulaire (Uf1) qui me permet de remplir un tableau dans une feuille de calcul. Quand j'ai terminé ce travail, un clic droit permet de faire un calcul des données entrées.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            Cells(LIGNE, 11) = Cells(LIGNE, 7) * Cells(LIGNE, 8) + Cells(LIGNE, 9) * Cells(LIGNE, 10)
    Est-il possible de déclencher ce calcul à la fermeture de l'UserForm et comment ?

    Merci par avance pour votre aide
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  2. #2
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 914
    Points : 5 121
    Points
    5 121
    Par défaut
    et comment tu quitte ton usf?? bouton de commande que tu appelle "Quitter" ??
    insérer cette instruction fans ce bouton non ??
    --------------------------------------------------------------*****----------------------------------------------------------------------------
    Bonne Continuation & Plein Succès
    Notre seul pouvoir véritable consiste à aider autrui avec modestie
    ______________________________________________________
    Pour dire merci, cliquer sur et quand la discussion est résolue, penser à cliquer sur le bouton

  3. #3
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Bonjour BENNASR
    Oui désolé. Je ferme effectivement mon userform par un bouton quitter. Je n'ai pas essayer ton idée, je vais la tenter.
    Merci pour ta réponse

    ps : j'avais écorché ton pseudo
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  4. #4
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    Et même sans ajouter un bouton ?
    Juste en s'intéressant un peu aux évènements de l'objet utilisé (ici un userform, donc) ?
    Aide interne VBA --->> rubrique QueryClose, événement à lire.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  5. #5
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Bonsoir unparia,

    Désolé d'avoir tardé à te répondre. J'ai vu cette possibilité en parcourant le forum, mais je me demandais si mon cas été envisageable. Apparemment oui, donc je vais me pencher sur le sujet.
    Merci d'avoir pris le temps de me répondre.
    Cordialement et bonne fin de soirée
    René
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  6. #6
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Est-ce que l'évènement Terminate pourrait également faire l'affaire.
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  7. #7
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Il est bien plus sage d'utiliser l'évènement QueryClose.
    J'ignore (tu ne le précises pas) sur quelles données, situées où, s'effectuent les calculs dont tu parles
    Mais pourquoi poser une telle question alors que tu pourrais tout simplement en avoir le coeur net en essayant ? (tu l'aurais eue, cette réponse, non ?)

    PS : si veux comprendre pourquoi j'ai mis deux mots en rouge --->> regarde dans ton aide VBA ce qui est dit en "Remarques" à la rubrique Terminate, événement et demande-toi ce qui se passerait si ces "données" étaient des données connues du seul Userform ...
    Et comme on ne sait pas ce qu'elles sont et où elles sont .... !
    Ne me le précise toutefois pas de suite. Commence par essayer, ne serait-ce que par égard et savoir-vivre.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  8. #8
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Bonjour,

    Voilà j'ai fais ce code et ça fonctionne. Peut-être faut-il l'améliorer, mais je l'ai fait selon mes connaissances.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    Cancel = 0
    If CloseMode = 1 Then
    For LIGNE = 25 To 97 'Correspond au tableau qui va de la ligne 25 à à la ligne 97 de la feuille active
     
        If Cells(LIGNE, 6) <> "" Then
            Cells(LIGNE, 11) = Cells(LIGNE, 7) * Cells(LIGNE, 8) + Cells(LIGNE, 9) * Cells(LIGNE, 10) 'Multiplie le PU par le Nbre
        End If
        Next
        Cancel = 0
        End If
    End Sub
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  9. #9
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Questions de bon sens (à te poser à toi-même)
    1)A quoi sert ici ton Cancel = 0 (tant en ligne 3 qu'en ligne 11)? à rigoureusement rien.
    Un Integer non initialisé est déjà égal à 0
    Utiliser ce paramètre n'a de sens que si l'on veut annuler la sortie.
    2) A quoi sert de subordonner ces instructions au fait que CloseMode = 1 ?
    Lorsque je relis ton premier message, je ne vois pas en quoi le fait de quitter de telle ou telle autre manière changerait quoi que ce soit au besoin évoqué !

    Essaye s'il te plait par ailleurs d'indenter proprement tes lignes de code. L'indentation n'est pas un luxe. Bien faite, elle permet d'y voir clair !
    Voici ce que tu devrais écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
      Dim LIGNE as byte  ' --------------------->> prends cette habitude de typer systématiquement ! Ici as byte puisque inférieur à 255
      For LIGNE = 25 To 97 'Correspond au tableau qui va de la ligne 25 à à la ligne 97 de la feuille active
          If Cells(LIGNE, 6).Value <> "" Then
             Cells(LIGNE, 11).Value = Cells(LIGNE, 7).Value * Cells(LIGNE, 8).Value + Cells(LIGNE, 9).Value * Cells(LIGNE, 10).Value 'Multiplie le PU par le Nbre
         End If
      Next
    End Sub
    Il ne serait enfin pas idiot de préciser la feuille des cellules à modifier. A ne pas le faire, on court le risque que l'utilisateur ait navigué entre feuilles et que ton code s'applique de ce fait à des cellules placées ailleurs. (Mais cela, c'est le B.A.BA)

    Regarde les .Value que j'ai ajoutés --->> ils ne sont pas du luxe non plus (pour ton processeur entre autres). Prends également l'habitude de toujours préciser la propriété utilisée, plutôt que de laiser VBA deviner de laquelle il s'agit.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  10. #10
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Merci pour ta réponse. J'ai fait ce que je sais faire, je ne vais pas inventer ce que je ne sais pas, l'apprendre certes. C'est à cet effet que je viens sur ce forum, si j'avais la science infuse, je n'en aurai pas besoin. C'est peut-être le b a ba pour toi, mais pas pour tout le monde. Il est parfois utile de se mettre à la place de celui qui pose la question, la réponse peut être évidente pour certains, mais pas pour d'autres.
    J'apprécie toutefois les conseils que tu me donnes, même si la manière n'y est pas, on a toujours l'impression que cela t'énerve de répondre, mais bon ce n'est là qu'un sentiment personnel et qui n'engage que moi.

    Il ne serait enfin pas idiot de préciser la feuille des cellules à modifier.
    Dans mon cas, le formulaire ne s'affiche qu'à l'activation de la feuille, donc les données ne peuvent concernées que cette feuille.

    Je réitère mes remerciements et je te souhaite un agréable weekend
    Très cordialement
    René
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  11. #11
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    J'ai fait ce que je sais faire, je ne vais pas inventer ce que je ne sais pas, l'apprendre certes. C'est à cet effet que je viens sur ce forum, si j'avais la science infuse, je n'en aurai pas besoin. C'est peut-être le b a ba pour toi, mais pas pour tout le monde.
    C'est étrange. Je suis loin d'être un génie. Ce que je t'ai exposé ne m'a cependant jamais été exposé par d'autres. Je l'ai appris seul, sur la seule base de la lecture de mon aide interne VBA.
    Elle est claire, cette aide.
    même si la manière n'y est pas, on a toujours l'impression que cela t'énerve de répondre, mais bon ce n'est là qu'un sentiment personnel et qui n'engage que moi.
    nous ne sommes toutefois pas dans un salon de causerie. Ici, les états d'âme n'ont pas vraiment leur place. On va directement aux sujets et on évite de les noyer inutilement.

    Ceci étant précisé :
    Dans mon cas, le formulaire ne s'affiche qu'à l'activation de la feuille, donc les données ne peuvent concernées que cette feuille.
    n'est vrai QUE SI ton userform est en mode Modal (ce qui n'est précisé nulle part). Non modal, rien (absolument rien) n'empêcherait l'utilisateur de passer d'une feuille à l'autre pendant la "vie" du Userform

    Voilà.
    Maintenant et surtout : lorsque je réponds à un forumeur, ce n'est pas lui seul, que je renseigne, mais dans la foulée tout visiteur.
    A ne pas réagir (surtout si le demandeur présente un code qui "fonctionne" - et le tien fonctionnait, bien évidemment), je contribuerais tout simplement à perpétrer des erreurs, maladresses, errements, etc ... (un nouveau venu, de surcroît débutant, se contenterait du code montré, avec ses maladresses, voire ses risques éventuels).
    Ce faisant : je le fais de manière TECHNIQUE et pas "autrement".
    Bon week-end

    EDIT : pour ton information : la totalité de mes collaborateurs qui m'ont demandé de l'aide pour se préparer à des concours ont été admis dès leur première tentative. Il se trouve qu'ils ont tous été sacrément "secoués" pendant toute leur préparation. "Secoués" au point que certains m'en voulaient considérablement.
    Ils m'ont tous remercié in fine, hein, de les avoir sortis (y compris sans ménagements) de leur douce torpeur.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

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

Discussions similaires

  1. [XL-2007] Donner le focus à la feuille après un clic sur UserForm
    Par ESVBA dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 28/06/2017, 10h47
  2. Réponses: 6
    Dernier message: 06/07/2016, 13h51
  3. [Toutes versions] Donner le focus à la feuille après un clic sur UserForm
    Par ec dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 27/03/2015, 10h07
  4. [XL-2010] Prolbème de saisie dans une feuille après ouverture d'un UserForm
    Par thomasdu40 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 14/08/2012, 10h03
  5. [XL-2007] Activer protection feuille après fermeture de la grille de saisie Excel (formulaire)
    Par petitorco dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 26/06/2011, 11h54

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