Problème syntaxe VBA
Bonjour amis Expert Excel!
J'ai besoin de faire un calcul de pourcentage par rapport a des semaines, les données se trouvent dans des fichiers externes.
J'ai donc décidé de copier ma graaaande formule dans une macro, car la formule varie selon d'autres données. Grosso modo il y a le choix du mois et de la semaine, la formule du mois ça marche, par contre pour les semaines c'est compliqué.
Les numéros de semaine se situe de la cellule B5 à BA5, nommés "semaine1" à "semaine2", et chaque semaine est dans un fichier de mois.
Exemple: Fichier de Janvier : Semaine de 1 à 5
Février: Semaine de 5 à 9
Etc...
Je pense que ma formule marche, mais il y a une erreur de syntaxe, est-ce que quelqu’un serait capable de la trouver? Voir une meilleure idée, je suis pas un monstre de VBA.
Merci d'avance!
Range("b6:c" & [a65536].End(xlUp).Row).FormulaLocal = "=SI($A6="""";"""";SI($A$4=""Semaine"";si(ou(b5=""semaine1"";b5=""semaine2"";b5=""semaine3"";b5=""semaine4"";b5=""semaine5"");SIERREUR(1-SOMMEPROD(('[Janvier-Externe.xlsm]Extraction'!$Au2:$Au78079=$A6&B$5&$A$2)*'[Janvier-Externe.xlsm]Extraction'!$AT$2:$AT$78079)/SOMMEPROD(('[Janvier-Externe.xlsm]Extraction'!$Au2:$Au78079=$A6&B$5&$A$2)*1);SIERREUR(1-SOMMEPROD(('[Janvier-Externe.xlsm]Extraction'!$Av2:$Av78079=$A6&B$5&$A$2)*'[Janvier-Externe.xlsm]Extraction'!$AT$2:$AT$78079)/SOMMEPROD(('[Janvier-Externe.xlsm]Extraction'!$Av2:$Av78079=$A6&B$5&$A$2)*1); _
si(ou(b5=""semaine5"";b5=""semaine6"";b5=""semaine7"";b5=""semaine8"";b5=""semaine9"");SIERREUR(1-SOMMEPROD(('[Fevrier-Externe.xlsm]Extraction'!$Au2:$Au78079=$A6&B$5&$A$2)*'[Fevrier-Externe.xlsm]Extraction'!$AT$2:$AT$78079)/SOMMEPROD(('[Fevrier-Externe.xlsm]Extraction'!$Au2:$Au78079=$A6&B$5&$A$2)*1);SIERREUR(1-SOMMEPROD(('[Fevrier-Externe.xlsm]Extraction'!$Av2:$Av78079=$A6&B$5&$A$2)*'[Fevrier-Externe.xlsm]Extraction'!$AT$2:$AT$78079)/SOMMEPROD(('[Fevrier-Externe.xlsm]Extraction'!$Av2:$Av78079=$A6&B$5&$A$2)*1); _
si(ou(b5=""semaine9"";b5=""semaine10"";b5=""semaine11"";b5=""semaine12"";b5=""semaine13"");SIERREUR(1-SOMMEPROD(('[Mars-Externe.xlsm]Extraction'!$Au2:$Au78079=$A6&B$5&$A$2)*'[Mars-Externe.xlsm]Extraction'!$AT$2:$AT$78079)/SOMMEPROD(('[Mars-Externe.xlsm]Extraction'!$Au2:$Au78079=$A6&B$5&$A$2)*1);SIERREUR(1-SOMMEPROD(('[Mars-Externe.xlsm]Extraction'!$Av2:$Av78079=$A6&B$5&$A$2)*'[Mars-Externe.xlsm]Extraction'!$AT$2:$AT$78079)/SOMMEPROD(('[Mars-Externe.xlsm]Extraction'!$Av2:$Av78079=$A6&B$5&$A$2)*1); _
si(ou(b5=""semaine13"";b5=""semaine14"";b5=""semaine15"";b5=""semaine16"";b5=""semaine17"");SIERREUR(1-SOMMEPROD(('[Avril-Externe.xlsm]Extraction'!$Au2:$Au78079=$A6&B$5&$A$2)*'[Avril-Externe.xlsm]Extraction'!$AT$2:$AT$78079)/SOMMEPROD(('[Avril-Externe.xlsm]Extraction'!$Au2:$Au78079=$A6&B$5&$A$2)*1);SIERREUR(1-SOMMEPROD(('[Avril-Externe.xlsm]Extraction'!$Av2:$Av78079=$A6&B$5&$A$2)*'[Avril-Externe.xlsm]Extraction'!$AT$2:$AT$78079)/SOMMEPROD(('[Avril-Externe.xlsm]Extraction'!$Av2:$Av78079=$A6&B$5&$A$2)*1); _
si(ou(b5=""semaine18"";b5=""semaine19"";b5=""semaine20"";b5=""semaine21"";b5=""semaine22"");SIERREUR(1-SOMMEPROD(('[Mai-Externe.xlsm]Extraction'!$Au2:$Au78079=$A6&B$5&$A$2)*'[Mai-Externe.xlsm]Extraction'!$AT$2:$AT$78079)/SOMMEPROD(('[Mai-Externe.xlsm]Extraction'!$Au2:$Au78079=$A6&B$5&$A$2)*1);SIERREUR(1-SOMMEPROD(('[Mai-Externe.xlsm]Extraction'!$Av2:$Av78079=$A6&B$5&$A$2)*'[Mai-Externe.xlsm]Extraction'!$AT$2:$AT$78079)/SOMMEPROD(('[Mai-Externe.xlsm]Extraction'!$Av2:$Av78079=$A6&B$5&$A$2)*1); _
si(ou(b5=""semaine22"";b5=""semaine23"";b5=""semaine24"";b5=""semaine25"";b5=""semaine26"");SIERREUR(1-SOMMEPROD(('[Juin-Externe.xlsm]Extraction'!$Au2:$Au78079=$A6&B$5&$A$2)*'[Juin-Externe.xlsm]Extraction'!$AT$2:$AT$78079)/SOMMEPROD(('[Juin-Externe.xlsm]Extraction'!$Au2:$Au78079=$A6&B$5&$A$2)*1);SIERREUR(1-SOMMEPROD(('[Juin-Externe.xlsm]Extraction'!$Av2:$Av78079=$A6&B$5&$A$2)*'[Juin-Externe.xlsm]Extraction'!$AT$2:$AT$78079)/SOMMEPROD(('[Juin-Externe.xlsm]Extraction'!$Av2:$Av78079=$A6&B$5&$A$2)*1); _
si(ou(b5=""semaine26"";b5=""semaine27"";b5=""semaine28"";b5=""semaine29"";b5=""semaine30"");b5=""semaine31"");SIERREUR(1-SOMMEPROD(('[Juillet-Externe.xlsm]Extraction'!$Au2:$Au78079=$A6&B$5&$A$2)*'[Juillet-Externe.xlsm]Extraction'!$AT$2:$AT$78079)/SOMMEPROD(('[Juillet-Externe.xlsm]Extraction'!$Au2:$Au78079=$A6&B$5&$A$2)*1);SIERREUR(1-SOMMEPROD(('[Juillet-Externe.xlsm]Extraction'!$Av2:$Av78079=$A6&B$5&$A$2)*'[Juillet-Externe.xlsm]Extraction'!$AT$2:$AT$78079)/SOMMEPROD(('[Juillet-Externe.xlsm]Extraction'!$Av2:$Av78079=$A6&B$5&$A$2)*1); _
si(ou(b5=""semaine31"";b5=""semaine32"";b5=""semaine33"";b5=""semaine34"";b5=""semaine35"");SIERREUR(1-SOMMEPROD(('[Aout-Externe.xlsm]Extraction'!$Au2:$Au78079=$A6&B$5&$A$2)*'[Aout-Externe.xlsm]Extraction'!$AT$2:$AT$78079)/SOMMEPROD(('[Aout-Externe.xlsm]Extraction'!$Au2:$Au78079=$A6&B$5&$A$2)*1);SIERREUR(1-SOMMEPROD(('[Aout-Externe.xlsm]Extraction'!$Av2:$Av78079=$A6&B$5&$A$2)*'[Aout-Externe.xlsm]Extraction'!$AT$2:$AT$78079)/SOMMEPROD(('[Aout-Externe.xlsm]Extraction'!$Av2:$Av78079=$A6&B$5&$A$2)*1); _
si(ou(b5=""semaine35"";b5=""semaine36"";b5=""semaine37"";b5=""semaine38"";b5=""semaine39"");SIERREUR(1-SOMMEPROD(('[Septembre-Externe.xlsm]Extraction'!$Au2:$Au78079=$A6&B$5&$A$2)*'[Septembre-Externe.xlsm]Extraction'!$AT$2:$AT$78079)/SOMMEPROD(('[Septembre-Externe.xlsm]Extraction'!$Au2:$Au78079=$A6&B$5&$A$2)*1);SIERREUR(1-SOMMEPROD(('[Septembre-Externe.xlsm]Extraction'!$Av2:$Av78079=$A6&B$5&$A$2)*'[Septembre-Externe.xlsm]Extraction'!$AT$2:$AT$78079)/SOMMEPROD(('[Septembre-Externe.xlsm]Extraction'!$Av2:$Av78079=$A6&B$5&$A$2)*1); _
si(ou(b5=""semaine39"";b5=""semaine40"";b5=""semaine41"";b5=""semaine42"";b5=""semaine43"" ; b5=""semaine44"");SIERREUR(1-SOMMEPROD(('[Octobre-Externe.xlsm]Extraction'!$Au2:$Au78079=$A6&B$5&$A$2)*'[Octobre-Externe.xlsm]Extraction'!$AT$2:$AT$78079)/SOMMEPROD(('[Octobre-Externe.xlsm]Extraction'!$Au2:$Au78079=$A6&B$5&$A$2)*1);SIERREUR(1-SOMMEPROD(('[Octobre-Externe.xlsm]Extraction'!$Av2:$Av78079=$A6&B$5&$A$2)*'[Octobre-Externe.xlsm]Extraction'!$AT$2:$AT$78079)/SOMMEPROD(('[Octobre-Externe.xlsm]Extraction'!$Av2:$Av78079=$A6&B$5&$A$2)*1); _
si(ou(b5=""semaine44"";b5=""semaine45"";b5=""semaine46"";b5=""semaine47"";b5=""semaine48"") ;SIERREUR(1-SOMMEPROD(('[Novembre-Externe.xlsm]Extraction'!$Au2:$Au78079=$A6&B$5&$A$2)*'[Novembre-Externe.xlsm]Extraction'!$AT$2:$AT$78079)/SOMMEPROD(('[Novembre-Externe.xlsm]Extraction'!$Au2:$Au78079=$A6&B$5&$A$2)*1);SIERREUR(1-SOMMEPROD(('[Novembre-Externe.xlsm]Extraction'!$Av2:$Av78079=$A6&B$5&$A$2)*'[Novembre-Externe.xlsm]Extraction'!$AT$2:$AT$78079)/SOMMEPROD(('[Novembre-Externe.xlsm]Extraction'!$Av2:$Av78079=$A6&B$5&$A$2)*1); _
si(ou(b5=""semaine58"";b5=""semaine49"";b5=""semaine50"";b5=""semaine51"";b5=""semaine52"") ;SIERREUR(1-SOMMEPROD(('[Decembre-Externe.xlsm]Extraction'!$Au2:$Au78079=$A6&B$5&$A$2)*'[Decembre-Externe.xlsm]Extraction'!$AT$2:$AT$78079)/SOMMEPROD(('[Decembre-Externe.xlsm]Extraction'!$Au2:$Au78079=$A6&B$5&$A$2)*1);SIERREUR(1-SOMMEPROD(('[Decembre-Externe.xlsm]Extraction'!$Av2:$Av78079=$A6&B$5&$A$2)*'[Decembre-Externe.xlsm]Extraction'!$AT$2:$AT$78079)/SOMMEPROD(('[Decembre-Externe.xlsm]Extraction'!$Av2:$Av78079=$A6&B$5&$A$2)*1);"""")))))))))))))))))))))))))))))))))))))"
Bonjour Ppplll.
Bon courage pour trouver quelqu'un qui cherchera une erreur dans cette formule.
Le mieux est de transmettre un fichier sans données personnelles.
J'imagine bien oui, la c'est ce que j'essaye de faire...
Salut à tous !
Je vais adhérer pleinement à la proposition de Benoît !
Déjà, quand une formule doit dépasser 3 lignes, en général j'arrête et je passe à VBA...
D'autre part mettre des formules en VBA, j'ai toujours trouvé plutôt farfelu, l'intérêt de VBA étant de supprimer les formules, car toujours plus long que mettre une formule dans une cellule...
Il peut toujours y avoir des exceptions, mais là tu cumules une formule particulièrement longue et en VBA...
S'il y a une erreur de syntaxe, cela devrait se traduire par une erreur d'exécution, donc un message avec un numéro d'erreur, et une ligne surlignée (sous réserve que si c'est la ligne contenant la formule qui est surlignée, on ne s'y attardera pas !
D'un autre côté, je suis un peu inquiet de tes propos mixant mois et semaines : la sagesse voudrait que selon le cas, on travaille sur l'année civile découpée en mois, ou bien sur l'année ISO découpée en semaines. Le mixage des deux introduit pas mal de confusion. Comment interpréter tes propos que janvier couvre les semaines 1 à 5 et février 5 à 9 ? Serait-ce que des semaines sont comptées deux fois ? Et que les mois ne vont plus du premier au dernier jour du mois ?
Ce qu'il serait souhaitable que tu fasses, c'est indiquer précisément ce que tu veux calculer (sans fournir de méthode, surtout pas de méthode aboutissant à ta formule...
Cordialement.
Puré de bordel de m***
Courage et respect à celui qui va la déchiffrer pour te la corriger clair et net !!!!
ECG
Oh la jolie formule !
de sa longue formule complète en 10 tomes et 6 annexes (Encyclopédie best-seller 2017 Ppplll).