Bonjour (ou bonsoir)
Pour un projet, je doit générer un rapport d'erreur dans un excel, et à partir de se rapport je doit pouvoir retourner sur l'un des fichiers excel qui contient les données traitées.
Il me faut donc créer dynamiquement un lien ou un bouton dans le rapport pour chaque erreur qui aura pour but d'ouvrir le fichier excel (qui aura été fermé par la macro créatrice du rapport) et de pointé sur la cellule du bon onglet.
J'ai testé les hyperlinks
Mais le problème, c'est que ca va forcément pointer sur l'onglet "actif" au moment de la dernière sauvegarde. Je n'ai pas trouvé comment définir l'onglet cible.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Dim objLink As Hyperlink Set objLink = Workbook("Rapport").Worksheets(1).Hyperlinks.Add(Workbook("Rapport").Worksheets(1).Cells(X, Y), "P:\Comande.xls").SubAddress = "B6"
J'ai testé la création dynamique, j'ai tester ces codes trouvés sur le site :
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 Sub creationModule() 'Nécéssite d'activer la référence '"Visual basic For Application Extensibility 5.3" ' Dim Wb As Workbook Dim VBComp As VBComponent Dim X As Integer 'Définit le classeur cible Set Wb = Workbooks("Classeur1.xls") 'Ajoute un module standard dans le classeur Set VBComp = Wb.VBProject.VBComponents.Add(1) 'Renomme le module VBComp.Name = "NouveauModule" 'Ajoute une macro dans le module With VBComp.CodeModule X = .CountOfLines .InsertLines X + 1, "Sub laMacro()" .InsertLines X + 2, "Range(""A1"").Value = ""Coucou""" .InsertLines X + 3, "End Sub" End With End SubDans les deux codes ca plante sur "ThisWorkbook.VBProject.VBComponents" (erreur 1004) et dans le premier ca bug sur "Ws.OLEObjects.Add" (ca crée le bouton, mais avec left et top = 0 et height = 10, width = 50, name = CommandButton1)
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 Dim Ws As Worksheet Dim Obj As OLEObject Dim laMacro As String Dim x As Integer Set Ws = Sheets.Add 'Ajoute une nouvelle feuille 'ajoute un CommandButton dans la nouvelle feuille Set Obj = Ws.OLEObjects.Add("Forms.CommandButton.1") With Obj .Name = "monBouton" 'renomme le bouton .Left = 50 'position horizontale par rapport au bord gauche de la feuille .Top = 50 'position verticale par rapport au bord haut de la feuille .Width = 150 'largeur .Height = 30 'hauteur .Object.Caption = "Supprimer données feuille" End With 'Spécifie le contenu de la macro qui sera associée au bouton laMacro = "Sub monBouton_Click()" & vbCrLf laMacro = laMacro & "Cells.Clear" & vbCrLf laMacro = laMacro & "End Sub" 'Ajoute la procédure dans la feuille With ThisWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule x = .CountOfLines + 1 .InsertLines x, laMacro End With
Voila si quelqu'un peut m'expliquer pourquoi ca bug, ca serai cool
Ps : pour la référence, je l'ai cocher dans le menu, j'ai accept, j'ai enregistrer la macro et j'ai même redémarrer le pc au cas où, il a rien voulu savoir![]()
Partager