Bonjour,
Je débute le VBA pour mener à bout un projet de calcul d'investissement sur Excel.
Je souhaite principalement réaliser des opérations de copier-coller par plages de cellules sur plusieurs onglets.
Ces copier-coller sont soumis également à conditions (généralement que les données comprises dans des plages de cellules ne soient pas égales à 0).
Voici tout d'abord mon code en entier :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| Sub Investment()
Dim i As Integer, j As Integer, m As Integer, n As Integer, p As Integer
m = 16
n = 40
p = 2
Worksheets("OD").Range("D16:AB25").Value = 0
Worksheets("OD").Range("D40:AB49").Value = 0
For q = 4 To Sheets.Count - 1
Worksheets("OD").Range("D144:AB144").Copy
Worksheets(q).Range("D71:AB71").Paste
Next
For j = 2016 To 2040
For i = 4 To Sheets.Count - 1
If Worksheets("OD").Range("D" & m & ":AB" & m).Value <> 0 And Worksheets("OD").Range("D" & n & ":AB" & n).Value <> 0 Then
m = m + 1
n = n + 1
p = p + 1
Else
Worksheets(i).Activate
Worksheets(i).Range("C7").Value = j
If Worksheets(i).Range("D76").Value > 0 Then
Worksheets(i).Range("D43:AB43").Copy
Worksheets("OD").Paste Destination:=Worksheets("OD").Range("D" & m & ":AB" & m)
Worksheets(i).Range("D43:AB43").Copy
Worksheets("OD").Paste Destination:=Worksheets("OD").Range("D" & n & ":AB" & n)
Worksheets(InvYear).Range("B" & p).Value = j
Else
End If
m = m + 1
n = n + 1
p = p + 1
End If
Next
Next
End Sub |
Plusieurs problèmes se posent face à mon inexpérience :
- Une incompatibilité de type sur le bout de code :
1 2
|
Worksheets("OD").Range("D" & m & ":AB" & m).Value <> 0 And Worksheets("OD").Range("D" & n & ":AB" & n).Value <> 0 |
Pourtant les cellules sont bien au format nombre sur Excel. Je pense que le problème peut venir du fait que c'est une plage de cellule.
- "Propriété ou méthode non gérée par cet objet" pour :
Worksheets(q).Range("D144:AB144").Paste
- Erreur d'execution que je comprends pas encore :
Worksheets("OD").Paste Destination:=Worksheets("OD").Range("D" & m & ":AB" & m)
Worksheets("OD").Paste Destination:=Worksheets("OD").Range("D" & n & ":AB" & n)
Je souhaite ici coller les valeurs copiées dans l'onglet "OD" dans les plages de cellules D16:AB16 (car ici n=16) et D40:AB40 (car ici n=40).
Je joins mon fichier en valeurs à ce message, même s'il est assez vaste.
Je précise que je suis débutant (je commence à peine le VBA, même si j'ai des bases dans quelques autres langages).
Pour l'idée générale de mon code VBA dans mon fichier excel.
Je veux tout d'abord que les cellules des plages D16:AB25 et D40:AB49 de l'onglet "OD" soient égales à 0.
Puis je veux copier la plage de cellules de l'onglet "OD" D144:AB144 et la coller sur les cellules D71:AB71 de tous les onglets Invest01 jusqu'à Invest10.
Pour le reste c'est un peu plus compliqué, mais l'idée est la même, toujours des copier-coller de plages de cellules. La boucle for sur i est là pour réaliser ces copier-coller sur les différents onglets, mais j'ai l'impression que ca ne marchera pas comme cela.
Pourriez-vous m'aider s'il vous plait?
Merci d'avance
Partager