Excel code VBA trop lent

Bon j'ai trouver pour ajuster le code ca fonctionne et très fluide merci. par contre l'histoire des Under score je comprend pas

Concernant le projet cela ne fonctionne pas, il n'est pas récupérer ni mis dans le tableau

J'ai utilisé les underscore pour contrer le problème des codes fournisseurs (14, 144 - 23, 234). Mais avec la méthode utilisée, lorsqu'une valeur n'est pas remplacée, elle multiplie les underscore de part et d'autre. Il faut donc ajouter un autre replace dans la macro Remplacement.

With Sheets("frns") '<<< en dur
    dl = .Cells(.Rows.Count, 1).End(xlUp).Row
    arrRmplt = .Range("A1:B" & dl).Value '<<< en dur
End With
'POUR EVITER LES REMPLACEMENTS INDESIRABLES
For i = LBound(arrRmplt) To UBound(arrRmplt)
    arrRmplt(i, 1) = "_" & arrRmplt(i, 1) & "_"
Next i
'Alimentation tableau données (colonne source) - Boucle de remplacement sur chaque item - Collage (colonne destination)
With Sheets(NomFeuille)
    dl = .Cells(.Rows.Count, 1).End(xlUp).Row
    arrData = .Cells(1, colSource).Resize(dl).Value
    For x = LBound(arrData) + 1 To UBound(arrData)
        For p = LBound(arrRmplt) To UBound(arrRmplt)
            arrData(x, 1) = Replace(Replace("_" & arrData(x, 1) & "_", arrRmplt(p, 1), arrRmplt(p, 2)), "_", "")
        Next p
    Next x
    .Cells(1, colDest).Resize(UBound(arrData)) = arrData
End With

Ah super merci beaucoup et du coup pour le projet ni le numéro ni le nom n'est récupérer ?

Je n'ai pas regardé le fichier donc il est possible que je n'ai pas mis la bonne colonne à certains endroits. J'estime que ce sont des corrections à votre portée. Mais ce n'est pas un "dysfonctionnement".

Oui ça pas de soucis je peu faire. je pense juste que vous avez oublier ça. Mais je pensais que vous avez déjà optimiser mais je ne trouvais pas ou

   Sheets("filtre").Activate
        Range("A20:B121").Select
        Selection.Copy
        Sheets("cmd").Select
        Range("BY2").Select
        ActiveSheet.Paste
        Sheets("cmd").Activate
        Columns("BY:BZ").Select
        Selection.Copy
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        Columns("BY:BY").Select
        Selection.Replace What:="#N/A", Replacement:="La commande n'est pas lier à un", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
        Columns("BZ:BZ").Select
        Selection.Replace What:="#N/A", Replacement:="projet !", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False

Je suis désolé, je ne sais pas où placer ces lignes. Je cherchais juste à factoriser le code du remplacement, en pensant que ça pourrait servir... Mais je n'ai pas suivi en détail toutes les modifications successives du code.

Ce n'est pas grave je les remis c'est déjà très rapide il y a juste cette partie qui reste pas optimiser ce n'est rien

Est-ce que vous pouvez poster le fichier avec le code à jour ?

Merci, je regarde dès que possible.

Quelque ajustement

Re,

Aaah trop tard, je n'ai pas vu la nouvelle version et j'y ai passé trop de temps pour modifier.

Je suis passé par des tableaux structurés car c'est selon impératif dans ce genre de cas. Ca facilite le code, le rend plus dynamique et je pense que ça le rend plus rapide.

Il y a 2 modules, un avec la macro principale et un avec les procédures appelées dans le code.

@Steelson : J'ai fait des essais sur la partie de la concaténation finale et avec des petites quantités de données (ça change peut-être avec des quantités plus grandes), le fait de passer par la valeur des cellules avec un tableau d'une seule colonne semble un tout petit plus rapide qu'en ayant un tableau de 80 colonnes et en utilisant ses items. 1 centiseconde sur 50 à peu près. Ce qui est étonnant, c'est que les timers intermédiaires affichaient un temps réduit également, comme s'il y avait plus de mémoire disponible. Pourtant, Data est variant dans les 2 cas.

Cdlt,

Pas de soucis c'étais pas grand chose la modif. par contre oui je viens de regarder un peu je vais voir ce que je peu récupérer et adapter parce que moi ça fonctionne pas trop dans l'affichage vue ce n'est pas ça. mais je pense vraiment pourvoir exploiter ton code. c'est vrai que le fichier source que je vais chercher dans l'ERP est lourd il y a beaucoup de ligne.

D'accord... Il me semblait important d'utiliser des tableaux. Et donc de fait de modifier le code en conséquence. Je n'ai fait que traduire et réorganiser mais pas de changement particulier, si ce n'est le fameux remplacement des #NA. J'ai changé la formule à la base (j'ai mis le résultat de la recherche dans un SIERREUR). . Je copie alors seulement les formules puis les valeurs au lieu de faire un remplacement.

Ben en faite le code a l'air bien, mais le résultat n'est pas le même du tout parce que dans cmd il y a que une ligne récupérer et les deux dernière colonne ce n'est pas les bonnes info. je vais essayer de comprendre tout ça et adapter

@3GB merci je viens de tester au boulot et l'optimisation est parfait juste cette partie là.

tu serais me l'optimiser pour que je puisse laisse en calculation manuel. Merci d'avance

Sheets("filtre").Activate
        Range("A20:B121").Select
        Selection.Copy
        Sheets("cmd").Select
        Range("BY2").Select
        ActiveSheet.Paste
        Sheets("cmd").Activate
        Columns("BY:BZ").Select
        Selection.Copy
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        Columns("BY:BY").Select
        Selection.Replace What:="#N/A", Replacement:="La commande n'est pas lier à un", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
        Columns("BZ:BZ").Select
        Selection.Replace What:="#N/A", Replacement:="projet !", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False

Re,

J'ai vu que tu avais créé un nouveau sujet, c'est pas très cool ! N'oublie pas de prévenir Xmenpl de l'existence de celui-ci.

Pour moi, le fait de mettre un SIERREUR permet de simuler le remplacement donc j'ai le sentiment d'avoir déjà traité le problème. Sinon, je n'ai pas l'impression que cette méthode prenne du temps, au contraire, elle semble très rapide. C'est la partie avant le .replace qu'il faut clarifier...

Peux-tu poster les lignes de code correspondant à la modification que j'ai faite sur cette partie ? Que faut-il vraiment faire (je n'ai pas bien compris car je n'ai pas inspecté toutes les actions effectuées par le code) : coller les valeurs obtenues sur la feuille filtre ou coller les formules qui permettront d'obtenir des valeurs et ne garder que ces valeurs ?

Si le problème est seulement au calcul manuel. C'est très simple : avant les lignes, on le passe en auto, après, on le repasse en manuel .

Ben c'étais parce que le topic étais déjà bien remplie. puis je t'avais déjà demander plein de chose. Ici tout allais bien juste cette partie pas optimiser c'est nul.

Et oui c'est ce que j'ai fais au niveau de la calculassions.

Rechercher des sujets similaires à "code vba trop lent"