Microsoft 365 Coder en vba une formule

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonsoir à toutes et à tous,

Je bute sur un code que je n'arrive pas à faire.

J'ai cette formule dans ma cellule "F7":
=SI(CNUM(GAUCHE(F7;2))<>33;33&DROITE(F7;9);CNUM(DROITE(F9;3)&DROITE(F7;9)))

Je voudrais la traduire en code VBA dans mon code feuille
Private Sub Worksheet_SelectionChange(ByVal R As Range)
If Not Intersect(R, Range("f6:f15")) Is Nothing Then
MsgBoxListeDeChoix

J'ai cette formule dans une cellule :
=SI(CNUM(GAUCHE(F7;2))<>33;33&DROITE(F7;9);CNUM(DROITE(F9;3)&DROITE(F7;9)))
comme suit :
F7 = activecell (cellule active qui n'est jamais la même),
F9 = toujours A1

Auriez-vous le bon code ?
Si besoin, je ferai un petit fichier test.
Je vous remercie,
lionel :)
 

cp4

XLDnaute Barbatruc
Bonsoir à toutes et à tous,

Je bute sur un code que je n'arrive pas à faire.

J'ai cette formule dans ma cellule "F7":
=SI(CNUM(GAUCHE(F7;2))<>33;33&DROITE(F7;9);CNUM(DROITE(F9;3)&DROITE(F7;9)))

Je voudrais la traduire en code VBA dans mon code feuille
Private Sub Worksheet_SelectionChange(ByVal R As Range)
If Not Intersect(R, Range("f6:f15")) Is Nothing Then
MsgBoxListeDeChoix

J'ai cette formule dans une cellule :
=SI(CNUM(GAUCHE(F7;2))<>33;33&DROITE(F7;9);CNUM(DROITE(F9;3)&DROITE(F7;9)))
comme suit :
F7 = activecell (cellule active qui n'est jamais la même),
F9 = toujours A1

Auriez-vous le bon code ?
Si besoin, je ferai un petit fichier test.
Je vous remercie,
lionel :)
Bonsoir,

Moi j'utilise l'enregistreur de macro. Alors, je sélectionne la cellule qui contient la formule, ensuite dans la barre de formule, je sélectionne la formule puis je fais un Ctrl+C, je termine par la touche 'Entrée'. Et j'arrête l'enregistrement de la macro.

J'espère que ça solutionnera ton problème.

Bonne soirée.
 

Jacky67

XLDnaute Barbatruc
Bonsoir à toutes et à tous,

Je bute sur un code que je n'arrive pas à faire.

J'ai cette formule dans ma cellule "F7":
=SI(CNUM(GAUCHE(F7;2))<>33;33&DROITE(F7;9);CNUM(DROITE(F9;3)&DROITE(F7;9)))

Je voudrais la traduire en code VBA dans mon code feuille
Private Sub Worksheet_SelectionChange(ByVal R As Range)
If Not Intersect(R, Range("f6:f15")) Is Nothing Then
MsgBoxListeDeChoix

J'ai cette formule dans une cellule :
=SI(CNUM(GAUCHE(F7;2))<>33;33&DROITE(F7;9);CNUM(DROITE(F9;3)&DROITE(F7;9)))
comme suit :
F7 = activecell (cellule active qui n'est jamais la même),
F9 = toujours A1

Auriez-vous le bon code ?
Si besoin, je ferai un petit fichier test.
Je vous remercie,
lionel :)
Bonjour,
J'ai cette formule dans ma cellule "F7":
Si cette formule est en F7, il y a une référence circulaire
Ca Gaz pas 😷😷 jo

Sinon pour la cellule active
VB:
    ActiveCell.Formula = "=IF(VALUE(LEFT(f7,2))<>33,33&RIGHT(f7,9),VALUE(RIGHT(f9,3)&RIGHT(f7,9)))"
pour supprimer la formule
Code:
    ActiveCell.Value = ActiveCell.Value
 
Dernière édition:

vgendron

XLDnaute Barbatruc
Salut Lionel
à savoir pour s'affranchir des formula local, francais anglais....
en VBA, il faut traduire en anglais
donc Gauche devient Left
droite... right !!! :-D
plus subtil.. les ; deviennent des ,

perso: j'utilise toujours la méthode suivante
Dim Formule as string
Formule="=if(cnum(left(F7,2))<>33,33 &right(F7,9),cnum(right(F9,3) &right(F7,9)))"
un petit msgbox Formule en cours de debug pour vérifier que je m'a pas gourré
et ensuite
range("A1").formula=Formule

PS: si tu mets cette formule en F7: il y a de fortes chances pour qu'un message t'annonce une référence circulaire...voire meme une erreur..
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonsoir,

Moi j'utilise l'enregistreur de macro. Alors, je sélectionne la cellule qui contient la formule, ensuite dans la barre de formule, je sélectionne la formule puis je fais un Ctrl+C, je termine par la touche 'Entrée'. Et j'arrête l'enregistrement de la macro.

