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 :

première macro vba


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 64
    Par défaut première macro vba
    Bonjour j'ai des soucis à me repérer au début...

    (au faite comment vous insérez vos fenêtre de code directement sur la fenêtre de discussion?)

    Je souhaite insérer une select case mais j'ai du mal à discerner fonction, procédure, argument, type, variable....

    Est-ce qu'une âme charitable pourrait me donner un exemple concret avec quelques explications simples que les tutos et le reste me devienne un peu plus compréhensible!!!

    Vraiment de a à z, les étapes d'application du module (d'ailleurs entre macro et module??)

    Merci, bonne journée

  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 Faruedde,

    la réponse à
    (au faite comment vous insérez vos fenêtre de code directement sur la fenêtre de discussion?)
    est ici (visible dans l'entete d'écran de ce forum, au dessus de la liste des question. merci de lire aussi les autre messages de cet entete avant d'aller plus loin. c'est très utile).

    http://www.developpez.net/forums/d55...mode-dedition/


  3. #3
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Par défaut
    bonjour

    j'espère que ce lien pourra t'aider

    http://excel.developpez.com/cours/?page=prog

    bon apres midi
    michel

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 64
    Par défaut
    Qu'est-ce qu'un objet alors pour arriver à distinguer les instructions des fonctions? Qu'elle est la différence?

    Je dévore les tutos et les relis, je pose pas mes questions au pif mais quand on a jamais eu quelqu'un en face de soit pour lui expliquer pendant une petite heure (je pense que ca ferait la différence) c'est assez difficile de démarrer.

    Quelle serait donc la syntaxe complète pour créer une select case par exemple...

    Est-ce une fonction?

    Merci à tous

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 560
    Par défaut
    Bonjour,

    Voici un exemple de module et de fonction avec select case
    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
     
    Function fonctionTest(num As Integer) As String
        Dim strRetour As String
        strRetour = "Choix"
        Select Case num
            Case 1: strRetour = "Choix1"
            Case 2: strRetour = "Choix2"
            Case 3: strRetour = "Choix3"
        End Select
        fonctionTest = strRetour
    End Function
     
    Sub test()
        MsgBox fonctionTest(1)
    End Sub
    si tu exécutes test avec différents parametre, tu verras qu'il t'afficheras un message en fonction de ton parametre

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 64
    Par défaut
    Désolé pour le burinage de question mais cela m'intéresse déjà énormément et j'aime pas buté sur les choses...

    Je commence à capter mais c'est à la base je pense que ca coince parce que affecté un type à une variable, mettre un . pour décrire une propriété ca va...

    Mais sub, function, créer une macro...C'est quoi le truc, on affecte une programmation (module) à une case d'excel?

    Une case d'excel est-elle un objet?

    Citation:
    La boucle est bouclée. Puisqu'une méthode est une Sub ou une Function écrite dans un module de classe, la syntaxe
    pour les instructions et fonctions (Sub et Function dans des modules standards) est très proche ! La seule différence
    étant l'objet. il n'y en a plus, puisqu'il n'y a plus de classe !
    Je capte pas

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 560
    Par défaut
    Bonjour,

    On affecte une macro ou un module ou une fonction à ec que l'on veut
    Soit des évenement prédéfini sur les feuille comme apra exemple, ouverture/fermeture de fichier
    Soit tu dessine un bouton sur ta feuille et tu affectes le dode derrière ce bouton (clique droit dans la barre du haut, boite outils, bouton)

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 64
    Par défaut
    Oui je vois, mais tu voit pourquoi don met-tu une fonction puis une procédure...

    Je pense que j'ai pas compris comment se servir ni a quoi correspondait ces fondamentaux???

    Par exemple j'essaie de créer une colonne B1 qui varie en fonction de la colonne A1 qui est composé d'une liste de validation.

    Donc j'écris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Select Case Range("A1")
        Case 1: Range("B1") = "toto"
        Case 2: Range("B1") = "titi"
        Case 3: Range("B1") = "lulu"
        Case 4: Range("B1") = "lala"
        Case 5: Range("B1") = "nono"
    End Select
    Biensur il manque des choses mais pourquoi mettre function et pas sub et pourquoi pas appliquer public ou private et Byval et Byref servent-ils...mais concrétement?

  9. #9
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 560
    Par défaut
    La différence entre un sub et une fonction.....
    Une fonction sert à te retourner un résultat précis en fonction du paramètre que tu lui fournis
    Un sub, c'est plus une moulinette qui exécute des instruction sans rien te retourner... La fonction peut aussi eéécuter une suite d'instruction mais ce n'est pas son role exacte

    En général, si tu as besoin d'exécuter plusieurs chose sans avoir besoin d'un code retour, un sub suffit
    Maintenant, si l'exécution de ton code est conditonné par le résultat d'un traitement, vaut mieux mettre ton traitement dans une fonction pour en récupérer le résultat

    Les passages de parametre permettent de réutilsier des traitements en fonciton de parametres qui sont passés

    Le ByVal et le ByRef permettent de passer un parametre par valeur ou référence. Pour résumer, le ByVal est la valeur directement alors que le ByRef est la référence (equivalent du pointeur en C)
    Si tu passes en valeur, la variable passé en parametre ne se modifiera pas alros que si tu passes en byref, elle sera modifié car le by ref modifie la valeur à l'endroit de l'allocation mémoire de ta variable
    Jen 'arrive pas à les utiliser réellement dans excel

    Attention, dans ton case, si tu mest Case 1, cela signifie qu'il va rentrer dans ce cas là si ta cellule A1=1

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 64
    Par défaut
    La définition de l'argument est flou surtout pour l'explication de ByVal et ByRef et j'ai l'impression que la procédure d'exemple ne fonctionne pas

    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
    Sub Test()
    Dim Donnee As Integer
    Donnee = 50
            MaProcedure_1 Donnee
        MsgBox Donnee
            MaProcedure_2 Donnee
        MsgBox Donnee
            MaProcedure_3 Donnee
        MsgBox Donnee
    End Sub
        'Passe la référence en argument.
    Sub MaProcedure_1(ByRef x As Integer)
        x = x * 2
    End Sub
        'Passe la valeur en argument.
    Sub MaProcedure_2(ByVal y As Integer)
        y = y * 2
    End Sub
        'ByRef est la valeur par défaut si non spécifiée.
    Sub MaProcedure_3(z As Integer)
        z = z * 2
    End Sub

  11. #11
    Membre Expert
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Par défaut
    Tu devra consulter les tutoriels et les lire attentivement.

    Une fonction est essentiellement une procédure qui retourne une valeur. Tu dois recueillir cette valeur de retour quelque part comme dans une variable ou un cellule Excel. On définit une fonction avec le mot Function.

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function Cube(nombre As Long) As Long
        Cube = nombre ^ 3
    End Function
    Un argument (que l'on nomme aussi parfois paramètre) d'une fonction, c'est chaque terme présent entre parenthèse. S'il y en a plusieurs, on les sépare par des virgules. Si le type de données du paramètre n'est pas donné, il sera de type Variant.

    Les procédures peuvent, elles aussi, avoir un ou plusieurs arguments.

    Une procédure exécute des opérations mais ne retourne pas de valeur. Par exemple lorsque tu enregistre une macro, celle-ci est débutée paret terminée parUn Select Case est une structure de contrôle conditionnelle. Il y a trois types de structures en programmation. La séquence, la répétitive et la conditionnelle.

    La structure séquentielle, comme son nom l'indique, est une suite d'instructions qui sont exécutées de la première jusqu'à la dernière, les unes à la suite des autres.

    La structure répétitive contient une ou plusieurs instructions qui sont exécutées autant de fois qu'il est indiqué dans le contrôle de test de la répétitive. Il existe plusieurs type de répétitives :
    • For... Next
    • For Each... Next
    • Do... Loop While
    • Do While... Loop
    • Do... Loop Until
    • Do Until... Loop
    • While... Wend


    La structure conditionnelle est, comme son nom l'indique, une condition ou plutôt une expression de type Booléen qui, si elle est respectée, retourne une valeur Vraie (True) sinon une valeur Fausse (False) et qui permet d'exécuter ou non une instruction ou une suite d'instruction. Les structures conditionnelles utilisées en VB et en VBA sont les suivantes:
    • If... Then... End If
    • If... Then... Else... End If
    • If... Then... ElseIf... Else... End If
    • Select... Case... (End Select)
    • et la fonction d'affectation conditionnelle IIF


    Pour la suite, je te suggère de suivre le lien suggéré par SilkyRoad.

  12. #12
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 560
    Par défaut
    ta procédure marche très bien

    tu passes 50 en parametre par référénce et ta valeur deviens 100 (c'est bien la valeur contenue dans l'allocation mémoire qui est modifié)

    Ensuite, tu repasses cette valeur modifié, donc 100 en valeur et la tu obtiens de nouveaux 100 .. Donc le passage a bien eu lieu en valeur, ce qui fait que ta valeur initiale de 100 n'est pas modifié

    Ensuite, tu refais un passage par référence, ce qui transforme ta variable de 100 à 200

    Ce que je ne comprends pas dans Excel, c'est pour quoi le passage par byref est par défaut car moi je trouve çà très dangereux.... en théorie, il serait préférable que la valeur par défaut soit byval
    Enfin, çà c'est mon avis.....

    Perso, je préfère les appels de fonction ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call MaProcédure1(Donnee)
    je trouve çà plus clair pour réperé les appels de fonction... mais apr_s, chacun ses habitudes

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 64
    Par défaut
    merci pour tes lumière Hélios77 et merci aussi zazaraignée, je lis attentivement les tutos mais n'ayant jamais touché a de la programmation, c'est dur...mais intéressant alors je persiste avec mes question!!!

    Et puis cela ne fait qu'un mois et on se prend vite au jeu et à bouffer du tuto on arrive à courir avant de savoir marché...

    Pour ByVal et Byref si je comprend bien par valeur en lui appliquant n'importe quelle addition etc... on gardera toujours la valeur initial alors que par ref on modifie la valeur...quel intérêt de venir modifier une valeur qu'on souhaiterait inchangé dans ce cas en insistant avec ByVal. Ce serait juste au cas où?

    ca devient de plus en plus claire, je savais qu'il fallait que je vous embête un peu.

    Dans tes explications zazaraignée c'est alors ce qu'on appel la séquence simple, les boucles et pour la select case ça serait un enchaînement de si!

    Le terme "argument" je le comprend pas bien malgré vos dires et les tutos justement...sinon je n'oserais vous poser la question!

  14. #14
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 560
    Par défaut
    Le passage par valeur est moins dangereux à mon sens mais nécessite de créer une fonction qui retourne une valeur et ensuite de la traiter pour affecter cette nouvelle valeur comme le code ci-dessous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    Function CasVal(ByVal num As Integer) As Integer
        CasVal = num + 1
    End Function
     
    Sub ParVal()
        Dim val As Integer
        val = 5
        val = CasVal(val)
        MsgBox val
    End Sub
    Par contre, le byRef peut te permettre de jsute écrire une procédure pour modifier ta valeur une fois pour toute

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Sub CasRef(ByRef num As Integer)
        num = num + 1
    End Sub
     
    Sub ParRef()
        Dim val As Integer
        val = 5
        Call CasRef(val)
        MsgBox val
    End Sub
    Ici les exemples sont simples.. mais on pourrait imaginer que la valeur passer en parametre subissent tout un tas de modifciation avant de gtrouver sa valeur finale
    Perso, je préfère travailler en ByVal pour être sûr de modifier ma variable quand je le désire... pareil, encore une question d'habitude
    Par inadvertance, un byref peut être très dangereux et source dennui pour chercher des heurs pourquoi une varibale change de valeur par miracle si tu as oublié de mettre byval

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 64
    Par défaut
    Pour répondre a ta petite question si je peux Helios, dans les tutos on nous dit ceci:
    Le mot clé Call est un mot clé facultatif, comme vous le verrez dans la cinquième syntaxe de base du présent
    document. Cependant, parfois, certains programmeurs utilisent ce mot clé pour appeler, transférer le contrôle, à une
    autre procédure. Cette procédure peut être une procédure Sub ou une procédure Function. Mais, dans tous les cas,
    elle ne peut renvoyer de résultat. Du coup, on se demande quel est vraiment son usage pour les fonctions... Et
    puisqu'une instruction (sub) est une fonction (function) qui ne renvoie pas de résultat, on peut se demander quel en
    est son usage également pour les instructions.
    Pourrais-tu m'éclairer sur ma fonction selcet case appliqué aux cellules?

    Merci

  16. #16
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 560
    Par défaut
    Je ne vois pas en koi tu m'as éclaire sur le call mais bon... je n'avais pas d'interrogations dessus...

    ré-explique ce que tu veux faire clairement

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 64
    Par défaut
    C'était juste au cas où...comme j'avais lu ça auparavant, je me suis que peut-être ça aurait pu t'apprendre des pti truc!

    J'ai 2 colonnes, A1 et B1 et je veux qu'en fonction de la liste déroulante de la case A1 s'inscrive une valeur dans la case B1.
    J'ai lu ton ex de select case mais j'y comprend pas tout...Qu'est ce que ton argument num (c koi un argument déjà...g pas capté dans les tutos) et pourquoi une fonction test. Et une procédure après ta fonction, pourquoi cette enchainement?

  18. #18
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 560
    Par défaut
    c'était jsute pour te montrer une utilisation de sub et de fonction et la structure du select case

    maintenant, pour ton truc de cellule, pourquoi ne le ferais pas tu sous forme de formule Excel directement ??

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 64
    Par défaut
    Parce que c'était pour coprendre le VBA et que tu m'explique un peu ta structure pour que j'essai de m'y mettre.

    EN formule excel ca donnerait un enchaînement de si. Si ma valeur est Maison1 alors il est inscrit 20%, s'il est marqué Maison2 (avec une liste validation de données dans A1) alors il est inscrit 50% etc... mais je c'est pas comment faire un enchainement de i et je pense qu'il est plus facile de faire une macro...quand on si connait

  20. #20
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 560
    Par défaut
    Voilà ce que tu peux faire

    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 traitement()
        Dim i As Integer
        i = 1
        While Trim(Sheets("Feuil1").Cells(i, 1).Value) <> ""
            Sheets("Feuil1").Cells(i, 2).Value = valCorrespond(Sheets("Feuil1").Cells(i, 1).Value)
            i = i + 1
        Wend
    End Sub
     
     
    Function valCorrespond(str As String) As String
        Dim strretour As String
        strretour = "ucune correspondance"
        Select Case str
            Case "Maison 1": strretour = "OK pour la Maison 1"
            Case "Maison 2": strretour = "OK pour la Maison 2"
        End Select
        valCorrespond = strretour
    End Function
    Ce code fonctionne si :
    - Les données sont sur Feuil1
    - Les données commencent dès la première ligne
    - Les données sont sur la première colonne
    - Pas de lignes vide entre 2 données

    Maintenant, tu peux renommer la feuil1, mettre les donnéesailleurs mais à toi d'adapter le code en fonction

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-2010] Première macro VBA
    Par fredcol dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 14/01/2011, 14h47
  2. Connaître la taille d'un module avec une macro VBA ou autre
    Par beegees dans le forum Général VBA
    Réponses: 15
    Dernier message: 22/11/2005, 09h47
  3. probleme de selection aleatoire sur excel avec macro vba
    Par guillaume sors dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/10/2005, 10h51
  4. Macro VBA sur Access
    Par beurnoir dans le forum Access
    Réponses: 3
    Dernier message: 12/10/2005, 16h46
  5. [SQL][MACRO VBA]Pb de syntaxe
    Par Stef.proxi dans le forum Langage SQL
    Réponses: 2
    Dernier message: 11/08/2004, 09h11

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