Mise en forme de cellule

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

bouhh01142

XLDnaute Nouveau
Bonjour à tous,

J'ai un petit soucis, j'ai donc essayer avec des mise en forme conditionnelle, mais rien de probant.
J'ai donc des cellules remplies en seconde, et j'aimerais qu'a la saisie de "74" par exemple, il apparaisse "1m14s" .
Cela sans saisir de formules.

Je vous remercie d'avance.

PS: cf pj
 

Pièces jointes

Re : Mise en forme de cellule

Bonjour Bouhh, bonjour le forum,

En pièce jointe ton fichier modifié avec le code ci-dessous :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ent As Integer 'déclare la variable ent (partie Entière)
Dim sec As Integer 'déclare la variable sec (secondes)

If Selection.Cells.Count > 1 Then Exit Sub 'si plusieurs cellules sélectionnées, sort de la procédure
If Target.Column <> 1 Then Exit Sub 'si la changement a lieu ailleurs que dans la colonne A, sort de la procédure
If Target.Value = "" Then Target.Offset(0, 1).Value = "": Exit Sub 'si la cellule est effacée, efface aussi la cellule en colonne B, sort de la procédure
ent = CInt(Target.Value \ 60) 'définit la variable ent
sec = Target.Value Mod 60 'définit la variable sec
Target.Offset(0, 1).Value = ent & "m" & sec & "s" 'place le résultat dans la colonne B
End Sub
Le fichier :
 

Pièces jointes

Re : Mise en forme de cellule

Bonjour bouhh01142,

Placez dans le code de la feuille (clic droit sur l'onglet et Visualiser le code) :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Set Target = Intersect(Target, [A:A], Me.UsedRange)
If Target Is Nothing Then Exit Sub
Application.EnableEvents = False
For Each Target In Target
  If IsNumeric(Target) Then
    If Target <> "" Then
      Target.NumberFormat = "[m]\mss\s"
      Target = Target / 86400
    End If
  End If
Next
Application.EnableEvents = True
End Sub
La boucle est pour le cas où l'on fait une entrée multiple (par copier-coller par exemple).

Edit : pas vu Robert, salut Robert.

A+
 
Dernière édition:
Re : Mise en forme de cellule

Re,

Il n'y a pas d'erreur, mais sur Excel 2010, quand on entre des données dans un tableau, le format de la cellule du dessus est recopié automatiquement.

C'est d'ailleurs une option qui est cochée par défaut (onglet Fichier => Options => Options avancées).

Cette macro l'évite avec la 2ème ligne de code :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Target.NumberFormat = "General" 'format Standard
Set Target = Intersect(Target, [B1:B5], Me.UsedRange)
If Target Is Nothing Then Exit Sub
Application.EnableEvents = False
For Each Target In Target
  If IsNumeric(Target) Then
    If Target <> "" Then
      Target.NumberFormat = "[m]\mss\s"
      Target = Target / 86400
    End If
  End If
Next
Application.EnableEvents = True
End Sub
A+
 
Re : Mise en forme de cellule

Bonjour à vous 🙂

J'étais en vacances, donc déconnecté de tout, mais au test de ce macro, je me suis aperçu qu'a son utilisation, lorsque que je créais une copie de la feuille de calcul toute les cellules perdaient leur formats, comme avec B2 dans mon document joint.
Il y aurais-t-il un moyen de les conserver, car cet aspect pose problème.

Merci beaucoup!!
 

Pièces jointes

Re : Mise en forme de cellule

Bonjour bouhh01142, le fil,

Le problème vient évidemment de cette ligne :

Code:
Target.NumberFormat = "General" 'format Standard
qui met toutes les cellules modifiées au format Standard.

Je n'ai pas de solution par macro à votre problème.

Comme je l'ai signalé, le plus simple (sur Excel 2010) est de décocher l'option de formatage automatique, et bien sûr de supprimer cette ligne de code.

A+
 
Dernière édition:
Re : Mise en forme de cellule

Re,

Bon j'ai peut-être quand même une solution :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim plage As Range
Set plage = [A1] 'à adapter
Set Target = Intersect(Target, Me.UsedRange)
If Target Is Nothing Then Exit Sub
Application.EnableEvents = False
For Each Target In Target
  If Intersect(Target, plage) Is Nothing Then
    If Target.NumberFormat = "[m]\mss\s" And IsNumeric(Target) _
      Then Target.NumberFormat = "General"
   Else
    If IsNumeric(Target) Then
      If Target <> "" Then
        Target.NumberFormat = "[m]\mss\s"
        Target = Target / 86400
      End If
    End If
  End If
Next
Application.EnableEvents = True
End Sub
La cellule modifiée est mise au format Standard :

- si elle est en dehors de la plage contrôlée [A1]

- si elle est s'est mise au format "[m]\mss\s".

Fichier joint.

Edit : je joins aussi le fichier du post #4

A+
 

Pièces jointes

Dernière édition:
Re : Mise en forme de cellule

Re,

Finalement pas trop compris car avec cette macro :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Set Target = Intersect(Target, [A1], Me.UsedRange)
If Target Is Nothing Then Exit Sub
Application.EnableEvents = False
For Each Target In Target
  If IsNumeric(Target) Then
    If Target <> "" Then
      Target.NumberFormat = "[m]\mss\s"
      Target = Target / 86400
    End If
  End If
Next
Application.EnableEvents = True
End Sub
on peut entrer ce qu'on veut en A2...

Fichier (2).

A+
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
240
Réponses
5
Affichages
597
W
Réponses
25
Affichages
916
Retour