Probléme avec une macro en VBA pour Excel
SerialProgrammer
-
KdTcA -
KdTcA -
Bonjour à tous,
Voici mon probléme. J'ai écrit une macro sous Excel pour faire de la manipulation de mise en forme de chaîne de caractére. Je me heurte au problème suivant: Je calcule plusieurs valeurs numériques que je souhaite fair figurer chacune dans des celluless successives au sein d'une même colonne. Le résultat devra être exploitable par un logiciel de simulation indépendant d'Excel, qui nécessite des formats très spéciaux. Ainsi je dois faire figurer dans chaque cellule le nombre sous la forme 0.00000000000000e-08 (et non pas 0.00000000000000E-08 !!) la précision est également importante 'd'où les 14 chiffres derriéres la virgule.
Voici le code que je propose:
For i = 1 To nbre_sample
Worksheets(1).Cells(i, 2).Value = i * periode
tmp = CStr(ActiveSheet.Cells(i, 2).Value)
longueur = Len(tmp)
first_lettre = Left(tmp, 1)
last_lettres = Mid(tmp, 3, longueur - 6)
puissance = Right(tmp, 3)
new_val_cellule = first_lettre & "." & last_lettres & "e" & puissance
Worksheets(1).Cells(i, 2).Activate
Worksheets(1).Cells(i, 2).Value = ActiveCell.Characters.Insert(new_val_cellule) 'tempo)
Next i
Lors de l'exécution, j'ai l'erreur n°1004: impossible de lire la proprité insert de characters.
Quelqu'un a-t-il une idée, ou une solution ?
Merci beaucoup
Voici mon probléme. J'ai écrit une macro sous Excel pour faire de la manipulation de mise en forme de chaîne de caractére. Je me heurte au problème suivant: Je calcule plusieurs valeurs numériques que je souhaite fair figurer chacune dans des celluless successives au sein d'une même colonne. Le résultat devra être exploitable par un logiciel de simulation indépendant d'Excel, qui nécessite des formats très spéciaux. Ainsi je dois faire figurer dans chaque cellule le nombre sous la forme 0.00000000000000e-08 (et non pas 0.00000000000000E-08 !!) la précision est également importante 'd'où les 14 chiffres derriéres la virgule.
Voici le code que je propose:
For i = 1 To nbre_sample
Worksheets(1).Cells(i, 2).Value = i * periode
tmp = CStr(ActiveSheet.Cells(i, 2).Value)
longueur = Len(tmp)
first_lettre = Left(tmp, 1)
last_lettres = Mid(tmp, 3, longueur - 6)
puissance = Right(tmp, 3)
new_val_cellule = first_lettre & "." & last_lettres & "e" & puissance
Worksheets(1).Cells(i, 2).Activate
Worksheets(1).Cells(i, 2).Value = ActiveCell.Characters.Insert(new_val_cellule) 'tempo)
Next i
Lors de l'exécution, j'ai l'erreur n°1004: impossible de lire la proprité insert de characters.
Quelqu'un a-t-il une idée, ou une solution ?
Merci beaucoup
A voir également:
- Probléme avec une macro en VBA pour Excel
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Liste déroulante excel - Guide
- Déplacer une colonne excel - Guide
- Mise en forme conditionnelle excel - Guide
- Word et excel gratuit - Guide
9 réponses
'lut
Je pense que tu ne peux changer le "E" par un "e" car ta cellulle n'a pas pour valeur une chaine mais un nombre. Ce nombre n'est pas "0.00000000000000E-08" mais en réalité "0"
A moins que je dise n'importe quoi...
Je vais tester çà...
Je pense que tu ne peux changer le "E" par un "e" car ta cellulle n'a pas pour valeur une chaine mais un nombre. Ce nombre n'est pas "0.00000000000000E-08" mais en réalité "0"
A moins que je dise n'importe quoi...
Je vais tester çà...
Je peux pas tester je n'ai pas toutes les données, si tu peux mettre fon fichier en lien téléchargeable, je regarderais..
En fait le code que je te présente crée les données que je veux utiliser. Le pble est un pble de mise en forme. Il faut juste connaître le moyen de formater la cellule de telle sorte qu'elle accepte d'afficher: 0.0000000000001e-08 ... peu importe le nombre de zéro en fait... En fait pour l'instant le code en + ds la macro est juste celui pour demander le nbre d'itérations (variable nbre_sample) et la fréquence (variable frequence). Penses-tu pouvoir qd meme jeter un oeil à mon code ? As-tu des infos compléter sur la propriété Characters de l'objet Cells ?
Merci beaucoup à tous ceux qui peuvent m'aider.
Merci beaucoup à tous ceux qui peuvent m'aider.
Le probléme de cell(i,j).value est qu'il force le type comme étant numérique... et du coup le "e" devient "E" ... précisément là est mon pble ...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
j'ai pense à ça
Function conv(x As Variant, Optional separateur As String) As Variant
Dim boucle As Integer
Dim tempo As String
tempo = Format(x, "0.00000000000000E+00")
tempo = Replace(tempo, "E", "e")
If separateur = "," Then tempo = Replace(tempo, ".", ",")
If separateur = "." Then tempo = Replace(tempo, ",", ".")
conv = tempo
End Function
Function conv(x As Variant, Optional separateur As String) As Variant
Dim boucle As Integer
Dim tempo As String
tempo = Format(x, "0.00000000000000E+00")
tempo = Replace(tempo, "E", "e")
If separateur = "," Then tempo = Replace(tempo, ".", ",")
If separateur = "." Then tempo = Replace(tempo, ",", ".")
conv = tempo
End Function
Merci pour vos réponses. Eh bien le problème est résolu. Il fallait forcer le type de la variable new_val_cellule comme étant une string et ca passe. La dernière solution proposé est encore mieux je pense. Je vais la tester qd meme. Merci.