Faire des calculs avec le contenu d'une cellule
Résolu/Fermé
roideseaux
Messages postés
261
Date d'inscription
jeudi 24 janvier 2008
Statut
Membre
Dernière intervention
16 février 2023
-
25 nov. 2016 à 10:21
roideseaux Messages postés 261 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 16 février 2023 - 29 nov. 2016 à 23:46
roideseaux Messages postés 261 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 16 février 2023 - 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 !
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 !
A voir également:
- Faire des calculs avec le contenu d'une cellule
- Aller à la ligne dans une cellule excel - Guide
- Excel cellule couleur si condition texte - Guide
- Le fichier à télécharger correspond au contenu brut d’un courrier électronique. de quel pays a été envoyé ce message ? - Guide
- Calculer une moyenne sur excel - Guide
- Bloquer une cellule excel avec $ - Guide
13 réponses
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 255
Modifié par eriiic le 28/11/2016 à 19:38
Modifié par eriiic le 28/11/2016 à 19:38
Bonjour,
à tester sur différents cas :
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
à 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
yg_be
Messages postés
23487
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 mars 2025
Ambassadeur
1 570
26 nov. 2016 à 10:15
26 nov. 2016 à 10:15
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.
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
Messages postés
23487
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 mars 2025
Ambassadeur
1 570
27 nov. 2016 à 21:22
27 nov. 2016 à 21:22
Avec ce code-ci:
Tu peux utiliser des formules telles que =rdsnum(A1) et =rdsstr(A1) pour obtenir soir le nombre, soit les lettres.
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
Messages postés
261
Date d'inscription
jeudi 24 janvier 2008
Statut
Membre
Dernière intervention
16 février 2023
5
27 nov. 2016 à 21:37
27 nov. 2016 à 21:37
Ç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
Messages postés
23487
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 mars 2025
1 570
27 nov. 2016 à 21:47
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
jordane45
Messages postés
38451
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 mars 2025
4 739
25 nov. 2016 à 10:25
25 nov. 2016 à 10:25
Bonjour
Quel code as tu écris ?
Quel code as tu écris ?
roideseaux
Messages postés
261
Date d'inscription
jeudi 24 janvier 2008
Statut
Membre
Dernière intervention
16 février 2023
5
25 nov. 2016 à 18:14
25 nov. 2016 à 18:14
J'ai récupéré ce code sur un autre sujet (qui est censé servir à séparer les éléments d'une adresse postale) :
L'erreur est au moment ou la macro est rendue à la ligne
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
Messages postés
38451
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 mars 2025
4 739
27 nov. 2016 à 17:59
27 nov. 2016 à 17:59
Je ne comprend pas trop ton code....
Sachant que :
Pourquoi ne pas directement utiliser la fonction "Split" ?
Vas voir ici : https://silkyroad.developpez.com/VBA/ManipulerChainesCaracteres/#LI-I
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 : https://silkyroad.developpez.com/VBA/ManipulerChainesCaracteres/#LI-I
roideseaux
Messages postés
261
Date d'inscription
jeudi 24 janvier 2008
Statut
Membre
Dernière intervention
16 février 2023
5
27 nov. 2016 à 19:20
27 nov. 2016 à 19:20
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 !
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
Messages postés
23487
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 mars 2025
1 570
27 nov. 2016 à 19:32
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
Messages postés
261
Date d'inscription
jeudi 24 janvier 2008
Statut
Membre
Dernière intervention
16 février 2023
5
27 nov. 2016 à 21:05
27 nov. 2016 à 21:05
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...
Je peux être plus précis, avec des exemples si besoin...
roideseaux
Messages postés
261
Date d'inscription
jeudi 24 janvier 2008
Statut
Membre
Dernière intervention
16 février 2023
5
27 nov. 2016 à 22:09
27 nov. 2016 à 22:09
j'ai le même résultat :/
yg_be
Messages postés
23487
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 mars 2025
1 570
28 nov. 2016 à 09:00
28 nov. 2016 à 09:00
Ton système est configuré pour utiliser le point comme séparateur décimal?
roideseaux
Messages postés
261
Date d'inscription
jeudi 24 janvier 2008
Statut
Membre
Dernière intervention
16 février 2023
5
Modifié par roideseaux le 28/11/2016 à 19:47
Modifié par roideseaux le 28/11/2016 à 19:47
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
Messages postés
23487
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 mars 2025
1 570
28 nov. 2016 à 19:55
28 nov. 2016 à 19:55
Tu peux partager un fichier qui montre ce qui ne marche pas?
roideseaux
Messages postés
261
Date d'inscription
jeudi 24 janvier 2008
Statut
Membre
Dernière intervention
16 février 2023
5
28 nov. 2016 à 22:12
28 nov. 2016 à 22:12
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 ?
Tu pourrais m'indiquer ou je peut héberger pour que tu puisses y jeter un oeil ?
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 255
28 nov. 2016 à 22:22
28 nov. 2016 à 22:22
cjoint.com pour déposer un fichier.
Et ce que je t'ai proposé, c'est bon ????
Chez moi oui en tout cas
Et ce que je t'ai proposé, c'est bon ????
Chez moi oui en tout cas
roideseaux
Messages postés
261
Date d'inscription
jeudi 24 janvier 2008
Statut
Membre
Dernière intervention
16 février 2023
5
>
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
28 nov. 2016 à 23:27
28 nov. 2016 à 23:27
Eh bien j'ai essayé quelques trucs mais je n'ai réussi à n'obtenir que les lettres, pas les chiffres :/
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 255
28 nov. 2016 à 23:50
28 nov. 2016 à 23:50
v = la valeur numérique
à condition d'avoir 2.2k et non 2,2k auquel cas :
v=Val(Replace(a, ",", "."))
qui fonctionne dans les 2 cas
à condition d'avoir 2.2k et non 2,2k auquel cas :
v=Val(Replace(a, ",", "."))
qui fonctionne dans les 2 cas
roideseaux
Messages postés
261
Date d'inscription
jeudi 24 janvier 2008
Statut
Membre
Dernière intervention
16 février 2023
5
>
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
28 nov. 2016 à 23:56
28 nov. 2016 à 23:56
Oui, ca j'ai compris, ce que je n'ai pas réussi, c'est à l'appeler à partir de ma feuille... :/
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 255
29 nov. 2016 à 00:19
29 nov. 2016 à 00:19
Il faut le mettre sous forme de fonction si tu veux l'appeler depuis une feuille (comme les autres exemples que tu as eu).
Option Explicit doit se trouver en début de module si tu veux qu'il serve.
Function rdsnum(ByVal inp As String) As Single rdsnum = Val(Replace(inp, ",", ".")) End Function Function rdsstr(ByVal inp As String) As String rdsstr = Mid(inp, Len(CStr(Val(Replace(inp, ",", ".")))) + 1) End Function
Option Explicit doit se trouver en début de module si tu veux qu'il serve.
roideseaux
Messages postés
261
Date d'inscription
jeudi 24 janvier 2008
Statut
Membre
Dernière intervention
16 février 2023
5
28 nov. 2016 à 23:32
28 nov. 2016 à 23:32
Voilà un lien pour obtenir mon fichier
https://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 :/)
https://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
Messages postés
23487
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 mars 2025
1 570
29 nov. 2016 à 19:52
29 nov. 2016 à 19:52
Peut-être mieux de faire une autre question pour le deuxième sujet?
roideseaux
Messages postés
261
Date d'inscription
jeudi 24 janvier 2008
Statut
Membre
Dernière intervention
16 février 2023
5
>
yg_be
Messages postés
23487
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 mars 2025
29 nov. 2016 à 21:05
29 nov. 2016 à 21:05
ouai ^^