conversion décimal en degré, minute, seconde

conversion décimal en degré, minute, seconde - VB/VBA/VBS - Programmation

Marsh Posté le 28-10-2006 à 13:14:28    

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

Reply

Marsh Posté le 28-10-2006 à 13:14:28   

Reply

Marsh Posté le 28-10-2006 à 15:23:20    

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
Reply

Marsh Posté le 28-10-2006 à 15:38:08    

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

Reply

Marsh Posté le 28-10-2006 à 19:24:32    

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
 

Reply

Marsh Posté le 28-10-2006 à 21:35:08    

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
Reply

Marsh Posté le 29-10-2006 à 10:14:59    

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
Reply

Marsh Posté le 29-10-2006 à 10:58:37    

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

Reply

Marsh Posté le 29-10-2006 à 11:05:55    

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

Reply

Marsh Posté le 29-10-2006 à 13:36:42    

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

Reply

Marsh Posté le 29-10-2006 à 14:05:28    

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

Reply

Marsh Posté le 29-10-2006 à 14:05:28   

Reply

Marsh Posté le 29-10-2006 à 15:24:43    

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

Reply

Marsh Posté le 29-10-2006 à 15:46:00    

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

Reply

Marsh Posté le 29-10-2006 à 18:32:30    

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

Reply

Marsh Posté le 31-03-2010 à 22:51:15    

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
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed