Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1224 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  conversion décimal en degré, minute, seconde

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

conversion décimal en degré, minute, seconde

n°1466578
tigrounill​e
Posté le 28-10-2006 à 13:14:28  profilanswer
 

Pb de programmation excel vba
 
Je souhaite convertir des valeurs décimales (ex: 12.236) en degré, minute, seconde (12° 14' 09" ).
 
Mon programme ne fonctionne pas, HELP ME :
 
Sub deg()
 
Dim Dec As Variant
Dec = "1:"
ActiveCell.Value = ActiveCell.Value * Dec
 
With Selection
Selection.NumberFormat = "[h]""° ""mm""' ""ss""''"""
End With
 
End Sub

mood
Publicité
Posté le 28-10-2006 à 13:14:28  profilanswer
 

n°1466604
kiki29
Posté le 28-10-2006 à 15:23:20  profilanswer
 

Sous forme de Fonction personnalisée
Code a copier dans un Module
Sous VBA : Menu Insertion | Module
 


Option Explicit
 
Function DegDecimal2DMS(ByVal Deg As Double) As String
Dim Degres As Integer, DDegres As Long, Minutes As Integer, Secondes As Integer
Dim M As String, S As String
    Degres = Deg Mod 360
    DDegres = Int(Deg)
    Minutes = Int((Deg - DDegres) * 60)
    Secondes = Int(((Deg - DDegres) * 60 - Minutes) * 60)
 
    Select Case Minutes
        Case Is < 10: M = "0" & CStr(Minutes)
        Case Else: M = CStr(Minutes)
    End Select
    Select Case Secondes
        Case Is < 10: S = "0" & CStr(Secondes)
        Case Else: S = CStr(Secondes)
    End Select
 
    DegDecimal2DMS= CStr(Degres) & "° " & M & "' " & S & "''"
End Function


 
Puis sous Excel  
Sélectionner une cellule
Menu Insertion | Fonction | Sélectionner une Catégorie : Personnalisées
Suivre l'assistant en sélectionnant la cellule contenant la valeur à convertir


Message édité par kiki29 le 28-10-2006 à 22:02:58
n°1466606
seniorpapo​u
Posté le 28-10-2006 à 15:38:08  profilanswer
 

Bonjour,
tu peux remplacer dec="1:" par :
dec=1/24
Cordialement

n°1466671
tigrounill​e
Posté le 28-10-2006 à 19:24:32  profilanswer
 

Merci de vos réponses.
 
J'ai été séduit par le remplacement : dec=1/24.
Je l'ai donc testé à la macro et ca donne ceci. Cela marche pour une seule cellule. Mais j'aurais aimé l'appliquer sur la sélection de plusieurs cellules. Quelqu'un aurait il la solution ?
 
 
Sub deg()
 
If ActiveCell.Value < 0 Then GoTo Suite
 
ActiveCell.Value = ActiveCell.Value * 1 / 24
 
With Selection
Selection.NumberFormat = "[h]""° ""mm""' ""ss""''"""
End With
 
Exit Sub
 
Suite:
 
ActiveCell.Value = Abs(ActiveCell.Value) * 1 / 24
 
With Selection
Selection.NumberFormat = "-[h]""° ""mm""' ""ss""''"""
End With
 
End Sub
 

n°1466689
kiki29
Posté le 28-10-2006 à 21:35:08  profilanswer
 

Je t'ai donné une solution qui elle a l'avantage de marcher ...
Par exemple 56986,05236 donnera 106° 03' 08''
 
La duplication de fonction marchant de la même manière que pour les fonctions intégrées d'Excel
 
Mais c'est peut être le concept de fonction sur lequel tu butes ?
et pourtant tu as dû déjà taper des trucs du genre =SOMME(A1:A2) pour la fonction
intégrée SOMME, ici c'est la même chose sauf qu'elle a été créée par l'utilisateur


Message édité par kiki29 le 29-10-2006 à 08:37:14
n°1466779
seniorpapo​u
Posté le 29-10-2006 à 10:14:59  profilanswer
 

Bonjour,
Voici de quoi choisir:
le premier xls présente ta méthode "limitée" que j'ai un peu arrangée
plus celle de kiki29
http://cjoint.com/?kDjCGImIw0
 
le deuxième .xls présente ta méthode modulo 360
plus celle de kiki29
http://cjoint.com/?kDkr1k8Zu3
 
à toi de voir et de tester
Cordialement


Message édité par seniorpapou le 29-10-2006 à 10:18:43
n°1466797
tigrounill​e
Posté le 29-10-2006 à 10:58:37  profilanswer
 

Je cherche la méthode avec recouvrement. Mes angles sont au maximum de 360° alors la méthode ci après me convient très bien.
Mais le test ne fonctionne pas. Je n'arrive pas à lire la macro. Excel ne comprend pas Sub Deg(rr As Range) et rr.Activate.  
 
 
Sub Deg(rr As Range)
' Ta méthode avec recouvrement
 
 signe = " "
 rr.Activate
 With ActiveCell
 If .Value < 0 Then signe = "-"
 .Value = Abs(ActiveCell.Value) / 24
 .NumberFormat = signe & "[h]""° ""mm""' ""ss""''"""
 End With
 
End Sub

n°1466799
seniorpapo​u
Posté le 29-10-2006 à 11:05:55  profilanswer
 

Bonjour,
as-tu regardé dans feuil1 de vbe ?  
au niveau de worksheet_change?
 
 
fais un classeur d'essai et envois le  
Cordialement

n°1466855
tigrounill​e
Posté le 29-10-2006 à 13:36:42  profilanswer
 

Voila ce que j'ai fait dans WorkSheet. Il me met "erreur de compilation".
Pourquoi n'insère tu pas la macro dans un Module, tout simplement ?
 
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 
signe = " "
 ByVal.Activate
 With ActiveCell
 If .Value < 0 Then signe = "-"
 .Value = Abs(ActiveCell.Value) / 24
 .NumberFormat = signe & "[h]""° ""mm""' ""ss""''"""
 End With
 
End Sub

n°1466886
seniorpapo​u
Posté le 29-10-2006 à 14:05:28  profilanswer
 

Bonjour,
 
Byval.activate ne serait-ce pas Target.activate
tu avais parlé de plusieurs cellules à calculer, pas de toutes les cellules que tu vas saisir.  Ensuite, mais je n'ai pas le temps de faire l'essai, avec ta macro en supposant que tu puisses la faire fonctionner, sélectionnes une cellule déja calculée , saisis une valeur, puis sélectionnes une autre autre, l'évènement selection_change s'éxécute et calcul la cellule suivante et non pas celle que tu as quittée
 
A ce soir
Cordialement

mood
Publicité
Posté le 29-10-2006 à 14:05:28  profilanswer
 

n°1466961
tigrounill​e
Posté le 29-10-2006 à 15:24:43  profilanswer
 

En fait, après avoir saisi des valeurs décimales dans plusieurs cellules différentes de ma feuille Excel, je souhaite toutes les convertir (après sélection) en degré, minute, seconde. Le programme ci après permet de faire la conversion uniquement de la cellule active et non de toutes les cellules sélectionnées !
 
seniorpapou vient stp à mon aide. Merci.
 
Sub Deg()
 
signe = " "
 With ActiveCell
 If .Value < 0 Then signe = "-"
 .Value = Abs(ActiveCell.Value) / 24
 .NumberFormat = signe & "[h]""° ""mm""' ""ss""''"""
 End With
 
End Sub

n°1466963
tigrounill​e
Posté le 29-10-2006 à 15:46:00  profilanswer
 

Ca y est, EUREKA ! Après maintes essais, j'ai trouvé quelque chose qui tient la route. Et tout ceci grace à vous. Merci encore.
 
 
Sub Deg()
 
Dim r As Range
 
 For Each r In Selection
 
 signe = " "
 With r
 If .Value < 0 Then signe = "-"
 .Value = Abs(r.Value) / 24
 .NumberFormat = signe & "[h]""° ""mm""' ""ss""''"""
 End With
 
 Next r
 
  End Sub

n°1467032
seniorpapo​u
Posté le 29-10-2006 à 18:32:30  profilanswer
 

Bonsoir,
Je suis content que tu aies réalisé quelque chose qui te donne satisfaction.
 
A bientôt  
Cordialement

n°1979691
amoulla
help
Posté le 31-03-2010 à 22:51:15  profilanswer
 

Bonsoir,
J’ais un petit problème avec mon programme en micro C, j'aimerais faire une conversion d’une valeur décimal en une valeur en degré Celsius, et je trouve pas comment faire l'équation, aidez moi s'il te  plais a le faire
 
Merci d'avance  


---------------
cordialement

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  conversion décimal en degré, minute, seconde

 

Sujets relatifs
conversion chaine vers nombreconversion nombre en chaine binaire
Conversion d'un hh:mm:ss en un FLOAT[JS] transformer un nombre de seconde en minutes, heures, etc...
Conversion XLS en CSV pb "," et ";"Probleme Conversion
[C#] conversion int/long/et autres vers byte[ ]Convertir Minute en Heure
[XSLT] Probleme de conversion d'un algorithme vers xsl[Access] Conversion de date unixtime -> local timezone !!??
Plus de sujets relatifs à : conversion décimal en degré, minute, seconde


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR