Faire des calculs avec le contenu d'une cellule [Résolu/Fermé]

roideseaux 251 Messages postés jeudi 24 janvier 2008Date d'inscription 2 octobre 2017 Dernière intervention - 25 nov. 2016 à 10:21 - Dernière réponse : roideseaux 251 Messages postés jeudi 24 janvier 2008Date d'inscription 2 octobre 2017 Dernière intervention
- 29 nov. 2016 à 23:46
Bonjour,

Je suis en train de faire un fichier qui formalise un autre fichier.
En gros, j'ai des lignes avec des virgules entre chaque éléments. Donc pour déparer ces éléments, j'ai utilisé des formules qui chope la virgule etc... bref :
Je souhaiterais une macro qui me retourne seulement les chiffres contenus dans une colonne (correspondant à un élément), sauf que dès que je fais un petit calcul avec cette valeur, j'ai une erreur : "argument ou appel de procédure incorrect".
Je pense que ça vient du fait que j'ai une formule dans ma cellule mais comment faire pour ma macro ne prenne en compte que le contenu de la cellule et non sa formule ?

Merci !

Afficher la suite 

30 réponses

eriiic 21192 Messages postés mardi 11 septembre 2007Date d'inscriptionContributeurStatut 15 décembre 2017 Dernière intervention - Modifié par eriiic le 28/11/2016 à 19:38
+1
Utile
Bonjour,

à tester sur différents cas :
Dim a  As String, v As Single, unite As String
a = "2.2k"
v = Val(a)
unite = Mid(a, Len(CStr(v)) + 1)

S'il peut y avoir des , en séparateur décimal les remplacer par des . :
a = Replace(ta_chaine, ",", ".")
eric

En essayant continuellement, on finit par réussir. 
Donc plus ça rate, plus on a de chances que ça marche.(les Shadoks)
En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
Cette réponse vous a-t-elle aidé ?  
yg_be 4149 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 15 décembre 2017 Dernière intervention - 26 nov. 2016 à 10:15
0
Utile
Pourrais-tu donner quelques exemples de la situation de départ, et de la situation finale que tu attends, après exécution de la macro?
Ta question est un peu confuse. La partie utile de ta question est "Je souhaiterais une macro qui me retourne seulement les chiffres contenus dans une colonne (correspondant à un élément)". Cependant, une macro ne "retourne" rien, ce n'est ni une formule ni une fonction.
yg_be 4149 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 15 décembre 2017 Dernière intervention - 27 nov. 2016 à 21:22
0
Utile
Avec ce code-ci:
Option Explicit
Function rdsnum(ByVal inp As String) As Long
Dim c As String
rdsnum = 0
Do While Len(inp) > 0
    c = Left(inp, 1)
    inp = Right(inp, Len(inp) - 1)
    If IsNumeric(c) Then
        rdsnum = 10 * rdsnum + CInt(c)
    Else
        Exit Function
    End If
Loop
End Function
Function rdsstr(ByVal inp As String) As String
Dim c As String
Do While Len(inp) > 0
    c = Left(inp, 1)
    
    If IsNumeric(c) Then
        inp = Right(inp, Len(inp) - 1)
    Else
        Exit Do
    End If
Loop
rdsstr = inp
End Function


Tu peux utiliser des formules telles que =rdsnum(A1) et =rdsstr(A1) pour obtenir soir le nombre, soit les lettres.
roideseaux 251 Messages postés jeudi 24 janvier 2008Date d'inscription 2 octobre 2017 Dernière intervention - 27 nov. 2016 à 21:37
0
Utile
1
Ça a l'air de plutôt bien fonctionner, juste une chose, j'ai parfois un point dans la valeur pour avoir des décimales, mais du coup, ça coupe avant ce point, et vu que je ne comprend pas tout le code...
yg_be 4149 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 15 décembre 2017 Dernière intervention - 27 nov. 2016 à 21:47
Alors ceci?
Function rdsnum(ByVal inp As String) As Single
rdsnum = 0
Do While Len(inp) > 0
    If IsNumeric(inp) Then
        rdsnum = inp
        Exit Function
    End If
    inp = Left(inp, Len(inp) - 1)
Loop
End Function
Function rdsstr(ByVal inp As String) As String
Dim c As String
Do While Len(inp) > 0
    c = Left(inp, 1)
    If IsNumeric(c) Or c = "." Then
        inp = Right(inp, Len(inp) - 1)
    Else
        Exit Do
    End If
Loop
rdsstr = inp
End Function
jordane45 19256 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 15 décembre 2017 Dernière intervention - 25 nov. 2016 à 10:25
-1
Utile
Bonjour
Quel code as tu écris ?
roideseaux 251 Messages postés jeudi 24 janvier 2008Date d'inscription 2 octobre 2017 Dernière intervention - 25 nov. 2016 à 18:14
-1
Utile
J'ai récupéré ce code sur un autre sujet (qui est censé servir à séparer les éléments d'une adresse postale) :

Sub extrac()
Dim c As Range, t As Integer
Set c = Range("A2")
Do While c <> ""
For t = InStr(InStr(c, " "), c, " ") To Len(c)
Select Case Mid(c, t, 1)
Case "0" To "9"
Exit For
End Select
Next t
c(1, 2) = Mid(c, 1, t - 2)
c(1, 3) = Mid(c, t, 5)
c(1, 4) = Mid(c, t + 6)
Set c = c(2, 1)
Loop
End Sub


L'erreur est au moment ou la macro est rendue à la ligne
For t = InStr(InStr(c, " "), c, " ") To Len(c)
jordane45 19256 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 15 décembre 2017 Dernière intervention - 27 nov. 2016 à 17:59
-1
Utile
Je ne comprend pas trop ton code....

Sachant que :

j'ai des lignes avec des virgules entre chaque éléments. Donc pour séparer ces éléments,...

Pourquoi ne pas directement utiliser la fonction "Split" ?

Vas voir ici : http://silkyroad.developpez.com/VBA/ManipulerChainesCaracteres/#LI-I


roideseaux 251 Messages postés jeudi 24 janvier 2008Date d'inscription 2 octobre 2017 Dernière intervention - 27 nov. 2016 à 19:20
-1
Utile
1
En fait, la partie séparation de ma ligne de base, c'est bon, je suis passé par des formules mais dans un des résultats que j'ai obtenu et stocké dans une cellule, il y a des chiffres et des lettres, du style 100nF ou 2.2k (ce sont des valeurs de composants et la casse peut varier). Ce sont ces chiffres que je voudrais récupérer dans une nouvelle cellule de la même ligne (avec la première lettre ou les deux premières lettres qui suivent).

Le problème, c'est que je ne suis pas hyper doué en macro, et je suis loin de connaitre toutes les fonctions disponibles !
yg_be 4149 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 15 décembre 2017 Dernière intervention - 27 nov. 2016 à 19:32
Donc tu veux éliminer les dernières lettres? Comment déterminer si tu veux garder une ou deux lettres?
roideseaux 251 Messages postés jeudi 24 janvier 2008Date d'inscription 2 octobre 2017 Dernière intervention - 27 nov. 2016 à 21:05
-1
Utile
En fait, je souhaite récupérer la valeur du composant (les chiffres séparés des lettres, dans deux cases différentes) pour pouvoir ensuite comparer avec le contenu d'une colonne d'une autre feuille, afin de voir si je trouve une correspondance et du coup récupérer la référence qui y est associée...

Je peux être plus précis, avec des exemples si besoin...
roideseaux 251 Messages postés jeudi 24 janvier 2008Date d'inscription 2 octobre 2017 Dernière intervention - 27 nov. 2016 à 22:09
-1
Utile
1
j'ai le même résultat :/
yg_be 4149 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 15 décembre 2017 Dernière intervention - 28 nov. 2016 à 09:00
Ton système est configuré pour utiliser le point comme séparateur décimal?
roideseaux 251 Messages postés jeudi 24 janvier 2008Date d'inscription 2 octobre 2017 Dernière intervention - Modifié par roideseaux le 28/11/2016 à 19:47
-1
Utile
1
Oui, j'ai le point configuré en séparateur décimal, j'ai essayé de rajouter dans rdsnum ce que tu as rajouté dans rdsstr mais j’ai toujours la même chose :/
Option Explicit
Function rdsnum(ByVal inp As String) As Single
rdsnum = 0
Do While Len(inp) > 0
    If IsNumeric(inp) Or c = "." Then
        rdsnum = inp
        Exit Function
    End If
    inp = Left(inp, Len(inp) - 1)
Loop
rdsnum = inp
End Function
Function rdsstr(ByVal inp As String) As String
Dim c As String
Do While Len(inp) > 0
    c = Left(inp, 1)
    If IsNumeric(c) Or c = "." Then
        inp = Right(inp, Len(inp) - 1)
    Else
        Exit Do
    End If
Loop
rdsstr = inp
End Function
yg_be 4149 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 15 décembre 2017 Dernière intervention - 28 nov. 2016 à 19:55
Tu peux partager un fichier qui montre ce qui ne marche pas?
roideseaux 251 Messages postés jeudi 24 janvier 2008Date d'inscription 2 octobre 2017 Dernière intervention - 28 nov. 2016 à 22:12
-1
Utile
11
A priori, je ne peux pas mettre de lien...
Tu pourrais m'indiquer ou je peut héberger pour que tu puisses y jeter un oeil ?
yg_be 4149 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 15 décembre 2017 Dernière intervention - 29 nov. 2016 à 19:50
et en changeant
single
en
double
dans
Function rdsnum(ByVal inp As String) As Single
?
roideseaux 251 Messages postés jeudi 24 janvier 2008Date d'inscription 2 octobre 2017 Dernière intervention - 29 nov. 2016 à 21:06
Impecc !

Bon maintenant que cette étape est faite, je passe a la suite... (c'est à dire la comparaison avec mon autre feuille...)
roideseaux 251 Messages postés jeudi 24 janvier 2008Date d'inscription 2 octobre 2017 Dernière intervention - 29 nov. 2016 à 22:46
Ca fonctionne très bien pour les cases ou il y a effectivement un truc du genre 4.7k mais dans celles qui ont simplement du texte, je me retrouve le début coupé...
yg_be 4149 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 15 décembre 2017 Dernière intervention - 29 nov. 2016 à 22:57
et avec ceci?
Function rdsstr(ByVal inp As String) As String
Dim c As String
Do While Len(inp) > 0
    c = Left(inp, 1)
    If IsNumeric(c) Or c = "." or c = "," Then
        inp = Right(inp, Len(inp) - 1)
    Else
        Exit Do
    End If
Loop
rdsstr = inp
End Function
roideseaux 251 Messages postés jeudi 24 janvier 2008Date d'inscription 2 octobre 2017 Dernière intervention - 29 nov. 2016 à 23:46
Impeccable, ca fonctionne :)
Un jour j'essayerais de lire les définitions de chaque commandes ^^
Merci !
roideseaux 251 Messages postés jeudi 24 janvier 2008Date d'inscription 2 octobre 2017 Dernière intervention - 28 nov. 2016 à 23:32
-1
Utile
2
Voilà un lien pour obtenir mon fichier
http://www.cjoint.com/c/FKCwCQhww7x
Je voudrais obtenir dans les cases V15 et W15 respectivement les chiffres et les lettres de la case N15
Idem pour toutes les lignes

Et si quelqu'un peut également jeter un rapide coup d'oeil à ma macro pour créer un fichier et y coller le contenu des lignes qui ne sont pas vides de la colonne A a T, ce serait cool (parce que là aussi je butte :/)
yg_be 4149 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 15 décembre 2017 Dernière intervention - 29 nov. 2016 à 19:52
Peut-être mieux de faire une autre question pour le deuxième sujet?
roideseaux 251 Messages postés jeudi 24 janvier 2008Date d'inscription 2 octobre 2017 Dernière intervention > yg_be 4149 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 15 décembre 2017 Dernière intervention - 29 nov. 2016 à 21:05
ouai ^^