Erreur d'exécution Paste et plantage Excel
Bonjour, je viens vers vous pour essayer de trouver une solution à mon probleme. Aprés pas mal de recherche, je n'ai toujours pas réussi à trouver une solution. Ma macro fonctionne en pas à pas détaillé mais excel plante lorsque je la lance normalement.
Le but de la macro est d'analyser un tableau à double entrée et de regrouper par la suite les informations.
Voici le code que j'ai écris.
Sub macrowbs()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim n As Integer
Dim p As Integer
Dim m As Integer
Dim x As Integer
p = 5
n = 1
x = 1
d = 0
Sheets("Taches").Select
Range("A2:J1000").Select
Selection.ClearContents
Sheets("Zone").Select
For j = 7 To 20
If Cells(j, 2) <> "" Then
For i = 4 To 30
If Cells(j, i) <> "" Then
For k = 7 To 50
Sheets("Activite").Select
If Cells(k, i) <> "" Then
Sheets("Taches").Select
Range("A1").Select
ActiveCell.FormulaR1C1 = _
"=CONCATENATE(Activite!R[" & k - 1 & "]C,"" - "",Activite!R[" & k - 1 & "]C[1],"" - "",Activite!R[" & k - 1 & "]C[2])"
Selection.Cut
n = n + 1
Range("B" & n & "").Select
ActiveSheet.Paste
Range("A1").Select
ActiveCell.FormulaR1C1 = _
"=CONCATENATE(Activite!R[" & k - 1 & "]C[" & i - 1 & "])"
Selection.Cut
Range("C" & n & "").Select
ActiveSheet.Paste
Range("A1").Select
ActiveCell.FormulaR1C1 = _
"=CONCATENATE(Zone!R[" & j - 1 & "]C[1])"
Selection.Cut
Range("E" & n & "").Select
ActiveSheet.Paste
Range("A1").Select
ActiveCell.FormulaR1C1 = _
"=CONCATENATE(Zone!R[" & j - 1 & "]C[2])"
Selection.Cut
Range("F" & n & "").Select
ActiveSheet.Paste
Range("A1").Select
ActiveCell.FormulaR1C1 = _
"=CONCATENATE(Zone!R[4]C[" & i - 1 & "])"
Selection.Cut
Range("G" & n & "").Select
ActiveSheet.Paste
Range("A1").Select
ActiveCell.FormulaR1C1 = _
"=CONCATENATE(Activite!R[" & k - 1 & "]C)"
Selection.Cut
Range("H" & n & "").Select
ActiveSheet.Paste
Range("A1").Select
ActiveCell.FormulaR1C1 = _
"=CONCATENATE(Activite!R[" & k - 1 & "]C[1])"
Selection.Cut
Range("I" & n & "").Select
ActiveSheet.Paste
Range("A" & n & "").Select
ActiveCell.FormulaR1C1 = "=" & x & ""
x = x + 1
End If
Next k
End If
Next i
End If
Next j
End Sub
Je vous remercie d'avance.
Bonne fin de journée
Salut!
Un fichier exemple peut-être?
Quelle erreur est renvoyée?
Edit:
Au fait à qui sert ton "" dans ton Range("G" & n & "").Select ??
J'ai rajouté un fichier exemple.
Lorsque je lance la macro, je n'ai pas de message d'erreur, j'ai juste excel qui ne répond plus (j'ai laissé tourné pas mal de temps)
Le "Range("G" & n & "").Select" permet de sélectionner la cellule dans laquelle je désire effectuer mon collage.
Ah ca sent la boucle qui fini jamais ton truc. Je regarde ça ce soir
Je viens de regarder.
Je ne comprends pas vraiment le but du fichier mais au niveau du code déjà il y a des choses bizarres.
- A quoi celà te sert de couper et coller systématiquement tes formules de la cellule A1 à la cellule de destination? Ne vaut-il pas mieux directement inscrire la formule dans la cellule finale?
- Concernant tes formules. Je pense qu'il serait préférable d'oublier les concatenate qui ne sont pas utiles quand tu n'as qu'une seule valeur.
Ensuite la macro marche en réalité c'est juste qu'elle met un temps infini à s'executer
Si c'est bon, le but est d'accélérer au maximum l'execution. Donc virer les copier/coller inutiles, simplifier les formules et ... attendre...
Ci joint un code indicatif un peu simplifié mais bon ça fait tout de même 1min30 d'execution sur mon pc core i5.
Public i As Integer
Public j As Integer
Public k As Integer
Public n As Integer
Public x As Integer
Sub macrowbs()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
p = 5
n = 1
x = 1
j = 7
Sheets("Taches").Select
Range("A2:J6000").Select
Selection.ClearContents
Sheets("Zone").Select
Do
If Not IsEmpty(Cells(j, 2)) Then
i = 4
Do
If Not IsEmpty(Cells(j, i)) Then
k = 7
Do
Sheets("Activite").Select
If Not IsEmpty(Cells(k, i)) Then
Sheets("Taches").Select
n = n + 1
Range("B" & n).Value = Sheets("Activite").Cells(k, 1).Value & " - " & Sheets("Activite").Cells(k, 2).Value & " - " & Sheets("Activite").Cells(k, 3).Value
Range("C" & n).Value = Sheets("Activite").Cells(k, i).Value
Range("E" & n).Value = Sheets("Zone").Cells(j, 2).Value
Range("F" & n).Value = Sheets("Zone").Cells(j, 3).Value
Range("F" & n).Value = Sheets("Zone").Cells(5, i).Value
Range("H" & n).Value = Sheets("Activite").Cells(k, 1).Value
Range("I" & n).Value = Sheets("Activite").Cells(k, 2).Value
Range("A" & n).Value = x
x = x + 1
End If
k = k + 1
Loop Until k = 51
End If
i = i + 1
Loop Until i = 31
End If
j = j + 1
Loop Until j = 21
MsgBox ("Operation terminée")
End Sub6000 lignes n'est pas vraiment le résultat attendu. Il faudrait obtenir 414 lignes.
De plus je suis un débutant en VBA et j'ai copié coller fait des copier/coller à cause de formulaR1C1 que j'ai du mal a utilisé.
En fait, il y a encore un problème de boucle, mais ton code simplifie grandement la macro.
Elle fonctionne parfaitement avec le code suivant:
Public i As Integer
Public j As Integer
Public k As Integer
Public n As Integer
Public x As Integer
Sub macrowbs()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
n = 1
x = 1
Sheets("Taches").Select
Range("A2:J1000").Select
Selection.ClearContents
Sheets("Zone").Select
For j = 7 To 20
Sheets("Zone").Select
If Cells(j, 2) <> "" Then
For i = 4 To 30
Sheets("Zone").Select
If Cells(j, i) <> "" Then
Sheets("Activite").Select
For k = 7 To 50
Sheets("Activite").Select
If Cells(k, i) <> "" Then
Sheets("Taches").Select
n = n + 1
Range("B" & n).Value = Sheets("Activite").Cells(k, 1).Value & " - " & Sheets("Activite").Cells(k, 2).Value & " - " & Sheets("Activite").Cells(k, 3).Value
Range("C" & n).Value = Sheets("Activite").Cells(k, i).Value
Range("E" & n).Value = Sheets("Zone").Cells(j, 2).Value
Range("F" & n).Value = Sheets("Zone").Cells(j, 3).Value
Range("G" & n).Value = Sheets("Zone").Cells(5, i).Value
Range("H" & n).Value = Sheets("Activite").Cells(k, 1).Value
Range("I" & n).Value = Sheets("Activite").Cells(k, 2).Value
Range("A" & n).Value = x
x = x + 1
End If
Next k
End If
Next i
End If
Next j
MsgBox "Opération terminée"
End SubMerci pour ton aide
Ah en effet avec ce nouveau code on passe à moins de 10 secondes
Ravi d'avoir pu t'aider