Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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,

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
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
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
 

Staple1600

XLDnaute Barbatruc
Re

En guise d'illustration
(à tester sur une feuille vierge)
VB:
Sub Macro1()
Dim Ligne As Long
Ligne = 5
[B4] = 2
[D4] = 40
[C9] = -1558
[C4].FormulaR1C1 = "=RC[-1]+RC[1]-R[" & Ligne & "]C"
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
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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…