Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Intégrer une fonction dans Macro

5 réponses
Avatar
Jean-Paul V
Bonjour à tous
J'ai souvent besoin de récupérer des chiffres sur Excel par copie partiel
sur écran , malheureusement je récupère par exemple 2.093,63CR en le collant
dans une cellule Excel , cette cellule se nommant POINTEUR j'ai la fonction
qui me transforme bien ce libellé en valeur :
=SI(ESTNUM(POINTEUR)=1;POINTEUR;SI(POINTEUR="";0;SI(OU(DROITE(POINTEUR;1)="-";DROITE(POINTEUR;2)="CR");-CNUM(SUBSTITUE(SUBSTITUE(SUBSTITUE(POINTEUR;"-";"");"CR";"");".";""));CNUM(SUBSTITUE(POINTEUR;".";"")))))
Je voudrais maintenant mettre cette fonction dans une Macro dans PERSO.xls.
Comment corriger cette Macro qui ne marche pas :

Sub Valeur()
'Nommer la cellule active
ActiveCell.Name = "POINTEUR"
'Déplace la cellule active d'une colonne vers la droite
Dim LigVar, ColVar
LigVar = 0
ColVar = 1
Selection.Offset(LigVar, ColVar).Select
'Crée le Nom RESULTVAL
ActiveCell.Name = "RESULTVAL"
Range("RESULTVAL").Value =
SI(ESTNUM(POINTEUR)=1;POINTEUR;SI(POINTEUR="";0;SI(OU(DROITE(POINTEUR;1)="-";DROITE(POINTEUR;2)="CR");-CNUM(SUBSTITUE(SUBSTITUE(SUBSTITUE(POINTEUR;"-";"");"CR";"");".";""));CNUM(SUBSTITUE(POINTEUR;".";"")))))
End Sub
Comment corriger ?

5 réponses

Avatar
Ardus Petus
Voici une fonction personnalisée qui fait la conversion:
si ta valeur 2.093,63CR est en A1, tu mets en B1 =conversion(A1)

Cordialement,
--
AP

'----------------------
Function conversion(v As Variant) As Double
If IsNumeric(v) Then
convesion = v
Else
v = Replace(v, ".", "")
If Right(v, 1) = "-" Then
conversion = -CDbl(Left(v, Len(v) - 1))
ElseIf Right(v, 2) = "CR" Then
conversion = -CDbl(Left(v, Len(v) - 2))
Else
conversion = CDbl(v)
End If
End If
End Function
'---------------------------

"Jean-Paul V" a écrit dans le message
de news:
Bonjour à tous
J'ai souvent besoin de récupérer des chiffres sur Excel par copie partiel
sur écran , malheureusement je récupère par exemple 2.093,63CR en le
collant

dans une cellule Excel , cette cellule se nommant POINTEUR j'ai la
fonction

qui me transforme bien ce libellé en valeur :

=SI(ESTNUM(POINTEUR)=1;POINTEUR;SI(POINTEUR="";0;SI(OU(DROITE(POINTEUR;1)="-

";DROITE(POINTEUR;2)="CR");-CNUM(SUBSTITUE(SUBSTITUE(SUBSTITUE(POINTEUR;"-";
"");"CR";"");".";""));CNUM(SUBSTITUE(POINTEUR;".";"")))))
Je voudrais maintenant mettre cette fonction dans une Macro dans
PERSO.xls.

Comment corriger cette Macro qui ne marche pas :

