Perso, je préfèrerais une variable à une constante. Ca permet de... la faire varier (même si ici ce n'est peut-être pas utile).
Pour ce qui est de la formule, la meilleure manière de la rédiger en VBA est de la rédiger dans la feuille Excel, puis de récupérer la formule dans la barre d'exécution (ctrl+G si pas affichée) pour en avoir la syntaxe "à peu près correcte". Il faut ensuite doubler les quotes à l'intérieur de la chaine puis affecter cette valeur à la variable/constante qui doit la recevoir. Ce n'est pas extraordinairement compliqué de fonctionner ainsi et ça permet surtout de se débrouiller tout seul pour la rédaction de la formule, car sauf à avoir exactement le même classeur sous les yeux, il est vite malaisé de créer la formule en VBA à la volée.
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
Qui plus est,
Au début de ton bloc With, intègre
Puis lance l'exécution en pas à pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Debug.Print .Address
Tu constateras vite l'anomalie.
Bien Cordialement.
Marcel
Dernier billet:
Suppression des doublons d'un tableau structuré, gestion d'un array
Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.
suite à demande de modification de la formule, en espérant avoir tout vu
Formule en excel
la même en VBA
Code : Sélectionner tout - Visualiser dans une fenêtre à part =SIERREUR(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SI(M1<>"";INDEX(SMS!$A:$B;EQUIV($P1;SMS!$A:$A;0);2);INDEX(SMS!$A:$C;EQUIV($P1;SMS!$A:$A;0);3)); "(Colonne C)";C1;1);"(Colonne D)";D1;1);"(Colonne B de la feuille MAPPING)";INDEX(MAPPING!$A:$B;EQUIV($O1;MAPPING!$A:$A;0);2);1);"(Colonne M)";M1;1);"(Colonne Q)";Q1;1);"(Colonne N)";N1);"(Colonne B)";B1);"")
nécessité de modifier la feuille SMS, ajout d'une autre proposition en colonne 3 pour traiter le cas où la colonne M de la feuille DATA n'est pas renseignée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Range("T1:T" & DerLig).FormulaR1C1 = "=IFERROR(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(IF(RC[-7]<>"""",INDEX(SMS!C1:C2,MATCH(RC16,SMS!C1,0),2),INDEX(SMS!C1:C3,MATCH(RC16,SMS!C1,0),3)), ""(Colonne C)"",RC[-17],1),""(Colonne D)"",RC[-16],1),""(Colonne B de la feuille MAPPING)"",INDEX(MAPPING!C1:C2,MATCH(RC15,MAPPING!C1,0),2),1),""(Colonne M)"",RC[-7],1),""(Colonne Q)"",RC[-3],1),""(Colonne N)"",RC[-6]),""(Colonne B)"",RC[-18]),"""")"
Pièce jointe 475905
Avec le fichier en exemple
Pièce jointe 475907
Cdlt
bonjour à tous,Tout est bon grâce à vous j'ai pu comprendre et résoudre mon problème malgré mon niveau , merci infiniment
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager