Bonjour à tous,
Je profite de ce post pour vous souhaiter une belle année 2025
Je me tourne vers votre savoir afin de, peut-être, réduire le temps d'exécution d'une macro (macro sur un tableau qui peut atteindre 2000 lignes et 139 colonnes), en effet lorsque tout est rempli cela peut atteindre près de 30 secondes, mais il y a surement mieux à faire!!!
Voici le code:
Merci beaucoup pour votre aide
Eric
Je profite de ce post pour vous souhaiter une belle année 2025
Je me tourne vers votre savoir afin de, peut-être, réduire le temps d'exécution d'une macro (macro sur un tableau qui peut atteindre 2000 lignes et 139 colonnes), en effet lorsque tout est rempli cela peut atteindre près de 30 secondes, mais il y a surement mieux à faire!!!
Voici le code:
VB:
Sub Copier_Valeurs()
Dim start As Single
start = Timer
Dim LigneSource As Long, LigneCible As Long
Dim MaValeur As String
Dim MaPlageDeRecherche As Range, MaCelluleTrouvee As Range
' On empêche la mise à jour de l'affichage
Application.ScreenUpdating = False
' Pour chaque ligne de données du tableau source
For LigneSource = 1 To Range("TbCommande").ListObject.ListRows.Count
' Affectation de la valeur à rechercher (colonne "Référence Devis", ligne de n° "LigneSource" du tableau source) à la variable MaValeur
MaValeur = Range("TbCommande[Référence Devis]")(LigneSource).Value
' Affectation de toute la colonne de données "Référence Devis" du tableau source à la variable MaPlageDeRecherche
Set MaPlageDeRecherche = Range("TbMAJ[Référence Devis]")
' Recherche de MaValeur dans la colonne "Référence Devis" du tableau cible
' Si la valeur est trouvée, affectation à la variable MaCelluleTrouvee de la cellule trouvée de la feuille
' si la valeur n'est pas trouvée, la variable MaCelluleTrouvee est égale à Nothing
Set MaCelluleTrouvee = MaPlageDeRecherche.Find(What:=MaValeur, LookIn:=xlValues, LookAt:=xlWhole)
If MaCelluleTrouvee Is Nothing Then
' Si valeur non trouvée dans le tableau cible, ajout d'une ligne en fin de tableau cible
Range("TbMAJ").ListObject.ListRows.Add
' Détermination du n° de la nouvelle ligne du tableau cible
LigneCible = Range("TbMAJ").ListObject.ListRows.Count
Else
' Détermination du n° de ligne dans tableau, de la cellule trouvée
LigneCible = MaCelluleTrouvee.Row - Range("TbMAJ[#headers]").Row
End If
' Recopie du premier groupe de données vers le tableau cible
Range("TbMAJ[[Référence Devis]:[Init]]").Rows(LigneCible).Value = Range("TbCommande[[Référence Devis]:[Init]]").Rows(LigneSource).Value
'Range("TbMAJ[[Métrage OUI]:[Commande passée au Fournisseur]]").Rows(LigneCible).Value = Range("TbCommande[[Métrage OUI]:[Commande passée au Fournisseur]]").Rows(LigneSource).Value
'[Commande passée au Fournisseur]
' Recopie du deuxième groupe de données vers le tableau cible
'Range("TbMAJ[[Initiales Commercial]:[Initiales Produit9]]").Rows(LigneCible).Value = Range("TbCommande[[Initiales Commercial]:[Initiales Produit9]]").Rows(LigneSource).Value
' Recopie du 3ème groupe de données vers le tableau cible
'Range("TbMAJ[[Toury Fermetures]:[Prospect]]").Rows(LigneCible).Value = Range("TbCommande[[Toury Fermetures]:[Prospect]]").Rows(LigneSource).Value
' Recopie du 4ème groupe de données vers le tableau cible
'Range("TbMAJ[[DATE MODIFICATION]:[Init]]").Rows(LigneCible).Value = Range("TbCommande[[DATE MODIFICATION]:[Init]]").Rows(LigneSource).Value
' Ligne du tableau source suivante
Next LigneSource
MsgBox "durée du traitement: " & Timer - start & " secondes"
End Sub
Merci beaucoup pour votre aide
Eric