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 de syntaxe


Sujet :

Macros et VBA Excel

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 61
    Par défaut problème de syntaxe
    Bonjour,

    Je suis debutant et j'ai realise mon premier programme.
    Je pense que l'algorythe en lui-meme est pas trop mal par contre j'ai beaucoup de soucis pour interagir avec l'environnement excel. Malgre des recherches sur internet ma synthaxe n'est pas bonne pour les commandes suivantes:

    - effacer le contenu d'une feuille:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Worksheet("querry_results").Cells.Select
    Selection.ClearContents
    - partager des variable entre differents userforms (j'ai juste enlever private et mis public, est-ce suffisant?)

    - effacer la derniere ligne de donnees d'un tableau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Sheet("projecttasks").Row("65536").End(xlUp).Offset(0, 0).Select
    Selection.ClearContents
    - alerter l'utilisateur sur la presence de blanc dans un userform:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If Me.Txtprojectname.Text = "" Or Me.Txtprojectid.Text = "" Or Me.cbxprojectmanager.Text = "" Or Me.txtstartdateproject.Text = "" Or Me.txtenddateproject.Text = "" Or Me.txttaskhour = "" Or Me.Cbxdomain.Text = "" Then
        MsgBox "Complete the blank(s)"
        Exit Sub
        End If
    - et enfin je voudrais realiser une boucle de type "for each next" sur mes worksheets mais qui ne prendrait en compte qu'une partie de mes worksheets (je voudrais en exclure 5 ou 6).

    Si quelqu'un a une reponse, merci.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 51
    Par défaut
    Bonjour,
    - effacer le contenu d'une feuille:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Worksheets("querry_results").Cells.Select
    Selection.ClearContents
    ou mieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("Feuil1").Cells.ClearContents
    - partager des variable entre differents userforms (j'ai juste enlever private et mis public, est-ce suffisant?)
    Oui, normalement avec variable déclarée en tête d'un module standard.
    - effacer la derniere ligne de donnees d'un tableau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("projecttasks").Range("A65536").End(xlUp).EntireRow.ClearContents
    - alerter l'utilisateur sur la presence de blanc dans un userform:
    Comme ça je ne vois pas où ça cloche... Peut être une erreur de dénomination.
    - et enfin je voudrais realiser une boucle de type "for each next" sur mes worksheets mais qui ne prendrait en compte qu'une partie de mes worksheets (je voudrais en exclure 5 ou 6).
    Il faut ajouter un test sur le nom de la feuille du genre If Sheets(i) = "Tafeuille5" then ...

    Cordialement

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 61
    Par défaut
    Merci beaucoup pour ce coup de pouce, ca va vraiment m'aider a avancer pour tester le reste de mon code.
    Par contre la partie pour verifier les blancs dans le formulaire avait bien bien un problem de denomination mais malgre cette correction le code ne marche toujours pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    'test entery data: check blank
        If Me.Txtprojectname.Text = "" Or Me.Txtprojectid.Text = "" Or Me.cbxprojectmanager.Text = "" Or Me.txttaskstartdate.Text = "" Or Me.txttaskenddate.Text = "" Or Me.txttaskhour.Text = "" Or Me.Cbxdomain.Text = "" Then
        MsgBox "Complete the blank(s)"
        Exit Sub
        End If
    De plus le deboguage des precedentes bourdes en a debloque une autre, j'ai un formulaire avec une date de debut et une date de fin a renseigner. J'ai utiliser un control calendar mais ca ne marche pas pour differencier les deux textbox (je pense que mon code est incoherent):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Sub Calendar1_Click()
    If txttaskstartdate.Click Then
    txttaskstartdate.Value = Calendar1.Value
    ElseIf txttaskenddate.Click Then
    txttaskenddate.Value = Calendar1.Value
    End If
    End Sub
    Voila
    merci

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 61
    Par défaut
    bonjour,
    j'ai resolu le problem de la date grace a une autre discussion sur ce forum.
    Par contre je ne comprend toujours pas pourquoi le test pour les blancs ne marchent pas.
    Merci

  5. #5
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Citation Envoyé par bolloche Voir le message
    le test pour les blancs ne marchent pas.
    Si, au moins, tu nous disais ce qui ne marche pas, on pourrait, peut-être, essayer de t'aider.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 61
    Par défaut
    ok,
    pour ce premier code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     'test entery data: check blank
        If Me.Txtprojectname.Text = "" Or Me.Txtprojectid.Text = "" Or Me.cbxprojectmanager.Text = "" Or Me.txttaskstartdate.Text = "" Or Me.txttaskenddate.Text = "" Or Me.txttaskhour.Text = "" Or Me.Cbxdomain.Text = "" Then
        MsgBox "Complete the blank(s)"
        Exit Sub
        End If
    Quand toutes mes entrees sont vides (il suffit de une seule normallement) l'oridnateur passe a la ligne suivante sans afficher la messagebox qu'il devrait affficher. J'ai essayer ac textbox.value mais ca ne change rien.

    Cette partie du code fait partie d'une sequence de test pour savoir si l'utilisateru a bien rentre les donnees et mes lignes suivantes ne marchent pas non plus:

    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
    60
    61
    'test entery data
     
    'check the blanks
        If Me.Txtprojectname.Value = "" Or Me.cbxtaskstartdate.Value = "" Or Me.cbxtaskenddate.Value = "" Or Me.Txtprojectid.Value = "" Or Me.cbxprojectmanager.Value = "" Or Me.Cbxdomain.Value = "" Then
        MsgBox "Complete the blank(s)"
        Exit Sub
        End If
     
    'Check the Date
        If CDate(cbxtaskenddate) < CDate(cbxtaskstartdate) Then
        MsgBox "Enter new date"
        Exit Sub
        Else:
        Date1 = Me.cbxtaskstartdate.Value
        Date2 = Me.cbxtaskenddate.Value
     
    'Check hours field is a number
       If Not Me.txttaskhour.Value.IsNumber Then
        Exit Sub
        MsgBox "Hours field should be a number"
        End If
     
    'Check the coherence between the working-day and the number of hours
     
                'Compute working-day
                  Count = 0
     
                    For i = Date1 To Date2 Step 1
     
                    If Weekday(i, vbMonday) <= 5 Then
                    Count = Count + 1
     
                    Next i
     
                'Check UK holiday
                Sheets("UK_holiday").Select
     
                h = 0
                C = False
                Do
                    h = 1 + h
                    If Cells(h + 2, 1) >= Date1 And Cells(h + 2, 1) <= Date2 Then
                    Count = Count - 1
                    C = True
                    End If
                Loop While Cells(h + 3, 1) <> ""
     
                'Check workhours
                Workhour = Hours / Count
     
                If While workhours > 8 then
     
                MsgBox "Too much working hours for the actual date interval"
                MsgBox "Enter new Hour values or new date interval"
                If C = True Then
                MsgBox "Take care of the UK holiday"
                End if
                Exit Sub
                End if
     
        End If
    L'algorythe ne verifie pas les dates et me dit qu'il y a un next sans for.
    Est ce que quelqu'un voit des boulettes dans ma programmation.
    Merci

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 51
    Par défaut
    Re,

    Je n'ai pas plus la réponse qu'avant mais pour ton next sans for ça doit venir de là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    For i = Date1 To Date2 Step 1
     
                    If Weekday(i, vbMonday) <= 5 Then
                    Count = Count + 1
     
                    Next i
    car il manque un end if...

    Cordialement

  8. #8
    Membre éprouvé Avatar de golliat
    Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 104
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    'test entery data: check blank
        If Me.Txtprojectname.Text = "" Or Me.Txtprojectid.Text = "" Or Me.cbxprojectmanager.Text = "" Or Me.txttaskstartdate.Text = "" Or Me.txttaskenddate.Text = "" Or Me.txttaskhour.Text = "" Or Me.Cbxdomain.Text = "" Then
        MsgBox "Complete the blank(s)"
        Exit Sub
        End If
    Place une msgbox("debug" & " " & Me.Txtprojectname.text)
    juste avant ton if afin de savoir si le controle est bon et test en remplissant ou non le Txtprojectname.

    Sinon ton code est-il bien dans le module de l'userform?

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 61
    Par défaut
    merci, en fait il suffisait de deboguer le problem avec le if et end if ( souigne par spitnolan) pour que le reste marche.
    Par contre la partie pour verifier que le champs est bine un nobre ne marche pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    'Check hours field is a number
        If Not Me.txttaskhour.Value.IsNumber Then
        Exit Sub
        MsgBox "Hours field should be a number"
        End If
    De meme comment verifie ton que un champs a bien ete entre comme une date.

    Merci

  10. #10
    Membre éprouvé Avatar de golliat
    Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 104
    Par défaut
    Exit sub te fais sortir de ton code.
    C'est normal que tu ne voyes pas la msgbox.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 61
    Par défaut
    oui c pas tres malin par contre je suis toujours en suspend pour la date> Is number est la methode pour verifier un nombre?

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 51
    Par défaut
    Re,

    C'est bien de vouloir créer de nouvelles instructions en VBA mais tu ne t'appelles pas BILL...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not IsNumeric(Me.txttaskhour.Value) Then
    ou mieux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not IsDate(Me.txttaskhour.Value) Then
    Cordialement

  13. #13
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour, spitnolan..

    Les numériques peuvent revêtir plusieurs formes (on ne le répètera jamais assez).

    Essaye :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    toto = "22E4"
      If Not IsNumeric(toto) Then
        MsgBox toto & " n'est pas numérique"
      Else
        MsgBox toto & "est numérique"
      End If
    vu ?

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 51
    Par défaut
    Re,

    Merci UCfoutu mais essaies :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    toto = "22E"
      If Not IsNumeric(toto) Then
        MsgBox toto & " n'est pas numérique"
      Else
        MsgBox toto & "est numérique"
      End If
    ...
    Mais la véritable explication à ce comportement tient au fait que IsNumeric renvoie une valeur de type Boolean qui indique si une expression peut être interprétée comme un nombre et non si c'est un nombre...

    Tout dépend des valeurs testées mais tu n'auras pas manqué de remarquer que j'ai fait une autre proposition plus adaptée

    Cordialement

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 61
    Par défaut
    merci beaucoup pour votre aide

    bonne journee

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

Discussions similaires

  1. Problème de syntaxe - elements['x'].value
    Par Equus dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 22/02/2005, 11h22
  2. [Interbase] Problème de syntaxe SQL
    Par navis84 dans le forum InterBase
    Réponses: 4
    Dernier message: 22/12/2004, 17h07
  3. Problème de syntaxe
    Par Mister_FX dans le forum ASP
    Réponses: 5
    Dernier message: 30/06/2004, 10h01
  4. Problème de syntaxe ADO ...
    Par bendev dans le forum ASP
    Réponses: 2
    Dernier message: 15/04/2004, 14h38
  5. Réponses: 2
    Dernier message: 08/03/2004, 15h10

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