[Macro] Une petite erreur 438
Bonjour à tous,
Premièrement voici ce que j'essaye de faire :
J'ai ma colonne 1 "mère" sur mon document. Elle est prête. Elle fait 30 lignes. Guère plus je pense.
a
b
c
d
e
f
Et je saisie depuis un site un tableau qui a cette tête dans une "zone de saisie" sur ma sheet:
a 1
c 2
d 3
e 4
g 5
f 6
Je voudrais qu'il me mette dans la colonne 2 les références dans le bon sens
Ca donnerait
a1
bND
c2
d3
e4
f6
g5
Il a rajouté la ligne g parce qu'il l'avait pas et il a mis ND quand il y avait pas de "match". ND pour 'Non documenté'
Je vide la zone de saisie. Je refais un copie coller depuis le site en question du genre :
a2
b2
c2
Et il me ressort dans la colonne 3 :
a1 2
bND 2
c2 2
d3 ND
e4 ND
f6 ND
g5 ND
Et ainsi de suite
La colonne mère fait 30 ligne.
Mettons que la zone de saisie (à deux colonnes donc) commence ligne 40. C'est la marge que je pense me prévoir. Mais je pourrais toujours augmenter les doses dans le futur si je sens que c'est pas suffisant.
La macro R que j'ai imaginé est la suivante :
Sub R()
Dim i As Long
Dim j As Long
Dim debutDeLaLigneDeSaisie As Long
Dim nombreDeColonne As Long
Dim insere As Boolean
Dim nombreEffectifDeLignesDansLaZoneMere As Long
Dim lastColumn As Long
With ActiveWorkbook.Sheets("Sheet1")
debutDeLaLigneDeSaisie = 40
For i = debutDeLaLigneDeSaisie To Rows.Count
nombreEffectifDeLignesDansLaZoneMere = 0
insere = False
'On itère sur toutes les lignes
For j = 1 To debutDeLaLigneDeSaisie - 1
If Cells(i, 1).Value = Cells(j, 1).Value Then
Cells(j, lastColumn + 1).Value = Cells(i, 2).Value
insere = True
End If
If Cells(j, 1).Value <> "" Then
nombreEffectifDeLignesDansLaZoneMere = nombreEffectifDeLignesDansLaZoneMere + 1
End If
Next j
' On ajoute les données qui sont pas dans la zone mère
If Not insere Then
Cells(nombreEffectifDeLignesDansLaZoneMere, 1).Values = Cells(i, 1).Value
Cells(nombreEffectifDeLignesDansLaZoneMere, lastColumn + 1).Values = Cells(i, 2).Value
nombreEffectifDeLignesDansLaZoneMere = nombreEffectifDeLignesDansLaZoneMere + 1
End If
' On remplit de ND si nécessaire
For j = 1 To debutDeLaLigneDeSaisie - 1
If Cells(j, 1).Value <> "" And Cells(j, lastColumn + 1).Value = "" Then
Cells(j, lastColumn + 1).Value = "ND"
End If
Next j
Next i
End With
End SubDans l'esprit je pense que c'est ça.
Le problème que j'ai c'est qu'il me renvoie une erreur 438
Auriez vous une petite idée ? Suis-je sur la bonne voix ?
Bonsoir phosphorylase
je pense qu'il faut enlever les S à values (value)