Réduction délai traitement

Désolé,

Il manque un point avant Range sur cette ligne :

Set rng = .Range("A8:AE" & iLRS) 'La cible doit être dimensionnée comme la source

A+

Désolé,

Il manque un point avant Range sur cette ligne :

Set rng = .Range("A8:AE" & iLRS) 'La cible doit être dimensionnée comme la source

A+

Ok j'ai modifié, cela met désormais un message d'erreur sur la ligne:

ArrC(iLRC, iC) = ArrS(iR, iC)

Décidément...

ArrC(iR, iC) = ArrS(iR, iC)

ça conviendra mieux.

... Mais maintenant tu vas me dire "C'est bon mais ça ne respecte pas le format"

Ce qui est normal puisque je ne copie que les valeurs et pas le format.

A+

Non ^^ peut m'importe le format, il sera le même entre les 2 tableaux de toute façon. Je n'ai plus de message d'erreur mais cela ne garde que les commentaire avant la première ligne "différente". Par exemple j'ai mit des commentaires dans la colonnes date (AE) et j'ai supprimé une ligne, par exemple la ligne 10, quand je lance la macro j'ai des trous dans la raquette en colonnes AE à différents endroits

C'est l'inconvénient de ne pas travailler sur des fichiers réels avec des fichiers aux 3/4 vides c'est comme travailler sur une boule de cristal...

Là je comprend pas trop... Si une ligne manque elle va être replacée à la fin... Mais non triée puisque je n'ai pas de colonne pour l'indexation.

Dans ce cas on reviens au cas de figure de jeu. mai 23, 2019 1:10 pm

Si on est obligé de travailler directement sur le classeur on perd un temps fou... Donc ou tu me déniches une colonne indexable pour le tri, ou je suis obligé d'en créer une, mais là ça sera plus cher prévoir un délai !

C'est l'inconvénient de ne pas travailler sur des fichiers réels avec des fichiers aux 3/4 vides c'est comme travailler sur une boule de cristal...

Là je comprend pas trop... Si une ligne manque elle va être replacée à la fin... Mais non triée puisque je n'ai pas de colonne pour l'indexation.

Dans ce cas on reviens au cas de figure de jeu. mai 23, 2019 1:10 pm

Si on est obligé de travailler directement sur le classeur on perd un temps fou... Donc ou tu me déniches une colonne indexable pour le tri, ou je suis obligé d'en créer une, mais là ça sera plus cher prévoir un délai !

Le soucis c'est que le fichier fais 4000 lignes et il y a beaucoup d'informations que je ne peux remplacer sans y passer un temps fou! Donc je n'ai mis que les infos essentielles à savoir la colonne N° de sous projet et la colonne date...

Le fichier "source" est un fichier extrait d'un logiciel, il arrive tel quel et donc sans colonne que tu appel d'indexation (je ne vois pas exactement à quoi cela ressemble).

Dans le code que tu as fait le seul truc qui déconne c'est la dernière colonne, ce que je ne comprends pas c'est que les lignes ne sont copiés que si quelque chose est différents de l'autre tableau non? donc si rien ne change, a part la dernière colonne, pourquoi certaines lignes sont tout de même écrasés dans le fichier cible?

Je pense qu'on est quand même pas loin de la vérité mais je n'ai pas les compétences pour comprendre et encore moins pour modifier ce code...

Ma boule de cristal fûme...

Essaie de virer tout et remplace par ces deux macros :

Laisse béton c'est pas bon... Je recommence.

Bon ben... Finalement je n'ai pas d'autre solution à te proposer. Dans le cas de lignes supprimées, il ne me semble pas possible de passer par un Array pour mettre à jour.

Tu ne peux faire que comme tu as fait (insérer les lignes manquantes)... C'est chronophage mais il n'y a pas d'optimisation possible.

TORAPUKA aller boire un café en attendant que ça se passe...

Désolé.

A+

Ok et tu pense que ce serait possible d'optimiser un peu le programme que j'ai fais? Souvent cela fait cracher excel...

En tout cas merci d'avoir essayé

Car avec mon programme, cela fonctionne mais, et je ne sais pas pourquoi, j'ai des dates de la colonnes A qui s'ajoutent à la fin et cela m'embète beaucoup :p

