Bonjour,
je viens vers vous car j'ai un blocage ... de copier coller !
J'ai un classeur dans lequel je regroupe certaines données selon une référence (en colonne A) qui permet de "replier" le tableau pour faire 1 ligne par réf. pour simplifier les réunions (fonctionne très bien)
Après coup, je souhaite recopier les valeurs de la ligne source dans les autres lignes ayant la même réf.
J'ai donc fait une macro qui utilise un vloockup et qui marche bien (2-3min d’exécution), par contre la macro efface forcément les formules pour ne recopie que la valeur.
J'ai donc cherché un autre moyen avec find + copy/paste, ce qui donne exactement le résultat voulu, mais étant donné le nombre de colonnes et de lignes , la macro met plus de 45min à s’exécuter ...
Je sèche pour trouver une troisième solution et donc je viens vers vous !
Merci d'avance
Première solution:
Sub recopie()
Dim cellule As Range
Dim unel As Range
On Error GoTo 1
ActiveSheet.ShowAllData
1
Cells.Select
Selection.EntireColumn.Hidden = False
Range("B3").Select
dLignesuivi = Sheets("Tableau_Suivi").Cells(Rows.Count, 1).End(xlUp).Row
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
For Each cellule In Range("A1:DZ1")
If cellule = 1 Then
For i = 3 To dLignesuivi
aa = Application.WorksheetFunction.CountIf(Range("A3:A" & i), Range("A" & i))
If aa > 1 Then
Cells(i, cellule.Column) = Application.VLookup(Range("A" & i), Range("A3:DZ" & i), cellule.Column, False)
End If
Next
End If
Next
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Call Hideafterall
MsgBox ("MAJ OK")
End Sub
Deuxième solution:
Sub recopie()
Dim cellule As Range
Dim unel As Range
On Error GoTo 1
ActiveSheet.ShowAllData
1
Cells.Select
Selection.EntireColumn.Hidden = False
Range("B3").Select
dLignesuivi = Sheets("Tableau_Suivi").Cells(Rows.Count, 1).End(xlUp).Row
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
For Each cellule In Range("A1:DZ1")
If cellule = 1 Then
For i = 3 To dLignesuivi
aa = Application.WorksheetFunction.CountIf(Range("A3:A" & i), Range("A" & i))
If aa > 1 Then
Set unel = Range("A3:A" & i).Find(Range("A" & i), LookIn:=xlValues, lookat:=xlWhole)
Cells(unel.Row, cellule.Column).Select
Selection.Copy Destination:=Sheets("TABLEAU_SUIVI").Cells(i, cellule.Column)
End If
Next
End If
Next
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Call Hideafterall
MsgBox ("MAJ OK")
End Sub