Ajouter un bouton en VBA
Résolu
Kuartz
Messages postés
852
Date d'inscription
Statut
Membre
Dernière intervention
-
Kuartz Messages postés 852 Date d'inscription Statut Membre Dernière intervention -
Kuartz Messages postés 852 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Mon code :
(Toutes les variables sont déclarées au préalable)
Il plante sur la ligne :
'L'indice n'appartient pas à la sélection'.... Je ne comprend pas sachant que j'ai utilisé des termes généraux 'ThisWorkbook', 'ActiveSheet'...
Merci d'avance pour votre aide.
Cordialement.
Mon code :
(Toutes les variables sont déclarées au préalable)
Set Obj = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", _
Link:=False, DisplayAsIcon:=False, Left:=200, Top:=100, Width:=100, Height:=35)
Obj.Name = "BoutonImprimer"
'Texte du bouton
ActiveSheet.OLEObjects(1).Object.Caption = "Imprimer"
'Le texte de la macro
Code = "Sub BoutonImprimer_Click()" & vbCrLf
Code = Code & "Call Tester" & vbCrLf
Code = Code & "End Sub"
'Ajoute la macro en fin de module feuille
With ThisWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule
.insertlines .CountOfLines + 1, Code
End With
Il plante sur la ligne :
With ThisWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule
'L'indice n'appartient pas à la sélection'.... Je ne comprend pas sachant que j'ai utilisé des termes généraux 'ThisWorkbook', 'ActiveSheet'...
Merci d'avance pour votre aide.
Cordialement.
A voir également:
- Ajouter un bouton en VBA
- Impossible d'ajouter un ami sur facebook - Guide
- Diagnostic bouton photo - Accueil - Outils
- Ajouter un compte whatsapp - Guide
- Ajouter un compte facebook - Guide
- Ajouter liste déroulante excel - Guide
4 réponses
Bonjour,
avez-vous fait ceci:
ajoutez une référence à "Microsoft Visual Basic for Applications Extensibility" (dans VBA, Outils / Références...).
avez-vous fait ceci:
ajoutez une référence à "Microsoft Visual Basic for Applications Extensibility" (dans VBA, Outils / Références...).
Pour plus de simplicité, voici mon fichier anonymé.
Sélectionnez une date dans la feuille "NATIONAL" (en violet) de la colonne A et cliquez sur JOURNAL en haut du fichier pour faire tourner la macro et constatez l'erreur.
Merci d'avance à ceux qui auront le courage et la gentillesse de m'aider.
Cordialement.
https://www.cjoint.com/c/EKfqZ0Irh4f
Sélectionnez une date dans la feuille "NATIONAL" (en violet) de la colonne A et cliquez sur JOURNAL en haut du fichier pour faire tourner la macro et constatez l'erreur.
Merci d'avance à ceux qui auront le courage et la gentillesse de m'aider.
Cordialement.
https://www.cjoint.com/c/EKfqZ0Irh4f
Bonjour,
voir ici la façon de créer un bouton:
https://forums.commentcamarche.net/forum/affich-32733666-bouton-qui-s-auto-detruit#top
voir ici la façon de créer un bouton:
https://forums.commentcamarche.net/forum/affich-32733666-bouton-qui-s-auto-detruit#top
Je pense que dans ton code imprimer, en mettant la propriété de ton bouton Visible à False, cela doit le faire!
Je n'ai pas essayé!
Je n'ai pas essayé!
Sub Imprimer()
MonBouton1.Visible = False
DL5 = ActiveSheet.Cells(Application.Rows.Count, 1).End(xlUp).Row
With ActiveSheet.PageSetup
.PrintArea = Range("A1:M" & DL5).Address
End With
Application.SendKeys "^p"
End Sub
Il veut pas... 'Objet requis' sur la ligne :
MonBouton1.Visible = False
Bizarre qu'il n'existe pas de code pour décocher la case directement en créant le bouton... Je n'en trouve pas sur le net.
Petite question de débutant qui me pose problème depuis quelques temps déjà qui n'a rien à voir mais si tu peux me filer un tout petit coup de main...
Comment faire pour faire entrer une variable dans une boucle?
Je m'explique voilà le code :
Mais bien sûr 'DL & i' ne veut rien dire en VBA...
Je voudrais créer un DL (donc dernière ligne) pour chaque feuille présente dans le classeur. Comment est-ce que je peux l'écrire?
Merci beaucoup d'avance.
Comment faire pour faire entrer une variable dans une boucle?
Je m'explique voilà le code :
For i = 3 To ActiveWorkbook.Sheets.Count DL & i = Sheets(i).Cells(Application.Rows.Count, 10).End(xlUp).Row" Next i
Mais bien sûr 'DL & i' ne veut rien dire en VBA...
Je voudrais créer un DL (donc dernière ligne) pour chaque feuille présente dans le classeur. Comment est-ce que je peux l'écrire?
Merci beaucoup d'avance.
Bonjour f894009,
En réfléchissant un peu, j'ai trouvé ma méthode à moi. Certes bien moins optimisée, donc je vais utiliser la votre. Mais je suis content d'avoir résolu mon problème tout seul quand même :)
Mon code complet :
Merci beaucoup pour votre aide !!
En réfléchissant un peu, j'ai trouvé ma méthode à moi. Certes bien moins optimisée, donc je vais utiliser la votre. Mais je suis content d'avoir résolu mon problème tout seul quand même :)
Mon code complet :
Sub TEST() Dim i As Integer Dim DL_i As Long Dim CA As Long CA = 0 For i = 3 To ActiveWorkbook.Sheets.Count CA = CA + Sheets(i).Cells(DL(i), 10).Value Next i MsgBox (CA) End Sub Function DL(j As Integer) DL = Sheets(j).Cells(Application.Rows.Count, 10).End(xlUp).Row End Function
Merci beaucoup pour votre aide !!
Je viens de cocher "Microsoft Visual Basic for Application Extensibility 5.3.
Mais malheureusement le résultat est le même...
Sub Supprimer_Ligne_Ajouter_Feuille() Dim NumeroJDA As String, NouvelOnglet As Worksheet Dim C As Range Dim D As Range Dim FeuilleOuColler As Worksheet Dim Trouve As Range, PlageDeRecherche As Range Dim Valeur_Cherchee As String, AdresseTrouvee As String Dim DL As Integer Dim DL2 As Integer Dim DL3 As Integer Dim Ligne As Integer Dim cellule As Range Dim Obj As Object Dim Code As String DL = Sheets("NATIONAL").Cells(Application.Rows.Count, 1).End(xlUp).Row JourCA = ActiveCell.Value Ligne = ActiveCell.Row If ActiveCell.Interior.Color <> RGB(128, 0, 128) Then MsgBox ("La sélection actuelle n'est pas de couleur violette et n'est pas donc pas considérée comme une date.") Exit Sub End If AdresseJour = ActiveCell.Address Valeur_Cherchee = Sheets("NATIONAL").Range(AdresseJour) Set PlageDeRecherche = Sheets("EXPORT").Columns(1) Set Trouve = PlageDeRecherche.Cells.Find(what:=Valeur_Cherchee, LookAt:=xlWhole) If Trouve Is Nothing Then If MsgBox("La date n'a pas été trouvée dans la feuille 'EXPORT', Continuer?", vbYesNo, "Rien dans EXPORT") = vbNo Then Exit Sub End If For i = DL To 11 Step -1 If Sheets("NATIONAL").Range("A" & i).Value = "" Then If Sheets("NATIONAL").Range("B" & i).Value = "" Then If Sheets("NATIONAL").Range("C" & i).Value = "" Then Rows(i).Delete End If End If End If Next i DL = Sheets("NATIONAL").Cells(Application.Rows.Count, 1).End(xlUp).Row Message: NumeroJDA = InputBox("Numéro JDA?") If NumeroJDA = "" Then Exit Sub End If If FeuilleExiste("JDA" & NumeroJDA) Then MsgBox ("Impossible de créer la feuille 'JDA" & NumeroJDA & "' car celle-ci existe déjà, entrez un autre JDA.") GoTo Message End If IndexFeuil = Sheets("EXPORT").Index Sheets.Add After:=Sheets(IndexFeuil) ActiveSheet.Name = "JDA" & NumeroJDA Sheets("NATIONAL").Activate For Each C In Sheets("NATIONAL").Range(Cells(Ligne + 1, 1), Cells(DL, 1)) If C.Interior.Color = RGB(128, 0, 128) Then Ligne2 = C.Row Range(Cells(Ligne + 1, 1), Cells(Ligne2 - 1, 23)).Copy Sheets("JDA" & NumeroJDA).Range("A5") Exit For End If Next Sheets("JDA" & NumeroJDA).Activate DL6 = Sheets("JDA" & NumeroJDA).Cells(Application.Rows.Count, 2).End(xlUp).Row For i = DL6 To 5 Step -1 If Sheets("JDA" & NumeroJDA).Range("A" & i).Interior.Color <> RGB(255, 0, 0) Then If Sheets("JDA" & NumeroJDA).Range("A" & i).Interior.ColorIndex <> xlNone Then Rows(i).Delete End If End If Next i Application.Union(Columns("A"), Columns("C:E"), Columns("L"), Columns("N"), Columns("Q:R"), Columns("T"), Columns("V")).Delete DL4 = Sheets("JDA" & NumeroJDA).Cells(Application.Rows.Count, 2).End(xlUp).Row For i = 1 To DL4 If Range("H" & i).Value <> "" Then Range("J" & i).Value = Range("H" & i).Value - Range("I" & i).Value End If Next i Sheets("JDA" & NumeroJDA).Range("A1") = JourCA With Sheets("JDA" & NumeroJDA).Range("B3") .Value = "JDA " & NumeroJDA & "******" .Font.Bold = True .Font.Size = 14 End With With Sheets("JDA" & NumeroJDA) .Columns(1).ColumnWidth = 10.29 .Columns(2).ColumnWidth = 23.57 .Columns(3).ColumnWidth = 2.57 .Columns(4).ColumnWidth = 23 .Columns(5).ColumnWidth = 2.43 .Columns(6).ColumnWidth = 5.71 .Columns(7).ColumnWidth = 5.71 .Columns(8).ColumnWidth = 5.29 .Columns(9).ColumnWidth = 4.29 .Columns(10).ColumnWidth = 6.29 .Columns(11).ColumnWidth = 18.57 .Columns(12).ColumnWidth = 18.14 .Columns(13).ColumnWidth = 7.29 End With Sheets("JDA" & NumeroJDA).Cells.Interior.Color = RGB(255, 255, 255) For Each cellule In Range(Cells(5, 1), Cells(DL4, 13)) If cellule <> "" Then cellule.Borders.Weight = xlThin cellule.HorizontalAlignment = xlLeft Next PiedDePage = "JDA " & NumeroJDA & "***" & "PAGE &P/&N" With Sheets("JDA" & NumeroJDA).PageSetup DL5 = Sheets("JDA" & NumeroJDA).Cells(Application.Rows.Count, 1).End(xlUp).Row .Zoom = False .FitToPagesTall = False .FitToPagesWide = 1 .Orientation = xlLandscape .LeftHeader = "&""-,Gras""JDA " & NumeroJDA & "***PAGE &P/&N" .PrintArea = Range("A1:M" & DL5).Address End With Sheets("JDA" & NumeroJDA).Cells(DL4 + 1, 10) = Application.WorksheetFunction.Sum(Range(Cells(5, 10), Cells(DL4, 10))) Else '**** AdresseTrouvee = Trouve.Row For i = DL To 11 Step -1 If Sheets("NATIONAL").Range("A" & i).Value = "" Then If Sheets("NATIONAL").Range("B" & i).Value = "" Then If Sheets("NATIONAL").Range("C" & i).Value = "" Then Rows(i).Delete End If End If End If Next i DL = Sheets("NATIONAL").Cells(Application.Rows.Count, 1).End(xlUp).Row Message2: NumeroJDA = InputBox("Numéro JDA?") If NumeroJDA = "" Then Exit Sub End If If FeuilleExiste("JDA" & NumeroJDA) Then MsgBox ("Impossible de créer la feuille 'JDA" & NumeroJDA & "' car celle-ci existe déjà, entrez un autre JDA.") GoTo Message2 End If IndexFeuil = Sheets("EXPORT").Index Sheets.Add After:=Sheets(IndexFeuil) ActiveSheet.Name = "JDA" & NumeroJDA Sheets("NATIONAL").Activate For Each C In Sheets("NATIONAL").Range(Cells(Ligne + 1, 1), Cells(DL, 1)) If C.Interior.Color = RGB(128, 0, 128) Then Ligne2 = C.Row Range(Cells(Ligne + 1, 1), Cells(Ligne2 - 1, 23)).Copy Sheets("JDA" & NumeroJDA).Range("A5") Exit For End If Next DL2 = Sheets("JDA" & NumeroJDA).Cells(Application.Rows.Count, 1).End(xlUp).Row DL3 = Sheets("EXPORT").Cells(Application.Rows.Count, 1).End(xlUp).Row For i = DL3 To 7 Step -1 If Range("A" & i) = "" Then If Range("B" & i) = "" Then If Range("C" & i) = "" Then Rows(i).Delete End If End If End If Next i DL3 = Sheets("EXPORT").Cells(Application.Rows.Count, 1).End(xlUp).Row With Sheets("EXPORT") For Each D In .Range(.Cells(AdresseTrouvee + 1, 1), .Cells(DL3, 1)) If D.Interior.Color = RGB(128, 0, 128) Then Ligne3 = D.Row .Range(.Cells(AdresseTrouvee + 1, 1), .Cells(Ligne3 - 1, 23)).Copy Sheets("JDA" & NumeroJDA).Cells(DL2 + 1, 1) Exit For End If Next End With Set PlageDeRecherche = Nothing Set Trouve = Nothing Sheets("JDA" & NumeroJDA).Select DL6 = Sheets("JDA" & NumeroJDA).Cells(Application.Rows.Count, 1).End(xlUp).Row For i = DL6 To 5 Step -1 If Sheets("JDA" & NumeroJDA).Range("A" & i).Interior.Color <> RGB(255, 0, 0) Then Rows(i).Delete End If Next i Application.Union(Columns("A"), Columns("C:E"), Columns("L"), Columns("N"), Columns("Q:R"), Columns("T"), Columns("V")).Delete DL4 = Sheets("JDA" & NumeroJDA).Cells(Application.Rows.Count, 1).End(xlUp).Row For i = 1 To DL4 If Range("H" & i).Value <> "" Then Range("J" & i).Value = Val(Range("H" & i).Value) - Val(Range("I" & i).Value) End If Next i Sheets("JDA" & NumeroJDA).Range("A1") = JourCA With Sheets("JDA" & NumeroJDA).Range("B3") .Value = "JDA " & NumeroJDA & "******" .Font.Bold = True .Font.Size = 14 End With With Sheets("JDA" & NumeroJDA) .Columns(1).ColumnWidth = 10.29 .Columns(2).ColumnWidth = 23.57 .Columns(3).ColumnWidth = 2.57 .Columns(4).ColumnWidth = 23 .Columns(5).ColumnWidth = 2.43 .Columns(6).ColumnWidth = 5.71 .Columns(7).ColumnWidth = 5.71 .Columns(8).ColumnWidth = 5.29 .Columns(9).ColumnWidth = 4.29 .Columns(10).ColumnWidth = 6.29 .Columns(11).ColumnWidth = 18.57 .Columns(12).ColumnWidth = 18.14 .Columns(13).ColumnWidth = 7.29 End With Sheets("JDA" & NumeroJDA).Cells.Interior.Color = RGB(255, 255, 255) For Each cellule In Range(Cells(5, 1), Cells(DL4, 13)) If cellule <> "" Then cellule.Borders.Weight = xlThin cellule.HorizontalAlignment = xlLeft Next PiedDePage = "JDA " & NumeroJDA & "***" & "PAGE &P/&N" With Sheets("JDA" & NumeroJDA).PageSetup DL5 = Sheets("JDA" & NumeroJDA).Cells(Application.Rows.Count, 1).End(xlUp).Row .Zoom = False .FitToPagesTall = False .FitToPagesWide = 1 .Orientation = xlLandscape .LeftHeader = "&""-,Gras""JDA " & NumeroJDA & "***PAGE &P/&N" End With Range("A5:M" & DL5).Select Sheets("JDA" & NumeroJDA).Sort.SortFields.Clear Sheets("JDA" & NumeroJDA).Sort.SortFields.Add Key:=Range("A5:A" & DL5), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("JDA" & NumeroJDA).Sort .SetRange Range("A5:M" & DL5) .Header = xlGuess .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Sheets("JDA" & NumeroJDA).Cells(DL4 + 1, 10) = Application.WorksheetFunction.Sum(Range(Cells(5, 10), Cells(DL4, 10))) End If Set Obj = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", _ Link:=False, DisplayAsIcon:=False, Left:=600, Top:=10, Width:=100, Height:=35) Obj.Name = "BoutonImprimer" Sheets("JDA" & NumeroJDA).Select 'Texte du bouton ActiveSheet.OLEObjects(1).Object.Caption = "Imprimer" 'Le texte de la macro Code = "Sub BoutonImprimer_Click()" & vbCrLf Code = Code & "Call Tester" & vbCrLf Code = Code & "End Sub" 'Ajoute la macro en fin de module feuille With ThisWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule .insertlines .CountOfLines + 1, Code End With Range("A5").Select End Sub Sub Tester() DL5 = ActiveSheet.Cells(Application.Rows.Count, 1).End(xlUp).Row With ActiveSheet.PageSetup .PrintArea = Range("A1:M" & DL5).Address End With Application.Dialogs(xlDialogPrint).Show End SubEt le code plante bien sur la ligne :