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 :

Inserer un switch dans une macro [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2010
    Messages : 125
    Par défaut Inserer un switch dans une macro
    Bonjour a tous,

    J'ai fait quelques recherches qui ont malheureusement ete infructueuses.

    J'ai ma macro et je veux y inserer un switch. Le probleme c'est que je ne sais pas comment faire.

    Dans tous les exemples que j'ai pu trouver, le switch etait code dans une fonction independante, donc avec la syntaxe Function...end Function, Ce qui fait que dans mon code ca me dit qu'il n'y a pas de End Sub.

    Voici ce que j'ai ecris.

    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
    Sub Preis()
     
     
    Dim STD As Worksheet
    Dim Datenbasis As Worksheet
    Dim C As Range, D As Range
    Dim PreisStunde As Integer
    Dim Kat As String
     
     
    Set STD = Worksheets("Stunden ohne Kaufl")
    Set Datenbasis = Worksheets("Datenbasis")
     
    LetzteZeile = Datenbasis.Cells(Rows.Count, 1).End(xlUp).Row
     
     Private Function PreisStunde(Kat As String) As Integer
        PreisStunde = Switch(Kat = "Z", "115", Kat = "1", "152", Kat = "2", "183", Kat = "3", "205", Kat = "4", "240", Kat = "5", "300")
        End Function
     
    For Each C In STD.Range("C4:C400")
        For Each D In Datenbasis.Range("A2:A" & LetzteZeile)
            If C.Value = D.Value Then
                C.Offset(0, 3).Value = D.Offset(0, 3).Value
                C.Offset(0, 4).Value = D.Offset(0, 1).Value
            End If
        Next
     
    C.Offset(0, 5).Value = PreiStunde(C.Offset(0, 4).Value) * C.Offset(0, 6).Value
    Next
     
    End Sub

  2. #2
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 96
    Par défaut
    Essaye avec une structure Select Case
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT CASE variable_a_tester
      CASE cas_1
       code à faire pour le cas 1
      CASE cas_2
       code à faire pour le cas 2
      CASE ELSE
       code à faire pour les autres cas
    END CASE
    je pense pas m'être trompé de tête ça doit être ça. Mais entre nous une recherche google aurait répondu à ta question

  3. #3
    Membre confirmé
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2010
    Messages : 125
    Par défaut
    Justement non. J'ai bien vu la fonction case mais c'etait un switch que je voulais utiliser.

    en attendant j'ai fait avec des elseIf

  4. #4
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 96
    Par défaut
    ...

    L'équivalent en C du Switch est Select Case en VB.
    Je ne vois pas ce qui t'empêche de l'utiliser dans ton cas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT CASE Kat
      CASE 'Z'
         PreisStunde = 115
      CASE 1
         PreisStunde = 152
    etc...
    END CASE

  5. #5
    Membre confirmé
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2010
    Messages : 125
    Par défaut
    Hmmm je le voyais pas comme ca.

    Parce que le cours de VBA de developpez.net mentionne l'existence d'une fonction switch.

  6. #6
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 96
    Par défaut
    Autrement j'ai pas tilté tout de suite sur ton erreur avec la fonction
    En gros ce que tu as fais dans ton code c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Début de la déclaration de ta procédure Preiss
     
    Début de la déclaration  de ta fonction PreisStunde
     
    Fin de la déclaration de PreisStunde
     
    Fin de la déclaration de Preiss
    Le problème ça vient de la programmation. Tu ne peux pas déclarer les choses de cette façon. En l'occurence quand tu as déclarer ta fonction, le compilateur demandait la fin de la déclaration de ta procédure.

    En temps normal pour déclarer une fonction et l'utiliser tu aurais du faire quelque chose similaire à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Début de la déclaration  de ta fonction PreisStunde
    Fin de la déclaration de PreisStunde
     
    Début de la déclaration de ta procédure Preiss
       Utilisation de ta fonction : Variable = PreisStunde(chaine de character)
    Fin de la déclaration de Preiss
    C'est plus clair ?
    Le switch tu peux l'utiliser directement dans le code, sans passer par la déclaration d'une fonction.

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

Discussions similaires

  1. Inserer saisie semi-automatique dans une macro
    Par Bib0ucH dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 21/08/2008, 14h45
  2. Inserer du code vba dans une macro
    Par gadget27 dans le forum Général VBA
    Réponses: 4
    Dernier message: 03/05/2007, 13h35
  3. Inserer des elements dans une map sans rangement ?
    Par Muetdhiver dans le forum C++
    Réponses: 3
    Dernier message: 07/09/2004, 11h09
  4. [JSP] [STRUTS] Switch dans une action
    Par babylone7 dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 28/07/2004, 15h21
  5. inserer des images dans une base de données
    Par alilou04 dans le forum Bases de données
    Réponses: 2
    Dernier message: 28/06/2004, 18h54

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