Sub Valeur()
'Nommer la cellule active
ActiveCell.Name = "POINTEUR"
'Déplace la cellule active d'une colonne vers la droite
Dim LigVar, ColVar
LigVar = 0
ColVar = 1
Selection.Offset(LigVar, ColVar).Select
'Crée le Nom RESULTVAL
ActiveCell.Name = "RESULTVAL"
Range("RESULTVAL").Value >
SI(ESTNUM(POINTEUR)=1;POINTEUR;SI(POINTEUR="";0;SI(OU(DROITE(POINTEUR;1)="-"

;DROITE(POINTEUR;2)="CR");-CNUM(SUBSTITUE(SUBSTITUE(SUBSTITUE(POINTEUR;"-";"
");"CR";"");".";""));CNUM(SUBSTITUE(POINTEUR;".";"")))))
End Sub
Comment corriger ?



Avatar
Jean-Paul V
Merci bien ça marche !

Bonne Journée



Voici une fonction personnalisée qui fait la conversion:
si ta valeur 2.093,63CR est en A1, tu mets en B1 =conversion(A1)

Cordialement,
--
AP

'----------------------
Function conversion(v As Variant) As Double
If IsNumeric(v) Then
convesion = v
Else
v = Replace(v, ".", "")
If Right(v, 1) = "-" Then
conversion = -CDbl(Left(v, Len(v) - 1))
ElseIf Right(v, 2) = "CR" Then
conversion = -CDbl(Left(v, Len(v) - 2))
Else
conversion = CDbl(v)
End If
End If
End Function
'---------------------------

"Jean-Paul V" a écrit dans le message
de news:
Bonjour à tous
J'ai souvent besoin de récupérer des chiffres sur Excel par copie partiel
sur écran , malheureusement je récupère par exemple 2.093,63CR en le
collant

dans une cellule Excel , cette cellule se nommant POINTEUR j'ai la
fonction

qui me transforme bien ce libellé en valeur :

=SI(ESTNUM(POINTEUR)=1;POINTEUR;SI(POINTEUR="";0;SI(OU(DROITE(POINTEUR;1)="-

";DROITE(POINTEUR;2)="CR");-CNUM(SUBSTITUE(SUBSTITUE(SUBSTITUE(POINTEUR;"-";
"");"CR";"");".";""));CNUM(SUBSTITUE(POINTEUR;".";"")))))
Je voudrais maintenant mettre cette fonction dans une Macro dans
PERSO.xls.

Comment corriger cette Macro qui ne marche pas :

Sub Valeur()
'Nommer la cellule active
ActiveCell.Name = "POINTEUR"
'Déplace la cellule active d'une colonne vers la droite
Dim LigVar, ColVar
LigVar = 0
ColVar = 1
Selection.Offset(LigVar, ColVar).Select
'Crée le Nom RESULTVAL
ActiveCell.Name = "RESULTVAL"
Range("RESULTVAL").Value > >
SI(ESTNUM(POINTEUR)=1;POINTEUR;SI(POINTEUR="";0;SI(OU(DROITE(POINTEUR;1)="-"

;DROITE(POINTEUR;2)="CR");-CNUM(SUBSTITUE(SUBSTITUE(SUBSTITUE(POINTEUR;"-";"
");"CR";"");".";""));CNUM(SUBSTITUE(POINTEUR;".";"")))))
End Sub
Comment corriger ?








Avatar
Jean-Paul V
Re bonjour

1 ) Après un test plus poussé la macro fonction ne fonctionne pas lorsque la
cellule est déjà numérique exemple : 97,25 , est-il possible de la corriger ?
2 ) Comme elle fonctionne à 98% je l'ai intégrée dans une macro mise dans
PERSO.xls.Y a-til une autre manière plus élégante d'écrire la macro ?
Sub Valeur()
'Nommer la cellule active
ActiveCell.Name = "POINTEUR"
If Range("POINTEUR").Value <> 0 Then
'Déplace la cellule active d'une colonne vers la droite
Dim LigVar, ColVar
LigVar = 0
ColVar = 1
Selection.Offset(LigVar, ColVar).Select
ActiveCell.FormulaR1C1 = "=PERSO.XLS!conversion(POINTEUR)"
Selection.Copy
Range("POINTEUR").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:úlse
'Déplace la cellule active d'une colonne vers la droite
'Dim LigVar, ColVar
LigVar = 0
ColVar = 1
Selection.Offset(LigVar, ColVar).Select
Selection.ClearContents
'Déplace la cellule active d'une colonne vers la gauche
'Dim LigVar, ColVar
LigVar = 0
ColVar = -1
Selection.Offset(LigVar, ColVar).Select
'Déplace la cellule active d'une ligne vers le bas
LigVar = 1
ColVar = 0
Selection.Offset(LigVar, ColVar).Select
Valeur
Else
Exit Sub
End If
End Sub

3 ) Si on n'arrive pas à modifier conversion , on pourrait peut-être
interroger le contenu de la cellule active et si c'est numérique ne rien
faire , mais comme je suis nul je ne sais pas cooment écrire cette
instruction.

merci encore pour votre aide


Voici une fonction personnalisée qui fait la conversion:
si ta valeur 2.093,63CR est en A1, tu mets en B1 =conversion(A1)

Cordialement,
--
AP

'----------------------
Function conversion(v As Variant) As Double
If IsNumeric(v) Then
convesion = v
Else
v = Replace(v, ".", "")
If Right(v, 1) = "-" Then
conversion = -CDbl(Left(v, Len(v) - 1))
ElseIf Right(v, 2) = "CR" Then
conversion = -CDbl(Left(v, Len(v) - 2))
Else
conversion = CDbl(v)
End If
End If
End Function
'---------------------------

"Jean-Paul V" a écrit dans le message
de news:
Bonjour à tous
J'ai souvent besoin de récupérer des chiffres sur Excel par copie partiel
sur écran , malheureusement je récupère par exemple 2.093,63CR en le
collant

dans une cellule Excel , cette cellule se nommant POINTEUR j'ai la
fonction

qui me transforme bien ce libellé en valeur :

=SI(ESTNUM(POINTEUR)=1;POINTEUR;SI(POINTEUR="";0;SI(OU(DROITE(POINTEUR;1)="-

";DROITE(POINTEUR;2)="CR");-CNUM(SUBSTITUE(SUBSTITUE(SUBSTITUE(POINTEUR;"-";
"");"CR";"");".";""));CNUM(SUBSTITUE(POINTEUR;".";"")))))
Je voudrais maintenant mettre cette fonction dans une Macro dans
PERSO.xls.

Comment corriger cette Macro qui ne marche pas :

Sub Valeur()
'Nommer la cellule active
ActiveCell.Name = "POINTEUR"
'Déplace la cellule active d'une colonne vers la droite
Dim LigVar, ColVar
LigVar = 0
ColVar = 1
Selection.Offset(LigVar, ColVar).Select
'Crée le Nom RESULTVAL
ActiveCell.Name = "RESULTVAL"
Range("RESULTVAL").Value > >
SI(ESTNUM(POINTEUR)=1;POINTEUR;SI(POINTEUR="";0;SI(OU(DROITE(POINTEUR;1)="-"

;DROITE(POINTEUR;2)="CR");-CNUM(SUBSTITUE(SUBSTITUE(SUBSTITUE(POINTEUR;"-";"
");"CR";"");".";""));CNUM(SUBSTITUE(POINTEUR;".";"")))))
End Sub
Comment corriger ?








Avatar
Ardus Petus
1) Faute de frappe:

'--------------
Function conversion(v As Variant) As Double
If IsNumeric(v) Then
conversion = v
Else
v = Replace(v, ".", "")
If Right(v, 1) = "-" Then
conversion = -CDbl(Left(v, Len(v) - 1))
ElseIf Right(v, 2) = "CR" Then
conversion = -CDbl(Left(v, Len(v) - 2))
Else
conversion = CDbl(v)
End If
End If
End Function
'----------------

2)
Ta macro Valeur() est bien compliquée.
Le code suivant effectue le même travail:

Sub Valeur()
ActiveCell.Value = conversion(ActiveCell.Value)
ActiveCell.Offset(1, 0).Select
End Sub

Tu peux mettre ma fonction convesion() tans le même modue que ta macto
Valeur()


3) Sans objet

Cordialement,
--
AP

"Jean-Paul V" a écrit dans le message
de news:
Re bonjour

1 ) Après un test plus poussé la macro fonction ne fonctionne pas lorsque
la

cellule est déjà numérique exemple : 97,25 , est-il possible de la
corriger ?

2 ) Comme elle fonctionne à 98% je l'ai intégrée dans une macro mise dans
PERSO.xls.Y a-til une autre manière plus élégante d'écrire la macro ?
Sub Valeur()
'Nommer la cellule active
ActiveCell.Name = "POINTEUR"
If Range("POINTEUR").Value <> 0 Then
'Déplace la cellule active d'une colonne vers la droite
Dim LigVar, ColVar
LigVar = 0
ColVar = 1
Selection.Offset(LigVar, ColVar).Select
ActiveCell.FormulaR1C1 = "=PERSO.XLS!conversion(POINTEUR)"
Selection.Copy
Range("POINTEUR").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone,
SkipBlanks:= _

False, Transpose:úlse
'Déplace la cellule active d'une colonne vers la droite
'Dim LigVar, ColVar
LigVar = 0
ColVar = 1
Selection.Offset(LigVar, ColVar).Select
Selection.ClearContents
'Déplace la cellule active d'une colonne vers la gauche
'Dim LigVar, ColVar
LigVar = 0
ColVar = -1
Selection.Offset(LigVar, ColVar).Select
'Déplace la cellule active d'une ligne vers le bas
LigVar = 1
ColVar = 0
Selection.Offset(LigVar, ColVar).Select
Valeur
Else
Exit Sub
End If
End Sub

3 ) Si on n'arrive pas à modifier conversion , on pourrait peut-être
interroger le contenu de la cellule active et si c'est numérique ne rien
faire , mais comme je suis nul je ne sais pas cooment écrire cette
instruction.

merci encore pour votre aide


Voici une fonction personnalisée qui fait la conversion:
si ta valeur 2.093,63CR est en A1, tu mets en B1 =conversion(A1)

Cordialement,
--
AP

'----------------------
Function conversion(v As Variant) As Double
If IsNumeric(v) Then
convesion = v
Else
v = Replace(v, ".", "")
If Right(v, 1) = "-" Then
conversion = -CDbl(Left(v, Len(v) - 1))
ElseIf Right(v, 2) = "CR" Then
conversion = -CDbl(Left(v, Len(v) - 2))
Else
conversion = CDbl(v)
End If
End If
End Function
'---------------------------

"Jean-Paul V" a écrit dans le
message


de news:
Bonjour à tous
J'ai souvent besoin de récupérer des chiffres sur Excel par copie
partiel



sur écran , malheureusement je récupère par exemple 2.093,63CR en le
collant

dans une cellule Excel , cette cellule se nommant POINTEUR j'ai la
fonction

qui me transforme bien ce libellé en valeur :



=SI(ESTNUM(POINTEUR)=1;POINTEUR;SI(POINTEUR="";0;SI(OU(DROITE(POINTEUR;1)="-



";DROITE(POINTEUR;2)="CR");-CNUM(SUBSTITUE(SUBSTITUE(SUBSTITUE(POINTEUR;"-";


"");"CR";"");".";""));CNUM(SUBSTITUE(POINTEUR;".";"")))))
Je voudrais maintenant mettre cette fonction dans une Macro dans
PERSO.xls.

Comment corriger cette Macro qui ne marche pas :

Sub Valeur()
'Nommer la cellule active
ActiveCell.Name = "POINTEUR"
'Déplace la cellule active d'une colonne vers la droite
Dim LigVar, ColVar
LigVar = 0
ColVar = 1
Selection.Offset(LigVar, ColVar).Select
'Crée le Nom RESULTVAL
ActiveCell.Name = "RESULTVAL"
Range("RESULTVAL").Value > > >


SI(ESTNUM(POINTEUR)=1;POINTEUR;SI(POINTEUR="";0;SI(OU(DROITE(POINTEUR;1)="-"



;DROITE(POINTEUR;2)="CR");-CNUM(SUBSTITUE(SUBSTITUE(SUBSTITUE(POINTEUR;"-";"


");"CR";"");".";""));CNUM(SUBSTITUE(POINTEUR;".";"")))))
End Sub
Comment corriger ?










Avatar
Jean-Paul V
Merci ça marche

et j'ai avec tes conseilsmodifié ma macro :

Sub Valeur()
If ActiveCell.Value <> 0 Then
ActiveCell.Value = conversion(ActiveCell.Value)
ActiveCell.Offset(1, 0).Select
ValeurB
Else
Exit Sub
End If
End Sub



1) Faute de frappe:

'--------------
Function conversion(v As Variant) As Double
If IsNumeric(v) Then
conversion = v
Else
v = Replace(v, ".", "")
If Right(v, 1) = "-" Then
conversion = -CDbl(Left(v, Len(v) - 1))
ElseIf Right(v, 2) = "CR" Then
conversion = -CDbl(Left(v, Len(v) - 2))
Else
conversion = CDbl(v)
End If
End If
End Function
'----------------

2)
Ta macro Valeur() est bien compliquée.
Le code suivant effectue le même travail:

Sub Valeur()
ActiveCell.Value = conversion(ActiveCell.Value)
ActiveCell.Offset(1, 0).Select
End Sub

Tu peux mettre ma fonction convesion() tans le même modue que ta macto
Valeur()


3) Sans objet

Cordialement,
--
AP

"Jean-Paul V" a écrit dans le message
de news:
Re bonjour

1 ) Après un test plus poussé la macro fonction ne fonctionne pas lorsque
la

cellule est déjà numérique exemple : 97,25 , est-il possible de la
corriger ?

2 ) Comme elle fonctionne à 98% je l'ai intégrée dans une macro mise dans
PERSO.xls.Y a-til une autre manière plus élégante d'écrire la macro ?
Sub Valeur()
'Nommer la cellule active
ActiveCell.Name = "POINTEUR"
If Range("POINTEUR").Value <> 0 Then
'Déplace la cellule active d'une colonne vers la droite
Dim LigVar, ColVar
LigVar = 0
ColVar = 1
Selection.Offset(LigVar, ColVar).Select
ActiveCell.FormulaR1C1 = "=PERSO.XLS!conversion(POINTEUR)"
Selection.Copy
Range("POINTEUR").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone,
SkipBlanks:= _

False, Transpose:úlse
'Déplace la cellule active d'une colonne vers la droite
'Dim LigVar, ColVar
LigVar = 0
ColVar = 1
Selection.Offset(LigVar, ColVar).Select
Selection.ClearContents
'Déplace la cellule active d'une colonne vers la gauche
'Dim LigVar, ColVar
LigVar = 0
ColVar = -1
Selection.Offset(LigVar, ColVar).Select
'Déplace la cellule active d'une ligne vers le bas
LigVar = 1
ColVar = 0
Selection.Offset(LigVar, ColVar).Select
Valeur
Else
Exit Sub
End If
End Sub

3 ) Si on n'arrive pas à modifier conversion , on pourrait peut-être
interroger le contenu de la cellule active et si c'est numérique ne rien
faire , mais comme je suis nul je ne sais pas cooment écrire cette
instruction.

merci encore pour votre aide


Voici une fonction personnalisée qui fait la conversion:
si ta valeur 2.093,63CR est en A1, tu mets en B1 =conversion(A1)

Cordialement,
--
AP

'----------------------
Function conversion(v As Variant) As Double
If IsNumeric(v) Then
convesion = v
Else
v = Replace(v, ".", "")
If Right(v, 1) = "-" Then
conversion = -CDbl(Left(v, Len(v) - 1))
ElseIf Right(v, 2) = "CR" Then
conversion = -CDbl(Left(v, Len(v) - 2))
Else
conversion = CDbl(v)
End If
End If
End Function
'---------------------------

"Jean-Paul V" a écrit dans le
message


de news:
Bonjour à tous
J'ai souvent besoin de récupérer des chiffres sur Excel par copie
partiel



sur écran , malheureusement je récupère par exemple 2.093,63CR en le
collant

dans une cellule Excel , cette cellule se nommant POINTEUR j'ai la
fonction

qui me transforme bien ce libellé en valeur :



=SI(ESTNUM(POINTEUR)=1;POINTEUR;SI(POINTEUR="";0;SI(OU(DROITE(POINTEUR;1)="-



";DROITE(POINTEUR;2)="CR");-CNUM(SUBSTITUE(SUBSTITUE(SUBSTITUE(POINTEUR;"-";


"");"CR";"");".";""));CNUM(SUBSTITUE(POINTEUR;".";"")))))
Je voudrais maintenant mettre cette fonction dans une Macro dans
PERSO.xls.

Comment corriger cette Macro qui ne marche pas :

Sub Valeur()
'Nommer la cellule active
ActiveCell.Name = "POINTEUR"
'Déplace la cellule active d'une colonne vers la droite
Dim LigVar, ColVar
LigVar = 0
ColVar = 1
Selection.Offset(LigVar, ColVar).Select
'Crée le Nom RESULTVAL
ActiveCell.Name = "RESULTVAL"
Range("RESULTVAL").Value > > > >


SI(ESTNUM(POINTEUR)=1;POINTEUR;SI(POINTEUR="";0;SI(OU(DROITE(POINTEUR;1)="-"



;DROITE(POINTEUR;2)="CR");-CNUM(SUBSTITUE(SUBSTITUE(SUBSTITUE(POINTEUR;"-";"


");"CR";"");".";""));CNUM(SUBSTITUE(POINTEUR;".";"")))))
End Sub
Comment corriger ?