Microsoft 365 Coder en vba une formule

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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 🙂
 
Bonjour AtTheOne 🙂
Merci pour ce code mais ça ne vas pas fonctionner
Ce que je souhaite est que le code :
ActiveCell.FormulaR1C1 = _
"=IF(VALUE(LEFT(RC[1],2))<>33,33&RIGHT(RC[1],9),R1C[-4]&RIGHT(RC[1],9))"
me renvoie le résultat (la valeur) de la formule qu'elle aurait trouvée ... pas forcément 33
lionel 🙂
 
Re,
Tu utilises quel événement, double clic, right clic ...?
Ce que j'ai compris
  • En A1 tu as l'indicatif du département d'outremer
  • A droite de la cellule active un n° commençant par 33 ou non
  • Si le n° ne commence pas par 33 tu renvoies 33 suivit des 9 chiffres de droite du n°
  • Si le n° commence par 33 tu renvoies l'indicatif en A1 suivit des 9 chiffres de droite du n°
C'est du moins ce que je comprends de ta formule et de

Est-ce bien ça ?
Amicalement
Alain
 
Re
Ce que je souhaite est que le code :
ActiveCell.FormulaR1C1 = _
"=IF(VALUE(LEFT(RC[1],2))<>33,33&RIGHT(RC[1],9),R1C[-4]&RIGHT(RC[1],9))"
me renvoie le résultat (la valeur) de la formule qu'elle aurait trouvée ... pas forcément 33
J'utilise :
Code:
Private Sub Worksheet_SelectionChange(ByVal R As Range)
If Not Intersect(R, Range("e7:e14")) Is Nothing Then
ActiveCell.FormulaR1C1 = "=IF(VALUE(LEFT(RC[1],2))<>33,33&RIGHT(RC[1],9),VALUE(RIGHT(R1C[-4],3)&RIGHT(RC[1],9)))"
'renvoyer dans ma cellule la valeur du résultat et NON la formule
End If
End Sub
🙂
 
Re

With R.offset(0,1)

R=iif(left(.value,2)<>"33", _
clng("33"&right(.value,9)), _
clng(cells(R.row,1)&right(.value,9))

End With

Ici on lit l'indicatif en colonne A sur la même ligne que R (qui devrait être la cellule active puisqu'elle a déclenché l'événement selection_change
Toujours sur mon téléphone, je ne peux pas tester
Amicalement
Alain
 
Re

With R.offset(0,1)

R=iif(left(.value,2)<>"33", _
clng("33"&right(.value,9)), _
clng(cells(R.row,1)&right(.value,9))

End With

Ici on lit l'indicatif en colonne A sur la même ligne que R (qui devrait être la cellule active puisqu'elle a déclenché l'événement selection_change
Toujours sur mon téléphone, je ne peux pas tester
Amicalement
Alain
Désolé : ne fonctionne pas 🙂
 
Re à tous 🙂
Bon ... j'ai trouvé en ajoutant simplement ce ch'ti code :
ActiveCell.value = ActiveCell.value

Mais je sais que c'est possible en modifiant directement ce code
:
ActiveCell.FormulaR1C1 = "=IF(VALUE(LEFT(RC[1],2))<>33,33&RIGHT(RC[1],9),VALUE(RIGHT(R1C[-4],3)&RIGHT(RC[1],9)))"

Je ne retrouve pas comment le faire Grrrrrr !!! 😡
lionel 🙂
 
Bonjour cp4 🙂
C'est nickel, je te remercie ...
Juste, je voudrais renvoyer dans la cellule la valeur du résultat de la formule et non la formule "
ActiveCell.FormulaR1C1 = _
"=IF(VALUE(LEFT(RC[1],2))<>33,33&RIGHT(RC[1],9),R1C[-4]&RIGHT(RC[1],9))"
lionel 🙂
Re, @Usine à gaz , comme ceci
VB:
Private Sub Worksheet_SelectionChange(ByVal R As Range)
    If Not Intersect(R, Range("e7:e13")) Is Nothing Then
        'enregistreur de macro
        R.FormulaR1C1 = "=IF(VALUE(LEFT(RC[1],2))<>33,33&RIGHT(RC[1],9),R1C[-4]&RIGHT(RC[1],9))"
        R = R.Value
    End If
End Sub

@AtTheOne 😉, stp pourrais-tu terminer la formule que tu as proposé au post#15

A+
 
Re à tous, et cp4
La formule du post #16 ?
Enrichi (BBcode):
With target
          .value=iif(left(.offset(0,1),2)<>"33", _ 
           "33"&right(.offset(0,1),9), _
            [A1]&right(.offset(0,1), 9)
End with
Pas facile avec le clavier du téléphone et mes gros doigts !
Il y avait une erreur dans le dernier .offset
, du coup j'ai rajouté les 0 pour le décalage de ligne.
Je compte sur vous pour tester, moi je ne peux pas, je peux juste apercevoir les fichiers sans macro.
Amicalement
Alain
 
Re re re à tous et à @cp4
Le code en entier tel que je le vois (avec R au lieu de Target)
Ce que j'ai compris
  • En A1 tu as l'indicatif du département d'outremer
  • A droite de la cellule active un n° commençant par 33 ou non
  • Si le n° ne commence pas par 33 tu renvoies 33 suivit des 9 chiffres de droite du n°
  • Si le n° commence par 33 tu renvoies l'indicatif A1 suivit des 9 chiffres de droite du n°

Enrichi (BBcode):
Private Sub Worksheet_SelectionChange(ByVal R As Range)
If Not Intersect(R,Range("e7:e14")) Is Nothing Then
   With R
      .value=iif(left(.offset(0,1),2)<>"33", _
      "33"&right(.offset(0,1),9), _
       [A1]&right(.offset(0,1), 9))
   End with
End If
End Sub
Amicalement
Alain
Modif : ajouté parenthèse fermante oubliée
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour