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 création de boutons grâce a du code VBA [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2016
    Messages : 12
    Par défaut Problème de création de boutons grâce a du code VBA
    Bonjour à tous,

    Voila j'ai un problème, je suis en train de créer une "appli" grâce à vba. L'idée c'est qu'on remplit un userform, les infos sont rentrés dans une feuille excel.
    Mais je veux ajouter à chaque fois un bouton modifier et un autre supprimer à la fin de la ligne. Commençons par modifier. L'idée là c'est que le bouton récupère les infos dans le même userform comme ça on modifie.
    Seulement pour la première ligne pas de soucis le bouton est créé mais la deuxième j'ai une erreur :
    bibliothèque d'objets incorrecte ou contenant des références à des définitions d'objets introuvables
    voici mon code :
    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
     
    Dim Obj As Object
    Dim Code As String
     
    Sheets("Feuil3").Select
     
    Cells(x, 8).Select
    a = Rows(ActiveCell.Row).Top
    b = Columns(ActiveCell.Column).Left
    t = t + 1
    'crée le bouton
        Set Obj = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", _
        Link:=False, DisplayAsIcon:=False, Left:=b, Top:=a, Width:=66, Height:=20)
        Obj.Name = "Modif" & x
    'texte du bouton
        ActiveSheet.OLEObjects(1).Object.Caption = "Modifier"
        ActiveSheet.OLEObjects(1).Object.Font.Size = 8
     
    'Le texte de la macro
        Code = "Sub Modif" & x & "()" & vbCrLf
        Code = Code & "Call Tester" & vbCrLf
        Code = Code & "End Sub"
    'Ajoute la macro en fin de module feuille
        With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule
            .insertlines .CountOfLines + 1, Code
        End With
    Alors je pense que le problème viens du
    ActiveSheet.OLEObjects(1)
    parce que fut un temps ou j'avais pas d'erreur mais les propriétés du bouton n’était appliqué que sur le premier.
    J'avais alors essayé de mettre un compteur t à la place du 1.

    En passant j'ai trouvé ce code sur internet, surement sur ce forum d’ailleurs et je ne comprend pas tout donc si vous pouvez m'apporter quelques explications, je suis pas contre..

    Infos : le x est un compteur qui correspond au numéro de la ligne

    Merci beaucoup d'avance

    Baldo

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Ça ne répond pas à ta question, mais je me demande le but de mettre des boutons à chaque ligne...
    Tu pourrais ajouter des menus contextuels (click droit) pour ajouter/modifier/supprimer/... la ligne sur laquelle tu te trouves.

    Ça serait moins lourd que des composants graphiques et très facile à gérer.

  3. #3
    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 re
    re
    bonjour je suis l'idée de parmi

    ou alors au pire
    laisser1 seul bouton et le déplacer et le rendre visible avec l'évènement sélection change du sheet et l rendre invisible dans la sub "tester"

    et dans la sub tester traiter l'activecell
    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

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2016
    Messages : 12
    Par défaut
    Bonjour,

    D'abord merci de vos réponses.
    Alors effectivement j'ai pris le partie d'abandonner cette idée de boutons. J'ai préféré faire une cellule cliquable parce qu'effectivement c'est beaucoup plus simple. (C'est pour une tablette avec un stylet donc parmi il vaut mieux un double clique). De plus la fonction de suppression n'est pas nécessaire.

    Cependant j'ai de nouveaux problèmes. Mais avant je dois vous poser une question, serait-il possible de récupérer l'adresse d'une cellule qu'on double clique et de la transmettre à un sub que l'on appelle? Sinon je crée une sub par ligne (ça va devenir un peu le bazar mais bon .. ) C'est le partie pris pour l'instant est mon code ressemble à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Dim Code As String
     
    Sheets("Feuil3").Select
     
        Code = "Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)" & vbCrLf
        Code = Code & "Call ModifierLigne_" & x & " & Target.Cells(" & x & ",8)" & vbCrLf
        Code = Code & "Cancel = True" & vbCrLf
        Code = Code & "End Sub"
     
    'Ajoute la macro en fin de module feuille
        With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule
            .insertlines .CountOfLines + 1, Code
        End With
    le code généré est donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Call ModifierLigne_16 & Target.Cells(16,8)
    Cancel = True
    End Sub
    Sauf que sur la deuxième ligne il y a une erreur de syntaxe que je ne vois pas ..

    Et deuxième problème ça marche la première fois mais après il faudrait juste modifier cette sub et rajouter une nouvelle ligne "Call ....." pour chaque nouvelle ligne parce que sinon j'ai un beau "nom ambigu détecté".

  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 re
    re
    dans le this workbook directement je ferait cela moi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
    If Target.Column = 9 And Target.Row = 16 Then ModifierLigne_16 Target
    End Sub
    et ta sub en dur dans un module et non dynamique
    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 averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2016
    Messages : 12
    Par défaut
    Re

    Le problème c'est que j'ai plusieurs feuilles donc ça risque de se déclencher si je double clique dans une autre feuille ?

    Ensuite j'ai besoin de faire ça pour toutes le lignes : une petite image pour mieux comprendre ..
    Nom : Capture2.JPG
Affichages : 165
Taille : 60,9 Ko

    Donc comme on vois il faut que ça marche sur chaque ligne. ça donnerai ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
    numeroLigne = Target.Row
    If Target.Column = 8  Then ModifierLigne Target
    End Sub
    et comme ça je pourrais récupérer le numéro de la ligne. à transmettre à ma sub ModifierLigne (ce qui me permet d'en avoir qu'une seule et dans un module)
    Bon sauf que ça marche pas j'ai un "nombre d'arguments incorrect ou propriété incorrecte" à la compilation (est ce que c'est parce que j'ai enlevé le "target.row =...) ? D'ailleurs je comprend pas pourquoi c'est " then call ModifierLigne"

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

Discussions similaires

  1. [WM17] Création de bouton en ligne de code
    Par Trebor dans le forum Windev Mobile
    Réponses: 1
    Dernier message: 14/12/2012, 07h04
  2. Problème de création multiple de tableaux croisés dynamiques en VBA
    Par Dark Christou dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/04/2010, 15h58
  3. problème de création et de positionnement de bouton
    Par frisou65 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 21/08/2008, 16h28
  4. bouton d'action et code vba
    Par Homer091 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 16/05/2008, 10h29
  5. Réponses: 3
    Dernier message: 11/06/2006, 19h03

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