Macro mise en forme sous excel
Résolu
sfab41
-
lermite222 Messages postés 9042 Statut Contributeur -
lermite222 Messages postés 9042 Statut Contributeur -
Bonjour,
Je suis néophyte en terme de programmation mais j'aimerais faire une macro qui me permette de créer une mise en forte personnalisée, au même titre que ce qui est fait sous excel via Format/Cellule/Nombre/Personnalisé.
La seule différence qui fait que je ne peux pas passer par cette méthode c'est que je voudrais que cette mise en forme dépende du contenu d'une cellule qui peux être modifiée.
Je m'explique:
- J'ai créé une trame de compte avec en cellule B1 le mois en cours (exemple "Juin")
- En plage B10 à B30, il y a les jours des opérations effectuées (exemple "10" du mois)
Mon but est donc d'avoir Le contenu de "B1", à savoir "Juin" qui vient s'ajouter au contenu de la cellule pour avoir ainsi "10 Juin".
J'ai donc ceci de créé:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Range("B10:B30,I10:I12,I18:I20"), Target) Is Nothing Then Exit Sub
Application.EnableEvents = False
If Not IsEmpty(Target) Then
Target.Value = Target.Value & " " & Cells.Range("B1").Text
Application.EnableEvents = True
End If
End Sub
Le problème est qu'avec cette macro si j'ouvre ma trame de comptes vierge avec des dates pré-rentrées, la modification ne se fait pas automatiquement.
Merci de vous pencher sur mon cas.
Je suis néophyte en terme de programmation mais j'aimerais faire une macro qui me permette de créer une mise en forte personnalisée, au même titre que ce qui est fait sous excel via Format/Cellule/Nombre/Personnalisé.
La seule différence qui fait que je ne peux pas passer par cette méthode c'est que je voudrais que cette mise en forme dépende du contenu d'une cellule qui peux être modifiée.
Je m'explique:
- J'ai créé une trame de compte avec en cellule B1 le mois en cours (exemple "Juin")
- En plage B10 à B30, il y a les jours des opérations effectuées (exemple "10" du mois)
Mon but est donc d'avoir Le contenu de "B1", à savoir "Juin" qui vient s'ajouter au contenu de la cellule pour avoir ainsi "10 Juin".
J'ai donc ceci de créé:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Range("B10:B30,I10:I12,I18:I20"), Target) Is Nothing Then Exit Sub
Application.EnableEvents = False
If Not IsEmpty(Target) Then
Target.Value = Target.Value & " " & Cells.Range("B1").Text
Application.EnableEvents = True
End If
End Sub
Le problème est qu'avec cette macro si j'ouvre ma trame de comptes vierge avec des dates pré-rentrées, la modification ne se fait pas automatiquement.
Merci de vous pencher sur mon cas.
A voir également:
- Macro mise en forme sous excel
- Mise en forme conditionnelle excel - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Appliquez à tous les paragraphes du document à télécharger, à l’exception des titres et des sous-titres, la mise en forme suivante : - Guide
3 réponses
Bonjour,
et si ta procédure était appelée à la fois par Worksheet_Change et Workbook_Open ?
A suivre...
et si ta procédure était appelée à la fois par Worksheet_Change et Workbook_Open ?
A suivre...
Bonsoir,
Je t'ai fait ne petite macro qui répond à ce que tu vex.
Seule chose, dans la cellule B1 if faut entrer le numéro du mois et pas sont nom.
La macro fonctionne pour les cellules de B10 à B30, à toi de l'adapter pour les autres cellules.
Tu tape les N° des jours dans B10 à B30
et tu colle cette macro..
A+
Je t'ai fait ne petite macro qui répond à ce que tu vex.
Seule chose, dans la cellule B1 if faut entrer le numéro du mois et pas sont nom.
La macro fonctionne pour les cellules de B10 à B30, à toi de l'adapter pour les autres cellules.
Tu tape les N° des jours dans B10 à B30
et tu colle cette macro..
'Mettre au dessus du module
Dim MemAd As String
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim D As String
If MemAd = "$B$1" Then
D = "1/" & Cells(1, 2)
Cells(1, 2) = Format(D, "mmmm")
For i = 10 To 30
If Cells(i, 2) <> "" Then
D = Format(Trim(Left(Cells(i, 2), 2)) & "/" & Month(D) _
, "dd mmmm")
Cells(i, 2) = D
End If
Next i
End If
MemAd = Target.Address
End Sub
A+
Bonsoir,
Je t'ai fais, une petite macro qui répond à ce que tu veux.
Seule chose, dans la cellule B1 il faut entrer le numéro du mois et pas sont nom.
La macro fonctionne pour les cellules de B10 à B30, à toi de l'adapter pour les autres cellules.
Tu tape les N° des jours dans B10 à B30
et tu colle cette macro..
A+
Je t'ai fais, une petite macro qui répond à ce que tu veux.
Seule chose, dans la cellule B1 il faut entrer le numéro du mois et pas sont nom.
La macro fonctionne pour les cellules de B10 à B30, à toi de l'adapter pour les autres cellules.
Tu tape les N° des jours dans B10 à B30
et tu colle cette macro..
'Mettre au dessus du module
Dim MemAd As String
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim D As String
If MemAd = "$B$1" Then
D = "1/" & Cells(1, 2)
Cells(1, 2) = Format(D, "mmmm")
For i = 10 To 30
If Cells(i, 2) <> "" Then
D = Format(Trim(Left(Cells(i, 2), 2)) & "/" & Month(D) _
, "dd mmmm")
Cells(i, 2) = D
End If
Next i
End If
MemAd = Target.Address
End Sub
A+
Et bien ce que je recherche c'est que les cellules "date" soient mises à jour dès qu'il y a modification de la cellule B1, comme cela se passe sous excel avec les mises en forme personnalisées, donc sans avoir besoin de fermer l'application puis la redémarrer.