Mettre une macro dans un bouton avec VB6

Résolu
cs_petchy Messages postés 710 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 19 mai 2015 - 21 avril 2006 à 10:58
cs_petchy Messages postés 710 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 19 mai 2015 - 21 avril 2006 à 12:10
bonjour
MichelXLD m'a donner un code pour mettre un bouton à l'ouverture d'une feuille Excel que je crée par l'intermediaire de VB6,voici le code :
Private Sub Command2_Click()
Dim ExcelApp As Excel.Application
Dim Wb As Excel.Workbook
Dim Obj As Excel.OLEObject
Dim laMacro As String
Dim x As Integer


Set ExcelApp = CreateObject("Excel.Application")
ExcelApp.Visible = True
Set Wb = ExcelApp.Workbooks.Add(1)



Set Obj = Wb.Worksheets(1).OLEObjects.Add("Forms.CommandButton.1")
With Obj
.Left = 10
.Top = 5
.Width = 80
.Height = 30
.Object.Caption = "Supprimer"
End With
Mac = "call FichierCleaner"
laMacro = "Sub CommandButton1_Click()" & vbCrLf
laMacro = laMacro & Mac & vbCrLf
laMacro = laMacro & "End Sub"


With Wb.VBProject.VBComponents(ActiveSheet.Name).CodeModule
x = .CountOfLines + 1
.InsertLines x, laMacro
End With
End Sub
mais la ligne qui est en rouge me pose un soucis,en fait je voudrais mettre cette macro si dessous sur l'évenement click du bouton
Sub FichierCleaner()

Dim Donnees As Range
Dim NbreLignes&, Lig&, PremErreur&


Set Donnees = Range([b2], [e2].End(xlDown)) 'Définit le champ "Données"
NbreLignes = Donnees.Rows.Count 'Définit le Nbre de Lignes dans Donnéees

Application.ScreenUpdating = False 'Fige l'affichage (Gain temps)

With Donnees
.Copy 'Copie les formules du champ Donnees
.PasteSpecial Paste:=xlValues 'Fait un collage spéciale Valeurs
Application.CutCopyMode = False 'quitte le mode couper-coller
.Sort Key1:=Range("D2"), Order1:=xlAscending, Key2:=Range("C2") _
, Order2:=xlAscending, Header:=xlNo 'Effectue un tri
Columns("A:A").Delete Shift:=xlToLeft 'Supprime la colonne A
For Lig = 1 To NbreLignes 'boucle à partir de la ligne 1 de Donnees
If IsError(.Cells(Lig, 1)) Then 'si en colonne 1 il y a une erreur
'Détruit toutes les lignes à partir de l'erreur et jusqu'à la dernière ligne de Données
Rows(Lig & ":" & .SpecialCells(xlCellTypeLastCell).Rows.Row).Delete Shift:=xlUp
Exit For 'Sort de la boucle
End If
Next Lig
End With
Application.ScreenUpdating = True 'Réactive l'affichage

End Sub
Quelqu'un aurait il une idée pour intégré le code si dessus .
merci
@plus
petchy

6 réponses

econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 24
21 avril 2006 à 11:11
Salut,





Ben disons que çà sera un petit peu long. Il suffit juste de compléter la variable laMacro :





Private Sub Command2_Click()
Dim ExcelApp As Excel.Application
Dim Wb As Excel.Workbook
Dim Obj As Excel.OLEObject
Dim laMacro As String
Dim x As Integer
Set ExcelApp = CreateObject("Excel.Application")
ExcelApp.Visible = True
Set Wb = ExcelApp.Workbooks.Add(1)




Set Obj = Wb.Worksheets(1).OLEObjects.Add("Forms.CommandButton.1")
With Obj
.Left = 10
.Top = 5
.Width = 80
.Height = 30
.Object.Caption = "Supprimer"
End With
Mac = "call FichierCleaner"
laMacro = "Sub CommandButton1_Click()" & vbCrLf
laMacro = laMacro & Mac & vbCrLf

laMacro = laMacro & "End Sub" & vbCrLf









laMacro = laMacro & "Sub FichierCleaner()" & vbCfLf

laMacro = laMacro & "Dim Donnees As Range" & vbCfLf

laMacro = laMacro & "Dim NbreLignes&, Lig&, PremErreur&" & vbCfLf

laMacro laMacro & "Set Donnees Range([b2], [e2].End(xlDown)) 'Définit le champ ""Données""" & vbCfLf

laMacro laMacro & "NbreLignes Donnees.Rows.Count 'Définit le Nbre de Lignes dans Donnéees" & vbCfLf

laMacro laMacro & "Application.ScreenUpdating False 'Fige l'affichage (Gain temps)" & vbCfLf


laMacro = laMacro & "With Donnees" & vbCfLf

laMacro = laMacro & ".Copy 'Copie les formules du champ Donnees" & vbCfLf

laMacro = laMacro & ".PasteSpecial Paste:=xlValues 'Fait un collage spéciale Valeurs" & vbCfLf

laMacro laMacro & "Application.CutCopyMode False 'quitte le mode couper-coller" & vbCfLf

laMacro = laMacro & ".Sort Key1:=Range(""D2""), Order1:=xlAscending, Key2:=Range(""C2"") _" & vbCfLf

laMacro = laMacro & ", Order2:=xlAscending, Header:=xlNo 'Effectue un tri" & vbCfLf

laMacro = laMacro & "Columns(""A:A"").Delete Shift:=xlToLeft 'Supprime la colonne A" & vbCfLf

laMacro laMacro & "For Lig 1 To NbreLignes 'boucle à partir de la ligne 1 de Donnees" & vbCfLf

laMacro = laMacro & "If IsError(.Cells(Lig, 1)) Then 'si en colonne 1 il y a une erreur" & vbCfLf

laMacro = laMacro & "'Détruit toutes les lignes à partir de l'erreur et jusqu'à la dernière ligne de Données" & vbCfLf

laMacro = laMacro & "Rows(Lig & "":"" & .SpecialCells(xlCellTypeLastCell).Rows.Row).Delete Shift:=xlUp" & vbCfLf

laMacro = laMacro & "Exit For 'Sort de la boucle" & vbCfLf

laMacro = laMacro & "End If" & vbCfLf

laMacro = laMacro & "Next Lig" & vbCfLf

laMacro = laMacro & "End With" & vbCfLf

laMacro laMacro & "Application.ScreenUpdating True 'Réactive l'affichage" & vbCfLf


laMacro = laMacro & "End Sub" & vbCfLf





With Wb.VBProject.VBComponents(ActiveSheet.Name).CodeModule
x = .CountOfLines + 1
.InsertLines x, laMacro
End With
End Sub


Manu
3
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
21 avril 2006 à 11:11
Salut,

Si j ai bien compris tu veux remplacer le "Call FichierCleaner" Par le code de FichierCleaner.

Dans ce cas essaie ceci.

Mac = "Dim Donnees As Range" & _
"Dim NbreLignes&, Lig&, PremErreur&" & _
" Set Donnees = Range([b2], [e2].End(xlDown)) 'Définit le champ Données " & _
" NbreLignes = Donnees.Rows.Count 'Définit le Nbre de Lignes dans Donnéees" & _
" Application.ScreenUpdating = False 'Fige l'affichage (Gain temps)" & _
" With Donnees" & _
".Copy 'Copie les formules du champ Donnees" & _
".PasteSpecial Paste:=xlValues 'Fait un collage spéciale Valeurs" & _
"Application.CutCopyMode = False 'quitte le mode couper-coller" & _
".Sort Key1:=Range(""D2""), Order1:=xlAscending, Key2:=Range(""C2"") _" & _
", Order2:=xlAscending, Header:=xlNo 'Effectue un tri" & _
"Columns(""A:A"").Delete Shift:=xlToLeft 'Supprime la colonne A" & _
"For Lig = 1 To NbreLignes 'boucle à partir de la ligne 1 de Donnees" & _
"If IsError(.Cells(Lig, 1)) Then 'si en colonne 1 il y a une erreur" & _
"'Détruit toutes les lignes à partir de l'erreur et jusqu'à la dernière ligne de Données" & _
"Rows(Lig & "":"" & .SpecialCells(xlCellTypeLastCell).Rows.Row).Delete Shift:=xlUp" & _
"Exit For 'Sort de la boucle" & _
"End If" & _
"Next Lig" & _
"End With" & _
"Application.ScreenUpdating = True 'Réactive l'affichage" & _
"End Sub"
laMacro = "Sub CommandButton1_Click()" & vbCrLf
laMacro = laMacro & Mac & vbCrLf
laMacro = laMacro & "End Sub"

@+, Julien
Pensez: Moteur de Recherche, Réponse Acceptée
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
21 avril 2006 à 11:13
RE:

OUPS, je me suis totalement planter en fait j ai oublier les VBCRLF pour les retours a la lignes dans le code..... (ou la la faudrait que j ouvre les yeux un peu...)

> petchy: OUBLIE MON POST (meme si y avait de l'idee)
@+, Julien
Pensez: Moteur de Recherche, Réponse Acceptée
0
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
21 avril 2006 à 11:14
Salut;
Si tu remplaces "call FichierCleaner" par le code contenu dans ta Sub FichierCleaner, ça marchera peut-être.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
21 avril 2006 à 11:16
oups désolé econs & jrivet le temps que je valide vous aviez déjà répondu
0
cs_petchy Messages postés 710 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 19 mai 2015 4
21 avril 2006 à 12:10
salut
merci les à tous,vous etes super,c'est nickel
@ plus
Petchy
0
Rejoignez-nous