VBA Rechercher emplacement articles
bonjour,
quelque chiffres ont le format texte et les autres sont de vrai chiffres. Comme la colonne A de "Données" sont tous Texte, les "chiffres" ne trouvent pas un match exacte. En format "0,00" on voit les vrai chiffres et les textes.
Les 2 macros avec commentaire.
Sub sauv()
Dim TabloA, tabloB, tabloC, TabloD, tabloU, TabloR, fd As Worksheet
Dim iA&, iD&, t
t = Timer
TabloA = Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row) 'array de la colonne A de Acceuil
ReDim Preserve TabloA(1 To UBound(TabloA, 1), 1 To 2) 'agrandir cet array avec une colonne
Set fd = Sheets("Données")
TabloD = fd.Range("A2:A" & fd.Range("A" & Rows.Count).End(xlUp).Row) 'array de la colonne A de Données
TabloR = fd.Range("C2:C" & fd.Range("C" & Rows.Count).End(xlUp).Row) 'array de la colonne C de Données
For iA = 1 To UBound(TabloA, 1) 'boucle les données de la colonne A d'Acceuil
For iD = 1 To UBound(TabloD, 1) 'boucle les données de la colonne A de Données
If TabloA(iA, 1) = TabloD(iD, 1) Then 'MATCH
TabloA(iA, 2) = TabloR(iD, 1) 'copier le valeur de la colonne C de Données
End If
Next iD
Next iA
Range("B2").Resize(UBound(TabloA, 1), 2) = TabloA
MsgBox Format(Timer - t, "0.00")
End Sub
Sub sauv2()
Dim TabloA, TabloD, TabloR
t = Timer
With Sheets("Accueil")
TabloA = .Range("A2:A" & .Range("A" & Rows.Count).End(xlUp).Row) 'array de la colonne A de Accueil
End With
ReDim Preserve TabloA(1 To UBound(TabloA, 1), 1 To 3) 'agrandir cet array avec une colonne
With Sheets("Données")
Set c = .Range("A2:A" & .Range("A" & Rows.Count).End(xlUp).Row) 'plage de la colonne A de Données
TabloD = c.Value 'array de la colonne A de Données
TabloR = c.Offset(, 2).Value 'array de la colonne C de Données, qui est 2 colonne vers droite
End With
For iA = 1 To UBound(TabloA, 1) 'boucle les données de la colonne A d'Accueil
r = Application.Match(TabloA(iA, 1), TabloD, 0) 'recherche ce valeur dans TabloD, match exacte
If Not IsNumeric(r) Then r = Application.Match(CStr(TabloA(iA, 1)), TabloD, 0) 'si no MATCH, recherche après conversion vers texte de ce valeur
If IsNumeric(r) Then TabloA(iA, 2) = TabloR(r, 1) 'copier le valeur de la colonne C de Données
Next iA
Range("B2").Resize(UBound(TabloA, 1), 2) = TabloA
MsgBox Format(Timer - t, "0.00")
End Sub
salutations d'un vieillard de 61 ans
Merci pour ton aide,
En fait l'onglet données est une importation de machine. environ 2500 lignes (tout est en format Standard) (je suis contrôleur qualité)
et mon but est d'aller chercher des résultats
Donc en A je mets les références que je veux voir. sachant qu'il peut y avoir des résultats de références absentes.
en B les informations (Noms des opérations (texte))
et en C les résultats, texte ou chiffres
J'ai cru comprendre que le tableau 3D c'est ce qu'il y aurait de mieux à faire, de plus l'exemple de GMB me plait bien, donc je suis parti sur ce principe
En fait 61 tu as passé le CAP moi je suis sous le choc
Bonjour les "vieillards"
Je comprends mieux cette obstination à vouloir utiliser du VBA
Un contrôleur qualité qui ne sait pas utiliser les formules ou TCD...
Bon, je n'étais que de passage
Nan le contrôleur qualité n'aime pas les formules classiques mais par contre adore VBA et Power Query
Ho merci maître GMB c'est exactement ce que je voulait
@GMB
Merci ! Ce soir je m'endormirai heureux d'avoir appris quelque chose...
Bye !
C'était du sarcasme.
Un des buts d' "option explicit", c'est optimaliser la memoire, mais après execution de la macro ces TabloA, TabloD et TabloR persistent en mémoire.