Essaie comme ça : (J'ai juste un peu optimisé ton code donc tu vas pas gagner grand chose...)

Sub MAJ()
Dim WbS As Workbook 'fichier servant pour la mise a jour "Source"
Dim WbC As Workbook 'fichier à mettre à jour "Cible"
Dim WsS As Worksheet
Dim WsC As Worksheet 'feuilleCible

Dim ArrS, iR&, iC%, iLRS&, rng As Range

Application.ScreenUpdating = False
Workbooks.Open Filename:="C:\Users\Jeremy.Caseteuble\Desktop\EDV\Nouveau.xlsx"
'instanciation des fichiers et des feuilles et des variables Array
Set WbS = Workbooks("Nouveau.xlsx")
Set WbC = ThisWorkbook
Set WsS = WbS.Worksheets("Extractiondutableaudesprojetste")
Set WsC = WbC.Worksheets("Extractiondutableaudesprojetste")

'WbS est le classeur actif
With WsS
   iLRS = .Range("A" & .Rows.Count).End(xlUp).Row
   Set rng = .Range("A1:AE" & iLRS) 'Tableau source
End With
ArrS = rng.Value
With WsC
For iR = 8 To UBound(ArrS)  'On parcourt toute les lignes du tableau source
   If Not ArrS(iR, 9) = .Cells(iR, 9) Then 'si la colonne 9 est différente
      For iC = 1 To 31                    'de la première colonne à la dernière
         .Cells(iR, iC) = ArrS(iR, iC) 'Alors on la recopie dans le tableau cible
      Next
   End If
Next
End With
WbS.Close SaveChanges:=False  'Et on ferme le classeur source
End Sub

A+

Essaie comme ça : (J'ai juste un peu optimisé ton code donc tu vas pas gagner grand chose...)

Sub MAJ()
Dim WbS As Workbook 'fichier servant pour la mise a jour "Source"
Dim WbC As Workbook 'fichier à mettre à jour "Cible"
Dim WsS As Worksheet
Dim WsC As Worksheet 'feuilleCible

Dim ArrS, iR&, iC%, iLRS&, rng As Range

Application.ScreenUpdating = False
Workbooks.Open Filename:="C:\Users\Jeremy.Caseteuble\Desktop\EDV\Nouveau.xlsx"
'instanciation des fichiers et des feuilles et des variables Array
Set WbS = Workbooks("Nouveau.xlsx")
Set WbC = ThisWorkbook
Set WsS = WbS.Worksheets("Extractiondutableaudesprojetste")
Set WsC = WbC.Worksheets("Extractiondutableaudesprojetste")

'WbS est le classeur actif
With WsS
   iLRS = .Range("A" & .Rows.Count).End(xlUp).Row
   Set rng = .Range("A1:AE" & iLRS) 'Tableau source
End With
ArrS = rng.Value
With WsC
For iR = 8 To UBound(ArrS)  'On parcourt toute les lignes du tableau source
   If Not ArrS(iR, 9) = .Cells(iR, 9) Then 'si la colonne 9 est différente
      For iC = 1 To 31                    'de la première colonne à la dernière
         .Cells(iR, iC) = ArrS(iR, iC) 'Alors on la recopie dans le tableau cible
      Next
   End If
Next
End With
WbS.Close SaveChanges:=False  'Et on ferme le classeur source
End Sub

A+

J'ai essayé cela fonctionne bien plus rapidement (environ 10 secondes) cependant il y a un bug dans la dernière colonne dans le fichier cible quand je supprime des lignes et que je rempli les cases de la colonne AE. Quand je lance la macro j'ai des décalages et des cases qui n'apparaissent plus...

Bonjour,

Décidément...

Je ne sais même pas comment cette ligne à pu disparaître !

   If Not ArrS(iR, 9) = .Cells(iR, 9) Then 'si la colonne 9 est différente
         .Cells(iR, 1).EntireRow.Insert Shift:=xlDown 'Ligne à ajouter
...La suite sans changement

A+

Bonjour,

Décidément...

Je ne sais même pas comment cette ligne à pu disparaître !

   If Not ArrS(iR, 9) = .Cells(iR, 9) Then 'si la colonne 9 est différente
         .Cells(iR, 1).EntireRow.Insert Shift:=xlDown 'Ligne à ajouter
...La suite sans changement

A+

C'est la fin de semaine...^^

Cela fonctionne parfaitement et c'est quasiment instantané donc c'est parfait!

Merci beaucoup!

Maintenant on passe à une autre macro pour un autre projet xD

Rechercher des sujets similaires à "reduction delai traitement"