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 :

InsertLines : argument not optional


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 57
    Points : 46
    Points
    46
    Par défaut InsertLines : argument not optional
    Bonjour tout le monde,

    je dois insérer de nouvelles lignes dans une macro>
    Comme j'avais des soucis, j'ai pompé cet exemple sur le forum et mon bouquin de référence (VBA pour Excel 2003 de John Walkenbach) :
    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 AddSheetAndButton()
        Dim NewSheet As Worksheet
        Dim NewButton As OLEObject
     
    '   Ajouter le code de gestionnaire d'événements
        Code = "Sub CommandButton1_Click()" & vbCrLf
        Code = Code & "    On Error Resume Next" & vbCrLf
        Code = Code & "    Sheets(""Feuil1"").Activate" & vbCrLf
        Code = Code & "    If Err <> 0 Then" & vbCrLf
        Code = Code & "      MsgBox ""Impossible d'activer Feuil1.""" & vbCrLf
        Code = Code & "    End If" & vbCrLf
        Code = Code & "End Sub"
     
        With ActiveWorkbook.VBProject. _
          VBComponents(NewSheet.Name).CodeModule
            NextLine = .CountOfLines + 1
            .InsertLines NextLine, Code
        End With
    End Sub
    mon problème, c'est que je recoit le message 'Argument not optional' (oui, je bosse sur un excel in english ) et que je ne sais absolument pas pourquoi alors la référence Microsoft Visual Basic for Applications Extensibility 5.3. est bien active.

    Merci pour tout ce qui pourrait me mettre sur la voie

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    1. CodeName à la place de Name
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With ActiveWorkbook.VBProject.VBComponents(NewSheet.CodeName).CodeModule
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 57
    Points : 46
    Points
    46
    Par défaut
    Merci Mercatog,
    mais ca ne change rien, j' ai toujours cette alerte "argument not optional".
    et c'est Insertlines qui est surligne>

    Desole pour les accents, mais c'est un clavier QWERTY et j'ai pas de clavier numerique pour utiliser la touche alt.
    Merci

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    J'ai testé ce code et ça passe sans problème:
    Ajout d'une nouvelle feuille (NewSheet)
    Ajout d'un CommandButton (NewButton)
    Ajout du code lié à ce CommandButton
    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 AddSheetAndButton()
    Dim Code As String
    Dim NextLine As Integer
    Dim NewSheet As Worksheet
    Dim NewButton As OLEObject
     
    With ThisWorkbook
        'Ajout d'une feuille vierge
        Set NewSheet = .Worksheets.Add
        'Ajout d'un bouton à la faeuille
        Set NewButton = NewSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1")
        NewButton.Name = "CommandButton1"
        Set NewButton = Nothing
        'Ajouter le code de gestionnaire d'événements
        Code = "Sub CommandButton1_Click()" & vbCrLf
        Code = Code & "    On Error Resume Next" & vbCrLf
        Code = Code & "    Sheets(""Feuil1"").Activate" & vbCrLf
        Code = Code & "    If Err <> 0 Then" & vbCrLf
        Code = Code & "      MsgBox ""Impossible d'activer Feuil1.""" & vbCrLf
        Code = Code & "    End If" & vbCrLf
        Code = Code & "End Sub"
     
        With .VBProject.VBComponents(NewSheet.CodeName).CodeModule
            NextLine = .CountOfLines + 1
            .InsertLines NextLine, Code
        End With
        Set NewSheet = Nothing
    End With
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  5. #5
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 57
    Points : 46
    Points
    46
    Par défaut
    Merci Mercatog,

    c'est bien pour ca que je ne comprends pas !!

    Je suis effectivement parti avec cet exemple et qund je pose une apostrophe devant les lignes du WITH injectant la macro, tout passe sans probleme, creation d'onglet et de bouton. Mais c'est quand je veux inserer une macro que ca coince.
    J'ai relu 20 fois mon code et il me semble pas que j'ai fait une faute de recopie.

  6. #6
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Bonjour,
    J'ai relu 20 fois mon code et il me semble pas que j'ai fait une faute de recopie.
    Je te suggère de montrer ton code tel qu'il est maintenant, au cas où..
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

  7. #7
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 57
    Points : 46
    Points
    46
    Par défaut
    Je te suggère de montrer ton code tel qu'il est maintenant, au cas où..
    Oui, j'avais eu cette impression-la..
    Donc, j'ai tout effacé et recommencé...

    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
     
    Sub AddSheetAndButton()
    Dim Code As String
    Dim NextLine As Integer
    Dim F2 As Worksheet
     
    With ThisWorkbook
        Set NewSheet = ThisWorkbook.Sheets("Data")
        'Ajouter le code de gestionnaire d'événements
        Code = "Sub Macro_Beep()" & vbCrLf
        Code = Code & "    Beep" & vbCrLf
        Code = Code & "End Sub"
     
        With .VBProject.VBComponents(NewSheet.CodeName).CodeModule
            NextLine = .CountOfLines + 1
            .InsertLines NextLine, Code
        End With
    End With
    End Sub
    Et maintenant ca marche.
    Merci Mercatog.

    Mais comment dois-je faire pour que le copier dans This Worbook pour en faire une commande d'AutoOpen ? (Private Sub Workbook_Open() )

    Merci

  8. #8
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 57
    Points : 46
    Points
    46
    Par défaut
    Bon,
    et bien finalement je suis arrivé a mes fins.
    Je post ici mon résultat qui fonctionne si cela peut etre utile a quelqu'un

    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
     
    Sub AddSheetAndButton()
    Dim Code As String
    Dim NextLine As Integer
     
      With ThisWorkbook
        Code = "Sub Macro_Beep()" & vbCrLf
        Code = Code & "    Beep" & vbCrLf
        Code = Code & "End Sub"
     
        With .VBProject.VBComponents("ThisWorkbook").CodeModule
          NextLine = .CountOfLines + 1
            .InsertLines NextLine, Code
        End With
      End With
    End Sub
    et puis le meme en utilisant CreateEventProc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Sub AddSheetAndButton()
    Dim Code As String
    Dim NextLine As Integer
     
      With ThisWorkbook
        Code = Code & "    Beep" & vbCrLf
     
         With ActiveWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule
           NextLine = .CreateEventProc("Open", "Workbook")
           .InsertLines NextLine + 1, Code
         End With
      End With
    End Sub
    Mereci pour votre aide

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

Discussions similaires

  1. Réponses: 21
    Dernier message: 21/08/2014, 06h52
  2. Souci avec "Argument not optional"
    Par stujava dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 08/06/2012, 21h32
  3. [AC-2010] Erreur "Argument not optional"
    Par Tytelle dans le forum VBA Access
    Réponses: 2
    Dernier message: 26/03/2012, 15h51
  4. Réponses: 3
    Dernier message: 09/04/2009, 17h38
  5. Erreur : One or more output arguments not assigned
    Par adrian07 dans le forum MATLAB
    Réponses: 8
    Dernier message: 19/07/2008, 21h28

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