Aide pour comprendre le language VBA

Résolu
celinetimothe Messages postés 34 Statut Membre -  
Lucass265 Messages postés 1 Statut Membre -
Bonjour,

J'ai trouvé sur un autre forum un fichier qui reprend exactement ce que je souhaite créer... Le problème c'est que c'est en programmation VBA... et je ne comprends pas...
J'ai essayé mais çe ne donne rien...

Pouvez-vous m'aider ?

Je suis débutant dans la programmation VBA...

D'avance merci,
Céline

7 réponses

  1. csi_bern Messages postés 72 Statut Membre 2
     
    Hello Céline,

    Quelle genre d'aide tu désires exactement? Si c'est pour t'expliquer le code que tu as trouvé, ça pourrait être utile de le voir.
    0
  2. celinetimothe Messages postés 34 Statut Membre 1
     
    Oui c'est pour m'aider à les comprendre....

    Ce que je souhaites faire c'est un questionnaire ou mes interviewes repondent sur le fichier et en validant leur questionnaire, les informations sont automatiquement stocké en feuille 2...

    Voici la liste de code que j'ai :

    Option Explicit
    Sub purge()
        Sheets("base").Activate
        Application.EnableEvents = False
            Range([ax10], [b65536].End(xlUp)).ClearContents
            Range("b10") = 0
    Call initialise
    End Sub
    Sub Stat()
        Sheets("Stat").Activate
        Range("b4").Activate
    End Sub
    Sub AfficherTout()
        Application.ScreenUpdating = False
            With Sheets("base")
            .Activate
            .Rows(8).ClearContents
            .Rows(9).Hidden = True
             On Error Resume Next
            .ShowAllData
             On Error GoTo 0
            .Application.Goto Range("a10"), Scroll:=True
            .Range("b8").Activate
            End With
        Application.EnableEvents = True
    End Sub
    Sub NouvFiche()
        Application.ScreenUpdating = False
        Range("BASE!B8:AX8").ClearContents
            With Sheets("Fiche")
                .Activate
                .Range("h14:h47").ClearContents                     'cases
                .Range("c9:c14").ClearContents                      'arrivée + liste
                .Range("f7:f11").ClearContents                      'Nom Prénom + NIR
                .Range("b50:h56").ClearContents                     'commentaires
                .Range("h3") = Range("base!b65536").End(xlUp) + 1   'compteur N° Fiche
                .Range("c3") = Date
            End With
    End Sub
    Sub initialise()
    Dim DerLig As Long
    DerLig = Cells.Find("*", , , , xlByRows, xlPrevious).Row + 1
            Application.ScreenUpdating = False
        Sheets("base").Activate
        
                Range("b9:ax" & DerLig).Name = "base"
                Range("b10:b" & DerLig).Name = "Fiches"
                Range("c10:i" & DerLig).Name = "Visites"
                '******************************************
                Range("i10:i" & DerLig).Name = "Col_i"
                Range("j10:j" & DerLig).Name = "Col_j"
                Range("k10:k" & DerLig).Name = "Col_k"
                Range("L10:L" & DerLig).Name = "Col_L"
                Range("n10:n" & DerLig).Name = "Col_n"
                Range("o10:o" & DerLig).Name = "Col_o"
                Range("p10:p" & DerLig).Name = "Col_p"
                Range("r10:r" & DerLig).Name = "Col_r"
                Range("s10:s" & DerLig).Name = "Col_s"
                Range("t10:t" & DerLig).Name = "Col_t"
                Range("u10:u" & DerLig).Name = "Col_u"
                Range("v10:v" & DerLig).Name = "Col_v"
                Range("w10:w" & DerLig).Name = "Col_w"
                Range("x10:x" & DerLig).Name = "Col_x"
                Range("z10:z" & DerLig).Name = "Col_z"
                Range("aa10:aa" & DerLig).Name = "Col_aa"
                Range("ab10:ab" & DerLig).Name = "Col_ab"
                Range("ac10:ac" & DerLig).Name = "Col_ac"
                Range("ae10:ae" & DerLig).Name = "Col_ae"
                Range("af10:af" & DerLig).Name = "Col_af"
                Range("ag10:ag" & DerLig).Name = "Col_ag"
                Range("ah10:ah" & DerLig).Name = "Col_ah"
                Range("ai10:ai" & DerLig).Name = "Col_ai"
                Range("aj10:aj" & DerLig).Name = "Col_aj"
                Range("ak10:ak" & DerLig).Name = "Col_ak"
                Range("am10:am" & DerLig).Name = "Col_am"
                Range("an10:an" & DerLig).Name = "Col_an"
                Range("ap10:ap" & DerLig).Name = "Col_ap"
                Range("aq10:aq" & DerLig).Name = "Col_aq"
                Application.Goto [a10], Scroll:=True
    End Sub
    Sub Note_aide() ' procédure
            Application.ScreenUpdating = False
        With Range("c1")
            If .Value = 1 Then
            Range("c1").Comment.Visible = True
            Range("d1").Comment.Visible = False
                .Value = 2
                Exit Sub
            End If
            If .Value = 2 Then
            Range("c1").Comment.Visible = False
            Range("d1").Comment.Visible = True
                .Value = 3
                Exit Sub
            End If
            If .Value = 3 Then
            Range("c1").Comment.Visible = False
            Range("d1").Comment.Visible = False
                .Value = 1
            End If
        End With
            Range("b8").Activate
    End Sub
    0
  3. celinetimothe Messages postés 34 Statut Membre 1
     
    Hello,
    Je te joint le fichier que j'ai trouvé...

    Pour ma part ce que je souhaite c'est faire un questionnaire ou mes interviewes repondrons aux questions et en validant, toutes les informations sont reprises dans la feuille 2...

    https://www.cjoint.com/?0Avk4jsxPn9
    0
  4. csi_bern Messages postés 72 Statut Membre 2
     
    Hello,

    Désolé, je ne peux pas ouvrir le fichier joint, il est bloqué par le pare-feu de ma boîte.
    C'est un gros boulot que de t'expliquer tout le code, mais on peut essayer par petits bouts. Certainement que d'autres utilisateurs pourront contribuer, car je n'ai plus fait de VBA depuis pas mal d'année.

    Sub purge() ' entre sub et end sub ce sont des procédures, c'est à dire que tu peux les appeler depuis un autre endroit du code ou simplement depuis [/contents/1103-introduction-a-la-notion-de-tableur Excel] comme macro
    ' Au fait, les apostrophes permettent d'écrire des commentaires
    Sheets("base").Activate ' Ici on active la feuille "base" sur laquelle on veut travailler
    Application.EnableEvents = False 'désactive temporairement les macros événementielles ce qui permet que la macro s'effectue jusqu'à la fin
    Range([ax10], [b65536].End(xlUp)).ClearContents ' ici on vide le contenu de chacune des cases marquée (End(xlUp) remonte jusqu'à la dernière ligne non vide)
    Range("b10") = 0 'met cette case égale à zéro
    Call initialise ' transfère le contrôle à la procédure initialise()
    End Sub
    


    Est-ce que c'est ce que tu souhaites, là je ne l'ai fait que pour une procédure.

    Un des moyens que j'utilise le plus pour me documenter c'est google. Dans la recherche du écrit simplement le langage de programmation suivit de ce qui te perturbe, genre VBA Call. Tu devrais déjà trouver pas mal de réponse.
    0
    1. celinetimothe Messages postés 34 Statut Membre 1
       
      Oui le type de description que tu viens de me faire me conviens très bien... si tu es au boulot, je comprends que tu n'es pas le temps... par contre si le film de ce soir ne te plait pas et que tu t'ennui j'aimerais bien que tu regardes le fichier...

      En tout cas merci...
      0
    2. celinetimothe Messages postés 34 Statut Membre 1
       
      Re moi,

      J'ai reussi a comprendre l'essentielle de ce que je voulais faire... A savoir reporter mes informations sur une autre vieille des que nous validons le questionnaire...

      Cependant, j'aimerais que ce bouton soit bloquer ou qu'il y ai un message si tous les zones ne sont pas complèté...

      Tu peux m'aider ?
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. csi_bern Messages postés 72 Statut Membre 2
     
    Hello,

    Une fonction pour toi:
    IsEmpty

    Du coup, lors du clique, tu peux afficher un message d'erreur si tous les champs ne sont pas remplis (il faut tous les tester, tu peux mettre IsEmpty(...) & IsEmpty(...) & ... then) ou alors exécuter la procédure.

    Ca te donnera un truc du genre:

    If IsEmpty(Range("b1")) & IsEmpty(Range("b2")) Then
        MsgBox "Remplir tous les champs svp."
    Else
        execution()
    End If
    


    Il serait également possible de désactiver le bouton, mais pour ça tu devrais accéder aux propriétés de ta worksheet, pour en capter les modifications lors de l'introduction de données, puis récupérer le nom de ton bouton.
    0
    1. celinetimothe Messages postés 34 Statut Membre 1
       
      Merci pour ton retour... je vais tester ta fonction et je te tiens au courant...
      0
    2. celinetimothe Messages postés 34 Statut Membre 1
       
      Je viens de tester... J'ai mis dans execution le nom de mon bouton mais ça marche pas...
      0
    3. csi_bern Messages postés 72 Statut Membre 2
       
      execution() est le nom de la procédure que tu souhaites lancer
      0
    4. celinetimothe Messages postés 34 Statut Membre 1
       
      Ha d'accord... J'ai enlevé execution et mis le nom de mon bouton mais ça marche pas...
      0
    5. csi_bern Messages postés 72 Statut Membre 2
       
      Ca n'a aucun rapport avec ton bouton. Tu met une des procédure de ton code que tu souhaites voir exécutée lorsque tu presses sur le bouton. Je ne sais pas exactement laquelle, mais par exemple AfficherTout() ou stat(). Tu peux utiliser le mot clé call avant, genre call AfficherTout() ou call Stat()
      0
  7. csi_bern Messages postés 72 Statut Membre 2
     
    Private Sub CommandButton1_Click()
    If IsEmpty(Range("b1")) & IsEmpty(Range("b2")) Then ' Si les champs b1 et b2 ne sont pas remplis, alors
        MsgBox "Remplir tous les champs svp." ' On envoie une boîte de message
    Else ' Sinon
        With Sheets("synt").Range("B1:B28") ' On exécute la procédure
            .Copy
            Sheets("Base").Range("A65536").End(xlUp).Offset(1, 0).PasteSpecial _
            Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
        End With
    
        ActiveWorkbook.Save
    End If
    End Sub
    
    0
    1. celinetimothe Messages postés 34 Statut Membre 1
       
      Si je veux lui dire "Si les données sur chiffrés" je met "If IsNumeric" ?
      0
    2. csi_bern Messages postés 72 Statut Membre 2
       
      Tout à fait
      0
    3. celinetimothe Messages postés 34 Statut Membre 1
       
      Hello,

      J'ai essayé mais encore une fois ça marche pas...

      J'ai voulu dire : "Si les cases sont numeric tu me transferes les données et si non tu envoies un message"... mais ça ne fonctionne pas... ma ligne If ressort en jaune...

      Tu peux regarder pourquoi ?

      Private Sub CommandButton1_Click()

      If IsNumeric(Range("N26")) & IsNumeric(Range("N32")) & IsNumeric(Range("N38")) & IsNumeric(Range("N44")) & IsNumeric(Range("N50")) & IsNumeric(Range("N56")) Then
      With Sheets("synt").Range("B1:B28")
      .Copy
      Sheets("Base").Range("A65536").End(xlUp).Offset(1, 0).PasteSpecial _
      Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
      End With
      Else
      MsgBox "Merci de remplir completement l'evaluation"

      End If

      ActiveWorkbook.Save

      End Sub
      0
    4. Polux31 Messages postés 7219 Statut Membre 1 204
       
      Bonjour,

      Remplace les "&" par "AND" dans le IF ...

      "&" sert à concaténer, "AND" est une condition en VB.
      0
    5. celinetimothe Messages postés 34 Statut Membre 1
       
      CA MARCHE !!!!
      MERCI MERCI MERCI !!!!!
      0
  8. Lucass265 Messages postés 1 Statut Membre
     
    Bonjour moi aussi j'ai besoin de comprendre le code vba suivant

    Columns(5).Clear

    Cells(1, 5).Value = "MoyMob"

    l = InputBox("inserer valeur")

    Range(Cells(l + 1, 1), Cells(l + 1, 1).End(xlDown)).Offset(0, 4).Select

    Selection.FormulaR1C1 = "=sum(r[" & -l + 1 & "]c2:rc2)"

    en fait il s'agit de calculer la moyenne mobile d'une serie, la première je comprends le role du l mais la seconde pourquoi (- l), quelqu'un peut m'expliquer.
    0