XL 2010 Conserver le ou les "0" (inutiles) après la virgule

Magic_Doctor

XLDnaute Barbatruc
Bonjour,

Je me heurte à ce problème en apparence tout bête.
Je rentre une valeur dans, par exemple, la cellule A1 : 12,50 qui, fatalement, est transformée en 12,5.
Par macro événementielle, je voudrais récupérer (sous forme de texte évidemment), par exemple dans la cellule C1, la valeur que j'ai rentrée, autrement dit 12,50.
Vous comprendrez que je ne désire pas passer par un format personnalisé. Je veux, par la suite, récupérer les chiffres après la virgule, ici 50 : 50 <> 5 !

Merci d'avance pour toute aide.
 

Magic_Doctor

XLDnaute Barbatruc
Modeste Geedee,

C'est une question d'écriture que je n'ai pas inventée. Je ne fais qu'interpréter ce que je vois.
Sur une carte figure un cartouche indiquant la déclinaison magnétique lors de la parution de la carte. Pour 12° 38' ils écrivent 12,38. Pour 12° 2' j'imagine qu'ils écriront 12,2. Je n'ai jamais vu pour l'instant 12,08 par exemple.
Mais attention, je ne suis absolument pas spécialiste des cartes, et je dois reconnaître que, perdu où je suis (oublions l'espagnol, à part le foot, il n'y a pas grand chose qui les passionne... Impossible de trouver ici un équivalent d'Excel Downloads), je ne suis pas encore tombé sur un article qui explique en détail toutes ces nuances, comme, par exemple, jusqu'à quand peut-on raisonnablement utiliser le cartouche de la carte (supposons que ce soient écoulées 75 années...) ? Je ne pense pas qu'elles soient éternelles, d'autant plus des fluctuations singulières actuelles de cette déclinaison (moyenne 10 km/an, actuellement jusqu'à 50 km/an).

Exemple de cartouche :
DM1.jpg
Je n'ai pas l'impression qu'ils tapent en précision jusqu'à la seconde.
Pour finir, si j'écris 15,45 ça correspond à 15° 45'. Ce n'est ni plus ni moins qu'une simplification dans l'écriture quand on veut rentrer une donnée ; ce ne sont pas des degrés décimaux.
15,45° --> 15° 27' (en sexagésimal)

¡Feliz Navidad a todos!
 
Dernière édition:

Modeste geedee

XLDnaute Barbatruc
C'est une question d'écriture que je n'ai pas inventée. Je ne fais qu'interpréter ce que je vois.
Sur une carte figure un cartouche indiquant la déclinaison magnétique lors de la parution de la carte. Pour 12° 38' ils écrivent 12,38. Pour 12° 2' j'imagine qu'ils écriront 12,2. Je n'ai jamais vu pour l'instant 12,08 par exemple.

Pour finir, si j'écris 15,45 ça correspond à 15° 45'. Ce n'est ni plus ni moins qu'une simplification dans l'écriture quand on veut rentrer une donnée ; ce ne sont pas des degrés décimaux.​
15,45° --> 15° 27' (en sexagésimal)

¡Feliz Navidad a todos!
??? simplification non logique
l'écriture de 15,75° ne peut en aucun cas correspondre à 15° 75'
75 minutes c'est 1° et 15'
donc 15,75° devrait s'écrire 16,15° pour obtenir 15° plus 1° 15'

????
 

Magic_Doctor

XLDnaute Barbatruc
Relisez-moi BIEN.

Je n'ai jamais dit que
l'écriture de 15,75° correspondait à 15° 75'
Mais que 15,75 équivaut à 15° 75'. Si vous préférez, considérons cette écriture comme un postulat. C'est tout ! On a le droit de postuler après tout...
L'intérêt est le suivant. Sachant qu'on ne tient pas compte des secondes, on aura uniquement des degrés et des minutes. Si vous voulez rentrer un angle en sexagésimal (degrés & minutes), il faudra 2 cellules : une pour les degrés, l'autre pour les minutes. J'ai préféré n'utiliser qu'une seule cellule. Je rentre dans la cellule 15,75 et automatiquement, dans cette même cellule, cette valeur est convertie en 15° 75'. Appelons ça de la fainéantise australe...
 
Dernière édition:

Modeste geedee

XLDnaute Barbatruc
Relisez-moi BIEN.

Je n'ai jamais dit que

Mais que 15,75 équivaut à 15° 75'. Si vous préférez, considérons cette écriture comme un postulat. C'est tout ! On a le droit de postuler après tout...
L'intérêt est le suivant. Sachant qu'on ne tient pas compte des secondes, on aura uniquement des degrés et des minutes. Si vous voulez rentrer un angle en sexagésimal (degrés & minutes), il faudra 2 cellules : une pour les degrés, l'autre pour les minutes. J'ai préféré n'utiliser qu'une seule cellule. Je rentre dans la cellule 15,75 et automatiquement, dans cette même cellule, cette valeur est convertie en 15° 75'. Appelons ça de la fainéantise australe...
les minutes ne peuvent dépasser 59 !!!
Moi-même étant adepte de ce genre de fainéantise, il convientalors d'être cohérent lors de cette saisie
15,7° doit-il etre égale à 15° 7' ou bien 15° 70' (qui est incorrect tout comme 15° 75')

il convient alors de saisir 15,07 sans le symbole de l'unité obtenir pour 15° 7'

de même les calculs utilisant cette saisie en décimal seront entachés d'erreur dès lors que fraction décimal dépassera .59

SI MOD(A1;1)> 0.59 ==> erreur !!
utiliser une MEFC pour la zone de saisie !
1608925037761.png
 

Magic_Doctor

XLDnaute Barbatruc
Re,

Et là vous avez tout à fait raison ; c'est le pire exemple que l'on pouvait choisir ! C'est du reste une erreur qui sera évitée par un contrôle de saisies. On rentre maladroitement 15,75 apparaîtra alors 15° 59' (dès que minutes (chiffres après la virgule) > 59 --> 59).

Bonne journée.
 

job75

XLDnaute Barbatruc
Bonjour Magic_Doctor, le fil,
Et là vous avez tout à fait raison ; c'est le pire exemple que l'on pouvait choisir ! C'est du reste une erreur qui sera évitée par un contrôle de saisies. On rentre maladroitement 15,75 apparaîtra alors 15° 59' (dès que minutes (chiffres après la virgule) > 59 --> 59).
Une solution VBA assez classique :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Set Target = Intersect(Target, Range("A2:A" & Rows.Count))
If Target Is Nothing Then Exit Sub
Dim tablo, i&, x$, e&
Application.EnableEvents = False 'désactive les évènements
For Each Target In Target.Areas 'si entrées/effacements multiples (copier-coller)
    tablo = Target.Resize(, 2) 'matrice, plus rapide, au moins 2 éléments
    For i = 1 To UBound(tablo)
        x = CStr(tablo(i, 1))
        If IsNumeric(x) Then
            e = Int(Abs(x))
            tablo(i, 1) = e & "°" & IIf(Abs(x) > e, " " & Application.Min(Round(100 * (Abs(x) - e)), 59) & "'", "")
        End If
    Next i
    Target = tablo 'restitution
Next Target
Application.EnableEvents = True 'réactive les évènements
End Sub
A+
 

Pièces jointes

  • Degrés(1).xlsm
    17.1 KB · Affichages: 13

Magic_Doctor

XLDnaute Barbatruc
Bonjour job,

Avant de lire ton post, j'avais rédigé ceci :
VB:
Function ControlMinutes$(angle$)
'Vérifie si les chiffres après la virgule ne dépassent pas 59
'- angle : un angle désigné arbitrairement sous la forme X°,Y' avec un maximum de 2 décimales après la virgule (ex : 12,25 <=> 12° 25')
'          Dans la feuille, la cellule qui contient la valeur "angle" doit être en format TEXTE
'Ex : angle = 25,75 --> 12,59
'     angle = 15,15892 --> 15,15
'     angle = 15,20 --> 15,20
'     angle = 15,2 --> 15,2

Dim largo As Byte, pos As Byte, deg$, min$

    pos = InStr(angle, ",")          'position de la virgule dans la chaîne
    If pos = 0 Then GoTo fin         'il n'y a que des degrés, on court-circuite les minutes
    largo = Len(angle)               'longueur de la chaîne "angle"
    deg = Left(angle, pos - 1)       'degrés (à gauche de la virgule)
    min = Right(angle, largo - pos)  'à droite de la virgule
    min = Left(min, 2)               'minutes
    If min > 59 Then min = 59        'les minutes ne peuvent excéder 59
fin:

'    ControlMinutes = IIf(pos = 0, angle, deg & "," & min)
    ControlMinutes = IIf(pos = 0, angle & "°", deg & "°" & " " & min & "'")

End Function
C'est moins élégant que ta proposition (que je n'ai pas entièrement comprise pour l'instant). Le seul hic dans ta macro, c'est qu'elle ne distingue pas, par exemple, 12,40 et 12,4 ; elle renvoie toujours 12° 40'.
 

Modeste geedee

XLDnaute Barbatruc
Tout dépend de la façon de traiter la chaine saisie, avec un Split sur la virgule, le résultat numérique est le même : 12° et 02' = 12° et 2' et dans ce cas je ne vois pas pourquoi on aurait 20' quand on n'en saisit que 2.
C'est le principe même de la notation décimale !!! (non affichage des zéros non significatifs)

"By design" la reconnaissance automatique du type de données lors de la saisie est basée sur ce principe
et intervient à votre insu et avant toute autre manipulation de l'utilisateur (formats , macro événementielles, fonctions et procs).
La déclaration du séparateur décimal fait d'ailleurs partie des options d'Excel ( aussi Windows)
tout comme le séparateur horaire, ou séparateur de date.
Le changement de ces déclarations vous expose à de grandes déconvenues 😪
Laissons le révisionnisme mathématiques aux éminences de quelques chercheurs illuminés (*😎)

toutes les écritures ci-dessous représentent la même valeur !!!
12,2 (12 et 2 dixiémes)
12,20 (12 et 20 centièmes)
12,200 (12 et 200 millièmes)
12,2000 (12 et 2000 dix-millièmes)

??? pourquoi ne pas taper directement :
12°2 ou 12°20
Excel identifie alors la saisie en tant que texte.
une macro ou proc événementielle pourra alors traiter la saisie pour transformation en nombre (décimal, sexagésimal, binaire, octal, hexadécimal, unités astronomiques, unités microscopiques) appropriés aux calculs ultérieurs

(*)
🥳Nous sommes aujourd'hui le :
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 206
Messages
2 086 203
Membres
103 157
dernier inscrit
youma