XL 2016 Acclération Sierreur VBA

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 !

Strick-TD

XLDnaute Nouveau
Bonjour à tous, débutant sur VBA j'ai une macro où à l'intérieur j'ai une fonction sierreur avec une variable sur 12.000 lignes qui est un peu longue.
Avec l'aide de ce forum, j'ai réussi à réduire le temps de ma rechercheV, j'ai voulu reprendre ce model pour réduire ma fonction sierror sauf que ça ne fonctionne pas (il n'y a pas d'erreur) j'ai des zéros partout. Pourriez-vous m'aider svp ? Merci beaucoup.
VB:
'Fonction Si erreur actuelle un peu longue'
For j = 2 To 12000
If Cells(j, 9).Value = "x" Then
Cells(j, 19).Value = "=iferror(Cells(j, 18) * Cells(j, 8),0)"
Else
Cells(j, 19).Value = 0

End If
Next j

'Fonction rechercheV rapide
DerLig = sh.Range("Q" & Rows.Count).End(xlUp).Row
    sh.Range(Cells(2, 18), Cells(DerLig, 18)) = "=iferror(VLOOKUP(RC[-1],'[DB Articles.xlsx]Synthèse'!C3:C4,2,0),0)"
    sh.Range(Cells(2, 18), Cells(DerLig, 18)).Value = sh.Range(Cells(2, 18), Cells(DerLig, 18)).Value
    
    
    'Test d'amélioration de la fonction SIERROR qui ne marche pas
DerLig2= sh.Range("Q" & Rows.Count).End(xlUp).Row
    sh.Range(Cells(2, 19), Cells(DerLig, 19)) = "=iferror(Range(Cells(2, 18), Cells(DerLig, 18))*Range(Cells(2, 8), Cells(DerLig, 8)),0)"
    sh.Range(Cells(2, 19), Cells(DerLig, 19)).Value = sh.Range(Cells(2, 19), Cells(DerLig, 19)).Value
 
Hello
dans ton premier sirreur, il manque un élément
Cells(j, 19).Value = "=iferror(Cells(j, 18) * Cells(j, 8),0)"

et dans le deuxième (celui qui ne fonctionne pas..)
je doute que meme sans vba, la formule fonctionne... tu devrais peut etre passer par la fonction Sommeprod..
en fait;. on ne sait pas ce que tu veux calculer...


oups.. pardon.. je confond avec la fonction iif....
cela dit.. un fichier exemple serait le bienvenu
 
Hello
dans ton premier sirreur, il manque un élément
Cells(j, 19).Value = "=iferror(Cells(j, 18) * Cells(j, 8),0)"

et dans le deuxième (celui qui ne fonctionne pas..)
je doute que meme sans vba, la formule fonctionne... tu devrais peut etre passer par la fonction Sommeprod..
en fait;. on ne sait pas ce que tu veux calculer...


oups.. pardon.. je confond avec la fonction iif....
cela dit.. un fichier exemple serait le bienvenu
Bonjour merci de votre réponse,

Oui j'ai essayé de rajouter l'élément si il y a "x" en colonne 9 mais ça ne fonctionne pas pour autant.
Mon but serait de faire quelque chose de beaucoup plus court qu'une variable. Auriez-vous une suggestion svp ?
 
Je ne comprend toujours pas le calcul que tu fais pour la colonne S
si il y a un X dans la colonne I (sur la ligne concernée) alors tu fais le produit entre les deux colonnes H et R "COMPLETES"
1) à moins d'un calcul matriciel, ca ne donnera rien
2) ta colonne H est vide.. donc. matriciel ou pas.. le résultat sera toujours nul..

3) peut etre que ton calcul est plutot =SIERREUR(SI(I2=x;H2*R2;0);0) et tu tires la formule vers le bas.. ??
 
Vgendron,

Excusez moi j'ai voulu adapté le plus vite possible un fichier bis pour vous et il y a une erreur c'est pas la colonne H mais la colonne F.
Pour vous expliquez d'un point de vue macro, je fais une rechercheV de mon article en colonne R (recherche colonne Q dans mon excel DB articles) pour savoir le prix. Ensuite le but est en colonne S de faire une formule si il y a un "x" dans ma colonne "I" alors je multiplie les quantités (colonne F) par le prix (colonne R): Sierreur(si(I2=x;F2*R2;0);0)
Cette fonction (sierreur) fonctionne avec une variable sauf que je souhaiterai aujourd'hui accélérer cette fonction car sur 12.000 lignes c'est beaucoup trop long. Donc s'il y avait une solution possible vous me sauverez bien 🙂
 
avec ta formule.. il aurait fallu corriger
Sierreur(si(I2=x;F2*R2;0);0)
par ca:
Sierreur(si(I2="x";F2*R2;0);0)
Merci pour cette réponse.
Malheureusement mon but en postant ce message était de supprimer la variable pour la fonction si erreur car ici ça marche très bien sur 20 lignes mais sur 12.000 lignes ça met environ 30 secondes (je veux le réduire car j'ai 200 fichiers à lancer) et je voudrais le passer à 1 seconde par fichier.
Du coup ma question initial était de savoir si en prenant modèle sur la recherchev que j'ai posté ou alors une autre solution (sans modifier la rechercheV car celle-ci fonctionne très bien et rapidemment) serait-il possible d'accélérer la fonction sierreur ?

J'ai essayé d'adapter votre macro sur ma macro initial (plus longue que ce que je vous ai mis en exemple et c'est beaucoup trop long a tout modifier pour moi.
Merci encore pour votre aide
 
J'ai essayé d'adapter votre macro sur ma macro initial (plus longue que ce que je vous ai mis en exemple et c'est beaucoup trop long a tout modifier pour moi.
il faut savoir faire un choix... soit tu passes un peu de temps à modifier ton code pour gagner du temps par la suite, soit tu perds du temps à chaque execution...
et si tu postais ton code en entier, on pourrait peut etre t'aider à optimiser
ou alors, tu indiques comment tu souhaites faire fonctionner le code fourni..
genre.. pour chaque classeur ouvert, pour chaque classeur d'un répertoire,
tous tes classeurs ont ils bien la meme structure (= les données sont toujours au meme endroit.....)
 
- 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

  • Question Question
XL 2021 VBA excel
Réponses
4
Affichages
91
  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
513
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
277
Réponses
10
Affichages
398
Réponses
4
Affichages
487
Réponses
9
Affichages
851
Retour