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

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

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

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