Sub testPatricktoulon()
Dim Bd, arr, col&, ligne2&, x&
ChDrive ThisWorkbook.Path: ChDir ThisWorkbook.Path
Bd = Application.GetOpenFilename("Excel Files (*.xlsx), *.xlsx", , "Selectionnez un classeur source") 'dialog fichier
If Bd = False Then MsgBox " operation de récupération annulée": Exit Sub 'on sort si on annule dans le dialog
'valeur recherchée dans la colonne 12 du tableau structuré du fichier fermé
arr = Array(3200000, 3000001, 3200020, 3200100, 3200110, 3200120, 3210000, 3212000, 3212010, 3212100, 3212110, 3212120, 3212200, 3212210, 3212220, 3212300, 3212310, 3212320, 3212400, 3212410, 3212420, 3212430, 3220000, 3220010, 3221000, 3221100, 3221110, 3221120, 3221200, 3221210, 3221220, 3222000, 3222100, 3222110, 3222120, 3222130, 3222200, 3222210, 3222220)
With CreateObject("ADODB.Connection") 'on créée l'object ADODB.connection( en annonyme il sera detruit en sortie de end sub)
Sql = "select [CDPOSTE],[DATE_DEBUT],[HEURE_DEBUT] from [Feuil1$]" 'l'argument de requete connerne certaines colonnes
.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Bd & ";Extended Properties='Excel 12.0;HDR=Yes'" 'on ouvre adobd.connection
tablo = .Execute(Sql).GetRows ' on lui sinifie la requete et tablo prend les valeur des colonnes désirées
.Close 'on ferme adobd.connection
'on a maintenant un tableau de 3 lignes sur X colonnes
' on redim une nouvelle variable tableau a l'inverse (x lignes et 3 colonnes)
ReDim tablo2(1 To UBound(tablo, 2), 1 To 3) 'on redim notre tablo2 de destination direct sans transposer !!!!!!!
For col = 0 To UBound(tablo, 2) 'on boucle sur les colonne du tablo issue de la requete
x = Application.IfError(Application.Match(tablo(0, col), arr, 0), 0) 'test presence dans l'array de la valeur de la ligne 0 et colonne X de "tablo" (anciennement colonne 12 du tableau structuré)
' Debug.Print tablo(0, 20) & "--->" & x ' juste pour controler que le match (positif ou negatif )seproduit bien
If x > 0 Then ' si presence on l'insert dans le tablo2 (les 3 valeur mais transposées)
ligne2 = ligne2 + 1
tablo2(ligne2, 1) = tablo(0, col)
tablo2(ligne2, 2) = tablo(1, col)
tablo2(ligne2, 3) = tablo(2, col)
End If
Next
'voila maintenant on a un tableau avec uniquement les valeurs désirée de la colonne 12 du tableau structuré soit la colonne 0 due tablo
ActiveSheet.[A1].Resize(, 3) = Array("CDPOSTE", "DATE_DEBUT", "HEURE_DEBUT") 'on met les entetes (facultatif)
' maintenant on resize A2 non pas au ubound du tablo2 mais ligne2 qui a été incrémenté tout au long de la boucle et sur 3 colonnes
ActiveSheet.[A2].Resize(ligne2, 3) = tablo2
'terminé pastis et saucisson c'est l'heure
End With
End Sub