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 :

fonction pour donner des instructions


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 8
    Points : 4
    Points
    4
    Par défaut fonction pour donner des instructions
    Bonjour,

    J'ai un exercice a effectuer, et je dois crée une fonction (saisiePoste) qui demande à l'utilisateur du fichier de saisir une valeur pour chaque poste de dépenses, en suite je dois crée une macro qui appelle cette fonction. J'ai crée cela, ça fonctionne mais ma fonction est vraiment longue et redondante, y a-t-il un moyen de raccourcir cette fonction, si oui, comment ? Mon prof m'a parlé de concaténer mais je n'ai pas vraiment compris comment faire.
    De plus dans le TD suivant j'ai cette question "a. Créer une boucle qui va parcourir les lignes de chaque poste (5 à 9) et qui pour chaque ligne
    i. appelle la fonction « saisiePoste » en donnant en paramètre le nom du poste (contenu de la colonne A de la ligne parcourue)" Or si je fais une macro avec une boucle qui appelle cette fonction j'ai 25 boites de messages qui apparaissent, je ne sais pas comment faire pour dire à la macro d'appeler une seule partie de la fonction correspondant à la ligne, je ne sais pas si cela est possible où si je dois tout refaire. Merci de votre aide Nom : Capture d’écran 2018-11-13 à 10.35.25.png
Affichages : 229
Taille : 233,2 Ko

  2. #2
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par FaustineB Voir le message
    J'ai crée cela, ça fonctionne mais ma fonction est vraiment longue et redondante, il y a t'il un moyen de raccourcir cette fonction, si oui, comment ?
    Un code en copie d'écran, c'est quasiment inutilisable.
    Fais une copie de ton code, de préférence avec des balises CODE (l'icone #).

    De plus dans le TD suivant j'ai cette question "a. Créer une boucle qui va parcourir les lignes de chaque poste (5 à 9) et qui pour chaque ligne
    i. appelle la fonction « saisiePoste » en donnant en paramètre le nom du poste (contenu de la colonne A de la ligne parcourue)" Or si je fais une macro avec une boucle qui appelle cette fonction j'ai 25 boites de messages qui apparaissent
    A priori, ce qui est demandé pour la fonction, c'est de répondre à une question.
    Donc, ta boucle ne devrait afficher une nouvelle demande qu'après réponse à la demande précédente.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  3. #3
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Points : 1 562
    Points
    1 562
    Par défaut
    Bonjour,

    Et vous pouvez utiliser la fonction Application.InputBox avantageusement, car vous pouvez définir le type d’argument accepté

    Valeur Signification
    0 Une formule.
    1 Un nombre.
    2 Texte (une chaîne).
    4 Valeur logique (True ou False)
    8 Référence de cellule, sous la forme d’un objet Range.
    16 Une valeur d'erreur, telle que #N/A.
    64 Un tableau de valeurs.

    ça peut aider ....
    "Idéalement nous sommes ce que nous pensons. Dans la réalité, nous sommes ce que nous accomplissons." A.Senna
    et n'oubliez-pas de développer des .... sourires ^_^

  4. #4
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 8
    Points : 4
    Points
    4
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    Function saisiePoste() As Long
     
    Sheets("TD1").Select
     
    Do
    Range("E5").Select
    n = InputBox("donner le montant des dépenses du poste matièeres premières en 2012:", "saisie entier")
    If Not IsNumeric(n) Then
    MsgBox ("une valeur numérique est requise !")
    End If
    Loop Until IsNumeric(n)
    Range("E5").Value = n
     
    Do
    Range("E6").Select
    n = InputBox("donner le montant des dépenses du poste autres achats en 2012:", "saisie entier")
    If Not IsNumeric(n) Then
    MsgBox ("une valeur numérique est requise !")
    End If
    Loop Until IsNumeric(n)
    Range("E6").Value = n
     
    Do
    Range("E7").Select
    n = InputBox("donner le montant des dépenses du poste main d'oeuvre en 2012:", "saisie entier")
    If Not IsNumeric(n) Then
    MsgBox ("une valeur numérique est requise !")
    End If
    Loop Until IsNumeric(n)
    Range("E7").Value = n
     
    Do
    Range("E8").Select
    n = InputBox("donner le montant des dépenses du poste charges sociales en 2012:", "saisie entier")
    If Not IsNumeric(n) Then
    MsgBox ("une valeur numérique est requise !")
    End If
    Loop Until IsNumeric(n)
    Range("E8").Value = n
     
    Do
    Range("E9").Select
    n = InputBox("donner le montant des dépenses du poste intérêts en 2012:", "saisie entier")
    If Not IsNumeric(n) Then
    MsgBox ("une valeur numérique est requise !")
    End If
    Loop Until IsNumeric(n)
    Range("E9").Value = n
     
     
    End Function
     
     
     
     
    Sub renseignerNouvelleAnnée2()
    Dim result As Long
    result = saisiePoste
    End Sub
    Merci pour vos réponses

  5. #5
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Points : 1 562
    Points
    1 562
    Par défaut
    Et bien .... sans écrire le code, quelques pistes:

    1. Vous pouvez tout traiter par boucle je pense
    2. Définissez votre range par exemple Set SrcRng = Worksheets("TD1").Range("A4: E9").
    3. Vous parcourez les cellules de la 1ere colonne de votre range (sauf la 1ere ligne) pour définir votre intitulé de question (vous pouvez utiliser SrcRng.Rows.Count par exemple pour itérer: For RowI = 2 to SrcRng.Rows.Count ....)
    4. Vous mettez votre résultat sur la même cellule mais décalée de 1 ou plusieurs cellules (fonction offset)

    Bon courage
    "Idéalement nous sommes ce que nous pensons. Dans la réalité, nous sommes ce que nous accomplissons." A.Senna
    et n'oubliez-pas de développer des .... sourires ^_^

  6. #6
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup je vais essayer ça !

Discussions similaires

  1. fonction pour récupérer des données xml
    Par jeff29 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 16/06/2006, 15h46
  2. Réponses: 3
    Dernier message: 31/12/2005, 23h09
  3. fonction pour enlever des tags
    Par sunp dans le forum API standards et tierces
    Réponses: 14
    Dernier message: 19/12/2005, 20h47
  4. fonction pour charger des iframes
    Par rib dans le forum Langage
    Réponses: 2
    Dernier message: 03/12/2005, 14h27
  5. Réponses: 6
    Dernier message: 22/11/2005, 17h08

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