Erreur 9 suite à ajout ligne en VBA +corriger une ligne code
m
Bonjour,
J'ai une macro qui sauvegarde des données, puis ajoute des lignes si nécessaire puis compare la base sauvegardée avec la base actuelle afin de compléter une colonne.
Mon problème est que mes vu que j'ai ajouté des lignes qui n'étaient pas présentes dans ma base de départ, il me met l'erreur 9, l'indice n'appartient pas à la selection.
Je cherche un moyen de contourner cette erreur de cette façon, S'il y a erreur, alors, la valeur de la colonne M est égale à 0.
je met mon code
Option Explicit
Dim derLn, tabloCol, tablo, c, ln, i, j, v(), w(), n, label, k
Sub Lancer()
Dim fin&, aa, bb, a&
With Feuil31
aa = .Range("$A$2:$N$" & .Range("C" & Rows.Count).End(xlUp).Row)
.Range("$A$2:$L$" & .Range("C" & Rows.Count).End(xlUp).Row).RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6 _
, 7, 8, 9, 10, 11, 12), Header:=xlNo
derLn = .Range("C" & Rows.Count).End(xlUp).Row
Set tabloCol = .Range("C3:C" & derLn)
Set tablo = .Range("A3:N" & derLn)
ReDim v(derLn - 2, 14)
i = 0
For Each c In tabloCol
If c.Offset(0, -2).Value = 1 Then
For j = 0 To 13
v(i, j) = .Cells(c.Row, 1 + j)
Next j
i = i + 1
End If
Next c
tablo.Select
Selection = v
derLn = .Range("C" & Rows.Count).End(xlUp).Row
ReDim w((derLn - 2) * 14, 14)
For i = 0 To derLn - 3
For n = 0 To 13
k = n + 1
label = Choose(k, 1, 1.2, 2, 2.2, 3, 3.2, 4, 5, 6, 7, 7.5, 8, 9, 10)
For j = 0 To 13
If j = 0 Then
w(i * 14 + n, j) = label 'v(i, j)
Else
w(i * 14 + n, j) = v(i, j)
End If
Next j
Next n
Next i
.Range("A3:N" & (derLn - 2) * 14 + 2) = w
fin = .Cells(Rows.Count, "C").End(xlUp).Row
.Range("J3:L3").FormulaR1C1 = "='reference lineaire'!R[1]C[-4]"
.Range("J3").AutoFill .Range("J3:J" & fin)
.Range("K3").AutoFill .Range("K3:K" & fin)
.Range("L3").AutoFill .Range("L3:L" & fin)
.Range("N3").FormulaR1C1 = "=RC[-1]*RC[-2]"
.Range("N3").AutoFill .Range("N3:N" & fin)
.Range("N3:N" & fin).Copy
.Range("N3:N" & fin).PasteSpecial Paste:=xlPasteValues
bb = .Range("A3:O" & .Range("C" & Rows.Count).End(3).Row)
For i = 1 To UBound(bb)
For a = 1 To UBound(aa)
'C'est à la ligne dessous que ça bloque, entre le If et le Then : Si la référence n'est pas trouvée, alors la macro est arrêtée et j'ai droit au message d'erreur, je voudrais que s'il y a erreur alors bb(i, 13) = 0
If (bb(i, 1) = aa(a, 1) And bb(i, 2) = aa(a, 2) And bb(i, 3) = aa(i, 3)) = True Then bb(i, 13) = aa(i, 13) : Exit For
Next a
Next i
.Range("A3").Resize(UBound(bb), UBound(bb, 2)) = bb
End With
Cells(3, 1).Select
End Sub
Merci d'avance pour toute aide
Cordialement
g
Bonjour
Si tu joignais ton fichier, même rendu anonyme, tu aurais plus de chance d'avoir une réponse...
Bye !