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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| Sub Report_prix_de_onglet_a_vers_onglet_b()
Set a = Application.InputBox("Sélectionner la zone de travail de a", "Onglet Source a", , , , , , 8)
Set cnpa = Application.InputBox("Sélectionner la colonne de Numéro de prix de la Source a", "Colonne Numéro de prix de la Source a", , , , , , 8)
Set cla = Application.InputBox("Sélectionner la colonne de Libellé de la Source a", "Colonne Libellé de la Source a", , , , , , 8)
Set cpa = Application.InputBox("Sélectionner la colonne de Prix de la Source a", "Colonne Prix de la Source a", , , , , , 8)
Set b = Application.InputBox("Sélectionner la zone de travail de b", "Onglet Destination b", , , , , , 8)
Set cnpb = Application.InputBox("Sélectionner la colonne du Numéro de prix de la Destination b", "Colonne Numéro de prix de la Destination b", , , , , , 8)
Set clb = Application.InputBox("Sélectionner la colonne du Libellé de prix de la Destination b", "Colonne Libellé de la Destination b", , , , , , 8)
Set cpb = Application.InputBox("Sélectionner la colonne du Prix de la Destination b", "Colonne Prix de la Destination b", , , , , , 8)
ncnpa = cnpa.Column 'numéro de la colonne du numéro de prix de l'onglet a
ncla = cla.Column 'numéro de la colonne du libellé de l'onglet a
ncpa = cpa.Column 'numéro de la colonne du prix de l'onglet a
ncnpb = cnpb.Column 'numéro de la colonne du numéro de prix de l'onglet b
nclb = clb.Column 'numéro de la colonne du libellé de l'onglet b
ncpb = cpb.Column 'numéro de la colonne du prix de l'onglet b
For numligne = 1 To b.Rows.Count 'regarde l'ensemble des lignes du tableau de destination de l'onglet b vers lequel on veut recopier les données
With b
If .Cells(numligne, ncnpb) <> 0 Then 'si une cellule est vide alors
For i = 1 To 20 'valeur de imax = 20 arbitraire
If .Cells(numligne + i, ncnpb) <> 0 And Len(.Cells(numligne, ncnpb)) >= Len(.Cells(numligne + i, ncnpb)) Then 'vérifie le nombre de caractères
Set trouvé = a.Find(What:=b.Cells(numligne, ncnpb), LookAt:=xlWhole) 'cherche le contenu de la cellule du numéro de prix de l'onglet b dans l'onglet source a
Set trouvé2 = a.Find(What:=b.Cells(numligne, nclb), LookAt:=xlWhole) 'cherche le contenu de la cellule du libellé de l'onglet b dans l'onglet a
If Not trouvé Is Nothing And Not trouvé2 Is Nothing Then 'vérifie qu'il a bien trouvé ce qu'il a à trouver
If trouvé.Row = trouvé2.Row Then 'vérifie que le numéro de prix et le libellé de l'onglet b qui sont sur la même ligne sont bien sur la même ligne dans l'onglet a. En effet, il y a parfois des inversions et des boulettes
x = Replace(b.Cells(numligne, nclb), " ", "") 'élimine les problèmes liés aux espaces
y = Replace(trouvé2.Text, " ", "")
x2 = Replace(x, Chr(10), "") 'élimine les nouvelles lignes
y2 = Replace(y, Chr(10), "")
x3 = Replace(x, Chr(13), "") 'élimine les retours chariot
y3 = Replace(y, Chr(13), "")
If InStr(x3, y3) Then
.Cells(numligne + i - 1, ncpb).Value = Application.VLookup(.Cells(numligne, ncnpb), a, ncpa, False) 'effectue une recherche verticale et renvoie dans la cellule la valeur du prix correspondant au numéro de prix pris comme référence
Exit For
End If
End If
End If
End If
Next
End If
End With
Next
End Sub |
Partager