Je commence a maitriser de plus en plus les macros grace a ce formidable forum, mais mon niveau ne me permet pas toujours d'obtenir des resultats vrament efficaces.
Je vous explique mon probleme:
J'ai un tableau qui s'etend de la colonne A a la colonne N. Dans celui-ci, toutes les cellules de chaque ligne ne sont pas toutes remplies.
Je souhaite donc effectuer un test qui va verifier ligne par ligne si une cellule est vide, et si cela se touve etre le cas, couper cette ligne et la coller sur une nouvelle page, pour me permettre d'obtenir un tableau propre sans ligne vide et une feuille regroupant toutes les lignes dont certaines informations sont manquantes.
Pour tester cela j'ai donc fait ce code :
Code:
Sub Export_blanks()
Dim Cel As Range
Dim mySource As Range
Dim Lg As Integer
Application.ScreenUpdating = False
Set mySource = Sheet1.Range("A5:N" & [A65536].End(xlUp).Row)
Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = "TER blanks info"
Sheets("TER").Select
Lg = 5 'Activation of the 5th line
For Each Cel In mySource
If Cel.Value = "" Then
Sheet1.Range("X" & Lg).Formula = "=COUNTIF(A" & Cel.Row & ":N" & Cel.Row & ", """")"
Lg = Lg + 1
End If
Next
End Sub
Le code reste a terminer pour le Couper/Coller sur une nouvelle feuille.
Cela fonctionne mais comme je possede plus de 10000 lignes, cela prend enormement de temps.
Pourriez-vous m'expliquer comment raccourcir le temps d'execution?
Voici une macro qui doit être plus rapide, à tester :
VB:
Sub Export_blanks()
Dim mySource As Range
Application.ScreenUpdating = False
Set mySource = Sheet1.Range("A5:N" & [A65536].End(xlUp).Row)
Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = "TER blanks info"
Sheets("TER").Select
Sheet1.Range("X5:X" & mySource.Rows.Count + 4).FormulaR1C1 = "=COUNTIF(RC[-23]:RC[-10], """")"
End Sub
avant de créer les formules, mets ton mode de calcul en manuel
de mémoire application.calculation = xlmanuel (à vérifier) et remettre en automatic après
Non je ne peux pas mettre de fichier exemple car ma question est generale.
Par exemple, si je lance la macro suivante, l'execution prend enormement de temps. Je voulais donc savoir comment fait-on, si possible, pour accelerer l'execution de la macro?
Code:
Sub Import_Tag()
'Import informations from sources with TRIM
Dim Cell As Range
Dim mySource As Range
Dim myCible As Range
Dim Lg As Integer
Application.ScreenUpdating = False
Set mySource = Sheet3.Range("A4:A" & [A65536].End(xlUp).Row)
Set myCible = Sheet1.Range("A5:M" & [A65536].End(xlUp).Row)
myCible.ClearContents
Lg = 5 'Activation of the 5th line
For Each Cell In mySource
If Cell.Value <> "" Then
Sheet1.Range("A" & Lg) = Application.Trim(Sheet3.Range("F" & Cell.Row)) 'Tag Number
Sheet1.Range("B" & Lg) = Application.Trim(Sheet3.Range("G" & Cell.Row)) 'Tag Description
Sheet1.Range("C" & Lg) = Application.Trim(Sheet3.Range("AY" & Cell.Row)) 'Drawing Number
Sheet1.Range("D" & Lg) = Application.Trim(Sheet3.Range("I" & Cell.Row)) 'EIS Class (equipment type)
Sheet1.Range("E" & Lg) = Application.Trim(Sheet3.Range("J" & Cell.Row)) 'Superior Floc
Sheet1.Range("F" & Lg) = Application.Trim(Sheet3.Range("K" & Cell.Row)) 'Unit
Sheet1.Range("I" & Lg) = Application.Trim(Sheet3.Range("AW" & Cell.Row)) 'Manufacturer Name
Sheet1.Range("J" & Lg) = Application.Trim(Sheet3.Range("O" & Cell.Row)) 'Weight
Sheet1.Range("K" & Lg) = Application.Trim(Sheet3.Range("AB" & Cell.Row)) 'PO Number
Lg = Lg + 1
End If
Next
End Sub
Cette macro ne fait que faire un copier/coller, mais elle prend un temps fou.
Si vous avez une solution generale je suis prenneur
Même si la question est generale , nous nous faisons un devoir de tester nos solutions et il nous faudrait creer un fichier test
En sus tous les contributeurs pourraient evaluer les differentes versions
Pour ma part je ne peux pas mettre de solution generale !!!!