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 :

Problème à l'execution du code VBA : fenetre macro


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 48
    Par défaut Problème à l'execution du code VBA : fenetre macro
    Bonjour,

    J'ai une petite question qui me turlupine...Soyez indulgents, je débute en VBA

    A l'exécution du code suivant, une fenêtre s'ouvre me demandant de sélectionner une macro.... Et le code ne s'exécute pas du tout ! j'ignore totalement pourquoi !!

    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
     
    Sub Bouton1_QuandClic(contrainte)
     
    Dim minia As Integer
    Dim maxia As Integer
    Dim minib As Integer
    Dim maxib As Integer
    Dim a As Integer
    Dim b As Integer
     
    minia = 6
    maxia = 7
    minib = 3
    maxib = 5
     
    Randomize
    a = Int((maxia - minia + 1) * Rnd + minia)
    b = Int((maxib - minib + 1) * Rnd + minib)
     
     
    Cells(3, 1).value = a
    Cells(3, 2).value = b
     
    If Cells(a, b).value <> "" Then
     
    For c = 1 To 2
    For d = 3 To 5
     
    Call contrainte
     
    If contrainte = "OUI" Then
     
    Cells(a, b).value = Cells(c, 1).value
     
    Next d
    Next c
     
    end if
    end if
     
    End Sub
     
    Sub contrainte(c, d)
     
    If Cells(c, d).value = "OUI" Then
     
    contrainte = "OUI"
     
    End Sub

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 48
    Par défaut
    alors... mon problème avance : plus de problème avec la fenetre macro... En revanche, au clic sur le bouton, un message d'erreur "argument non facultatif" au niveau de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If contrainte = "OUI" Then

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut Dhumkazaar et le forum
    J'ai une petite question qui me turlupine... pourquoi les débutants veulent réinventer le VBA ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sub Bouton1_QuandClic(contrainte)
    Ce n'est pas une macro que tu crées, non ? C'est une macro qu'excel crée et qu'il lie au Bouton1 ? et tu lui colles un argument qui est le nom d'une macro sub. M'étonne pas qu'Excel fasse un kk nerveux .

    J'avoue que mes maigres connaissances du VBA ne me permettent de comprendre ce que tu veux faire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub contrainte(c, d)
    If Cells(c, d).value = ...Then contrainte = OUI"
    End Sub
    ??? Déjà, je ne suis pas sûr de ce que tu veux faire. Créer une macro alors que tu pourrait l'avoir directement...
    Regarde dans l'aide la différence entre Sub (macro qui effectue des actions) et Function (macro qui retourne un résultat)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function Contrainte(c as long, d as integer) as string
    If Cells(c, d).value = "OUI" Then Contrainte = "OUI"
    End Function
    Ça me semble toujours aussi redondant, mais chacun sa méthode.

    En épurant un peu ton code, voilà ce qu'il en ressort :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    If Cells(a, b).value <> ""Then
    For c = 1To2
    For d = 3To5
     
    If contrainte = "OUI"Then
    .........
    Next d
    Next c
     
    endif
    endif
    Si Excel comprend, c'est que c'est une nouvelle version dont je n'ai pas entendu parler !
    Tu ouvres une boucle (D), tu fais un test (le second If), tu clôtures ta boucle (next d), tu clôtures ton test.

    Il y en a déjà un qui voulait ouvrir plusieurs Sub et les finir par un unique End.

    Tu te dis débutant en VBA, alors commence par faire des exmples simples qui correspondent à ce que te dit l'aide.

    Une instruction qui à besoin d'un End (sub, Function, If, Select Case, whith...) est un bloc "insécable". Il peut contenir un ou plusieurs autres bloc, mais pas le début d'un autre.
    Les indentations ne servent pas "à faire joli". Elles permettent de s'y retrouver dans les différents blocs.
    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
    Sub Bouton1_QuandClic()
     
    Dim minia As Integer
    Dim maxia As Integer
    Dim minib As Integer
    Dim maxib As Integer
    Dim a As Long
    Dim b As Integer
     
    minia = 6
    maxia = 7
    minib = 3
    maxib = 5
     
    Randomize
    a = Int((maxia - minia + 1) * Rnd + minia)
    b = Int((maxib - minib + 1) * Rnd + minib)
     
    Cells(3, 1) = a
    Cells(3, 2) = b
     
    If Cells(a, b).Value <> "" Then
        For c = 1 To 2
            For d = 3 To 5
                If contrainte = "OUI" Then Cells(a, b).Value = Cells(c, 1)
            Next d
        Next c
    End If
    End Sub
    J'ai pas trop touché à ton code (je l'ai même pas testé), ne sachant pas quel en est le but. Juste corrigé les erreurs flagrantes.
    Mais avec les indentations, tu sais à chaque instructions où tu te trouves, dans quelle boucle, dans quel test.
    A+

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 48
    Par défaut
    je me serai bien lancé dans quelque chose de plus simple en effet, mais mon boss n'est pas de cet avis ! je ne suis pas du tout developpeur, je ne fais que la maintenance hardware dans ma boite.... ainsi que de la gestion de petites bdd, mais le vba connait pas !

    j'essaye d'avancer pour concevoir un outil capable de remplir une grille de planning semi aléatoirement (noms repartis dans une grille en fonction de critères, mais pas systématiquement...)

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut heuh!!!
    bonjour


    jai survoler ton code en deux milieme de seconde

    j'ai vu "sub contrainte blablabla

    et plus bas je vois ""if contrainte =oui""

    la deja tu a un probleme hihihihi

    une fonction n'est pas une variable tu dois certainement avoir cette erreur l'ors de l'apel a la sub contrainte



    renommes correctement te variables de facon a que l'on puissent mieux cerner tes intention dans ta macro


    au plaisir...
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut Dhumkazaar et le forum
    Si tu es "informaticien", faut rappeler que si l'informatique aide, elle ne décide pas.
    Le pseudo aléatoire, c'est une bonne blague : Tu sortiras toujours les mêmes séries de nombres, puisqu'il n'y a aucun hazard, tu n'introduis que des actions générées par du code.
    Et un planning demande une réflexion qu'un "chef" digne de ce nom ne devrait pas remettre au hazard. Même si c'est compliqué, pouvoir rime avec devoir, enfin normalement. Mais c'est plus facile de dire "c'est pas moi, c'est le programme'.

    Pour en revenir à ton problème, le VBA n'en est un : c'est plutôt sur l'algorithme qu'il faut travailler. Pour les instructions et la syntaxe, le forum t'aidera, mais pas pour savoir ce que tu veux faire.
    A+

Discussions similaires

  1. Problème de protection du code vba
    Par Bruno25 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 15/01/2008, 23h04
  2. Modifier Code VBA avec macro
    Par yadla dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 27/08/2007, 11h26
  3. [débutant]Code VBA ou Macro ?
    Par Sarune dans le forum VBA Access
    Réponses: 2
    Dernier message: 20/03/2007, 09h38
  4. Réponses: 2
    Dernier message: 06/06/2006, 10h50
  5. Problème d'execution de code dans un thread
    Par [Silk] dans le forum Langage
    Réponses: 2
    Dernier message: 06/02/2006, 13h49

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