Bonjour
Est il possible de lancer une macro juste aprés l'ouverture d'un fichier ou/et de Excel?
Peut on n'afficher que le resultat final sans voir defiler les differentes operations de la macro de maniere chronologique.
merci
Version imprimable
Bonjour
Est il possible de lancer une macro juste aprés l'ouverture d'un fichier ou/et de Excel?
Peut on n'afficher que le resultat final sans voir defiler les differentes operations de la macro de maniere chronologique.
merci
bonjour,
pour etre sympas
Code:
1
2
3
4 Private Sub Workbook_Open() ' ton code End Sub
Bonsoir Tardieub,
Si dans votre code vous utilisez des sélections de cellules, de feuilles et pourquoi pas de fichiers, il faut ajouter au début :
puis en fin de traitement remettre = TrueCode:Application.ScreenUpdating = False
Je sais que je vais me faire taper, mais suite à cette réponse, comment fait-on pour:
- Exécuter la macro indéfiniment
- Garder la main pendant son éxécution
Merci d'avance. :aie:
Hello,
Qu'est ce que tu entends par indéfiniment? Qu'elle se lance à l'ouverture jusqu'a la fermeture du fichier? Mais pour faire quoi exactement?
Pour garder la main tu peux faire Ctrl + Pause ( J'ai vu ca today sur un des topics donc merci à celui qui la poster :P )
Tchusss
Ouais, c'est bien pour ça. En fait, je suis entrain de créer un petit code pour faire une mise en forme conditionnelle à plus de 3 critètres. Je le lance dans le Workbook_Open.() Le code est le suivant:
J'ai 2 pb:Code:
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 Private Sub Workbook_Open() Application.ScreenUpdating = False Range("B6:IV300").Select 'Selection de l'ensemble des cellules du tableau For Each Cell In Selection If Cell.Value = "V" Or Cell.Value = "v" Then Cell.Interior.ColorIndex = 43 'Colore la cellule en vert clair Cell.Value = "V" Cell.Font.ColorIndex = 2 End If If Cell.Value = "E" Or Cell.Value = "e" Then Cell.Interior.ColorIndex = 45 'Colore la cellule en bleu clair Cell.Value = "E" Cell.Font.ColorIndex = 2 End If If Cell.Value = "S" Or Cell.Value = "s" Then Cell.Interior.ColorIndex = 38 'Colore la cellule en rose Cell.Value = "S" Cell.Font.ColorIndex = 2 End If Next Application.ScreenUpdating = True End Sub
- Il s'écexute qu'une fois au lancement de la page alors que je voudrais qu'il tourne en continu
- J'ai pas la main quand le code tourne. Je sais qu'il existe une commande en VBA qui permet de garder la main, mais j'ai oublié son nom
Merci de ton aide.
plop,
ben à ce moment là, au lieu de le faire à l'ouverture, tu le fait dans l'évenement change du workbook...:roll:
D'ailleurs du coup, c'est quoi la commande en VBA pour la cellule sélectionnée, "Selection.Cell"?
devrait faire l'affaire.Code:activecell
Merci de ta réponse.
C'est bien ce que je fais, mais ça marche pas. Tu pourrais m'aider, voici mon code:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) If ActiveCell.Value = "V" Or ActiveCell.Value = "v" Then ActiveCell.Interior.ColorIndex = 43 'Colore la cellule en vert clair ActiveCell.Value = "V" ActiveCell.Font.ColorIndex = 2 ElseIf ActiveCell.Value = "E" Or ActiveCell.Value = "e" Then ActiveCell.Interior.ColorIndex = 45 'Colore la cellule en bleu clair ActiveCell.Value = "E" ActiveCell.Font.ColorIndex = 2 ElseIf ActiveCell.Value = "S" Or ActiveCell.Value = "s" Then ActiveCell.Interior.ColorIndex = 38 'Colore la cellule en rose ActiveCell.Value = "S" ActiveCell.Font.ColorIndex = 2 End If End Sub
Bonjour
Lorsque tu dis que "ça ne marche pas", ce qui serait bien, c'est d'expliquer ce qui ne fonctionne pas, ce que tu as comme résultat, ce que tu attends...
Cela étant dit, je programmerais différemment, en utilisant Select Case plutôt qu'une succession de If...ElseIF...
De plus, il faut basculer la gestion des évènements à False, sinon la procédure s'appelle elle-même, et ne pas oublier de la basculer à True en fin de procédure
Note quand même au passage que ce code, tel qu'il est écrit, va fonctionner pour toutes les cellules de toutes les feuilles, et qu'il serait peut-être judicieux de mieux cadrer la gestion de l'évènement (tests sur les feuilles et la cellule target)...Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) Application.EnableEvents = False Select Case UCase(Target.Value) Case "V" With Target .Value = "V" .Interior.ColorIndex = 43 .Font.ColorIndex = 2 End With Case "E" With Target .Value = "E" .Interior.ColorIndex = 45 .Font.ColorIndex = 2 End With ... End Select Application.EnableEvents = True End Sub
Cela convient-il?
Bonsoir ou bonjour,
j'ai parcouru la réponse que tu as fait à PedroBD, sans en avoir besoin actuellement. Ta solution, je vais la garder car ça risque fort de m'être utile.
En ce moment, pour la mise en forme des cellules, je ne passe que par la mise en forme conditionnelle proposée par excel
Alors merci
Salut Pierre et merci de ta réponse. Quand je dis que mon code ne marche pas, j'entends qu'il n'y a aucun changement dans le tableau. Si j'entre "V" dans ma cellule active, cette cellule reste dans la même couleur de police, la couleur de remplissage est la même. Il n'y a donc aucune action de la macro.
J'ai testé ton code, mais rien ne se passe non plus...mystère. Je vais encore chercher.
Merci de ton aide.
Es-tu certain que
Tu peux taper cette ligne de code dans la fenêtre d'exécution (ctrl+G) du VBE...Code:application.enableevents = true
Tu peux aussi placer un point d'arrêt sur la ligne
puis modifier une cellule. Si la gestion des évènements est activée, le débogueur devrait s'arrêter sur cette ligne. S'il ne le fait pas, c'est que ta gestion des évènements est désactivée, ou qu'il y a autre chose...Code:Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Teste et reviens nous dire ce qu'il en est...
Bonjour à tous,
J'essaie de lancer plusieurs macro à l'ouverture du fichier Excel (activation de l'onglet "synthèse", affichage des 2 photos), mais seule la 1ère se lance.
Pourriez-vous m'aider svp ?
Merci d'avance.
Code:
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
30
31
32
33
34
35
36 Private Sub Workbook_Open() Sheets("SYNTHESE").Activate Worksheets(1).ScrollArea = "A1:S46" End Sub Private Sub Workbook_BeforeSave(ByVal SaveAsUi As Boolean, Cancel As Boolean) Sheets("SYNTHESE").[K30] = Now 'Feuil1 étant votre feuille de travail et B2 la cellule où vous souhaitez mettre la date de dernier enregistrement Sheets("SYNTHESE").[K32] = Application.UserName End Sub Sub PhotoID1() Dim C As Range, Img As Shape For Each C In Range("A1", Cells(Rows.Count, "A").End(xlUp)) If C.Value <> "" Then ActiveSheet.Pictures.Insert([A1].Value).Select Selection.Left = C.Offset(, 2).Left Selection.Top = C.Top Selection.Height = C.Height Selection.ShapeRange.LockAspectRatio = msoTrue End If Next C End Sub Sub PhotoID2() Dim C As Range, Img As Shape For Each C In Range("B1", Cells(Rows.Count, "B").End(xlUp)) If C.Value <> "" Then ActiveSheet.Pictures.Insert([B1].Value).Select Selection.Left = C.Offset(, 2).Left Selection.Top = C.Top Selection.Height = C.Height Selection.ShapeRange.LockAspectRatio = msoTrue End If Next C End Sub