J'espère que ça solutionnera ton problème.

Bonne soirée.
Salut Lionel
à savoir pour s'affranchir des formula local, francais anglais....
en VBA, il faut traduire en anglais
donc Gauche devient Left
droite... right !!! :-D
plus subtil.. les ; deviennent des ,

perso: j'utilise toujours la méthode suivante
Dim Formule as string
Formule="=if(cnum(left(F7,2))<>33,33 &right(F7,9),cnum(right(F9,3) &right(F7,9)))"
un petit msgbox Formule en cours de debug pour vérifier que je m'a pas gourré
et ensuite
range("A1").formula=Formule

PS: si tu mets cette formule en F7: il y a de fortes chances pour qu'un message t'annonce une référence circulaire...voire meme une erreur..
Bjr vgendron :)
merci pour les explications.
"PS: si tu mets cette formule en F7: il y a de fortes chances pour qu'un message t'annonce une référence circulaire...voire meme une erreur.."
Ma formule est bien en F7 dans mon fichier et il n'y a pas de référence circulaire :)

Bonsoir Jacky67 : pas de référence circulaire
Bonsoir cp4 :)
J'ai fait un petit fichier test,
lionel
 

Pièces jointes

  • Formule_test.xlsm
    17.4 KB · Affichages: 8

vgendron

XLDnaute Barbatruc
euh.. tu n'as pas de pb de ref circulaire.. parce que ta formule est en E7...
VB:
Sub mettreformule()
Dim Formule As String
Formule = "=if(value(left(F7,2))<>33,33 &right(F7,9),value(right(A1,3) &right(F7,9)))"
'MsgBox Formule

Range("E8").Formula = Formule
End Sub
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Re vgendron :)
Oui mais comment la coder en vba :

Private Sub Worksheet_SelectionChange(ByVal R As Range)
If Not Intersect(R, Range("f6:f15")) Is Nothing Then

Enregistreur de macro :
[E7] = "=IF(VALUE(LEFT(R7C[1],2))<>33,33&RIGHT(R7C[1],9),VALUE(RIGHT(R[-6]C[-4],3)&RIGHT(R7C[1],9)))"
Que je n'arrive pas à coder, sachant que :
F7 = activecell (cellule active qui n'est jamais la même),
F9 = toujours A1

End If
End Sub
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Re-Bonjour :)
lol, en espérant être plus clair,

Je reformule :
J'ai en F7 un numéro de téléphone qui commence pas 33 et 9 chiffres
le 33 est l'indicatif France
Les départements Outre mer commencent par 3 autres chiffres
Le but est de remplacer le 33 par l'indicatuf qui est en A1
Le résultat souhaité est que la cellule E7 prenne la valeur des 9 derniers chiffres de F7 avec la valeur de A1
si clic en E7 : E7 prend la valeur 687111111111 (A1 et les 9chiffres de F7)
si clic en E8 : E8 prend la valeur 687222222222 (A1 et les 9chiffres de F8)
etc…

Je joins un nouveau fichier test,
Merci encore une fois à toutes et à tous,
lionel :)
 

Pièces jointes

  • inputBox_ModifTel4_test.xlsm
    19.1 KB · Affichages: 10

cp4

XLDnaute Barbatruc
Re-Bonjour :)
lol, en espérant être plus clair,

Je reformule :
J'ai en F7 un numéro de téléphone qui commence pas 33 et 9 chiffres
le 33 est l'indicatif France
Les départements Outre mer commencent par 3 autres chiffres
Le but est de remplacer le 33 par l'indicatuf qui est en A1
Le résultat souhaité est que la cellule E7 prenne la valeur des 9 derniers chiffres de F7 avec la valeur de A1
si clic en E7 : E7 prend la valeur 687111111111 (A1 et les 9chiffres de F7)
si clic en E8 : E8 prend la valeur 687222222222 (A1 et les 9chiffres de F8)
etc…

Je joins un nouveau fichier test,
Merci encore une fois à toutes et à tous,
lionel :)
Bonjour,

Pas beaucoup de temps aujourd'hui, à tester
VB:
Private Sub Worksheet_SelectionChange(ByVal R As Range)
If Not Intersect(R, Range("e7:e13")) Is Nothing Then
'enregistreur de macro
'[E7] = "=IF(VALUE(LEFT(RC[1],2))<>33,33&RIGHT(RC[1],9),R1C[-4]&RIGHT(RC[1],9))"
ActiveCell.FormulaR1C1 = _
        "=IF(VALUE(LEFT(RC[1],2))<>33,33&RIGHT(RC[1],9),R1C[-4]&RIGHT(RC[1],9))"
End If
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 115
Messages
2 085 453
Membres
102 890
dernier inscrit
selkis