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

Microsoft 365 Transformer une formule excel en code vba

eric66430

XLDnaute Nouveau
Bonjour,

J'ai une formule a modifier qui, une fois transformée via"? ActiveCell.Formula " me met un code erreur a la mise en place:

formule Excel : =MAJUSCULE((SI(ESTNUM(TROUVE("-";C4));STXT(C4;1;1)&STXT(C4;TROUVE("-";C4)+1;1);STXT(C4;1;2))&STXT(D4;1;1))&"-"&DROITE([@ID];3)&"-"&TEXTE(E4;"jjmmaaa-hhmm"))

code vba:

Private Sub LabelID_Fact_Click()
Feuil3.Select
Range("I2:I").Select
ActiveCell.FormulaR1C1 = UPPER((IF(ISNUMBER(FIND("-",C2:C)),MID(C2:C,1,1)&MID(C2:C,FIND("-",C2:C)+1,1),MID(C2:C,1,2))&MID(D2,1,1))&"-"&RIGHT([@ID],3)&"-"&TEXT(E2:E,"jjmmaaa-hhmm"))
End Sub

Ici le "IF" me met un code erreur "erreur de compilation" et "attendu expression"

Un truc que je pige pas, merci pour votre aide !
 
Solution
Bon pour conclure
Eric a voulu transposer une formule en VBA !!! aie ! pas évident
Donc il ne savait pas que dans ce cas ce n'est plus de l'adressage A1 , C2 ...etc mais en RC ( Row Col)
et que donc dans ce cas Vba agit par "offset" de la cellule en cours ; ex : si formule en D3 qui fait appel à C2
le Vba avec FormulaR1C1 donnera ="R[-1]C[-1] ....." donc très peu pour moi
Mieux vaut abandonner la formule et partir sur une résolution VBA totale
Info : Si fichier utilisé par plusieurs, attention aux formules si cel. non protégées !! un zig a vite fait d'écrire dedans donc d'effacer et en + Sauvegarde !!! le VBA évite tout ça

Bonne continuation

Phil69970

XLDnaute Barbatruc
Re

Plusieurs remarques (Pas forcément dans l’ordre) :

1)Tu as de la chance Hervé de n'avoir seulement que 2 solutions sans retour
Par contre , ici ces dernières semaines ( depuis octobre) j'ai 2 "post" résolu fichier clé en main sans réponse ??

2)Eric si j'ai insisté sur le code facture c'est que pour moi c'est un "langage inconnu" je parle en numéro de facture mais pas en code facture de plus pour moi le système tel que décrit par toi au post #14 n'est pas viable.
l'objectif est de créer un code facture a partir des 2 premières lettres du nom, de la première lettre du prénom, du mois de naissance et des 3 derniers chiffres de l'année de naissance et des 3 dernier chiffres du code client .
D'ailleurs tu t'en ai rendu compte au post #20 en rajoutant la date et l'heure
Perso je n'ai jamais vu de numéro de facture avec l'heure qui fait partie du numéro de facture.
Je pense que tu fais largement trop compliqué surtout pour 4 factures par jour mais c'est ton choix.

Je maintiens ma remarque :
Si c'est pour avoir un numéro de facture je te suggère plutôt cela:
Année de la facture ==> 2021
Mois de la facture ==> 12
N° d'ordre ==> 001 puis 002 etc

Avantage tes factures sont toujours dans l'ordre et se retrouve plus facilement

3)Sur la pratique du cross posting
ok compris donc si je dois poser une question je ne peu le faire que sur une seule plateforme ? ok mais je trouve cela un peu limitatif en terme de recherche de possibilités non ?

Pourtant l'explication de @David Aubert est très claire

Vu du demandeur c'est plus facile de poster tout azimut en attendant une "solution toute zone" MAIS vu de ceux qui cherchent des réponses c'est clairement se moquer d'eux.

Dans 9 fois sur 10 le demandeur ne viendra pas dire arrêter de chercher j'ai trouvé sur tel site cette réponse.

Je préfère clairement la solution "mono forum" pour sa question car il ne fait pas perdre du "temps de cerveau disponible" aux personnes qui prennent le temps de chercher et répondre à la question du demandeur.

4)Bien sur que le VBA permet l'écriture en A1, je plussoie Marcel.
Pas forcément : VBA peut aussi utiliser l'adressage A1.

5)La remarque d'Hervé est pertinente ....
Info : Si fichier utilisé par plusieurs, attention aux formules si cel. non protégées !! un zig a vite fait d'écrire dedans donc d'effacer et en + Sauvegarde !!! le VBA évite tout ça

Bonne lecture

@Phil69970
 

Discussions similaires

Réponses
1
Affichages
1 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…