Comment créer une macro pour sélectionner des données dans des colonnes et
Merci d'avoir pris le temps de travailler avec moi. Je l'apprécie beaucoup beaucoup ...
Comment créer une macro pour sélectionner des données dans des colonnes et des lignes et supprimer les données restantes.Comment créer une macro pour sélectionner des données dans des colonnes et des lignes et supprimer les données restantes.
Transfère ensuite les données dans un nouvel onglet. Ne garder que les dernières dates avec ses données ...
J'ai un problème avec ce classeur que je télécharge sur une base hebdomadaire.
Ses mises à jour hebdomadaires entraînent le déplacement des noms des en-têtes et des noms des lignes dans différentes cellules à mesure que de nouvelles données sont téléchargées.
Ma tâche est de créer une macro pour sélectionner les mots exacts dans certaines colonnes et le groupe exact de mots dans une certaine ligne. Supprimez ensuite le reste des données.
Prochain.
Ensuite, ne prenez que la dernière date avec ses valeurs et en-têtes de chaque groupe de mots et créez un tableau dans une nouvelle feuille de calcul.
Voici un exemple avec les données extraites et leurs valeurs avec ses en-têtes ...
Market_and_Exchange_Names | Report_Date_as_MM_DD_YYYY | NonComm_Positions_Long_All | NonComm_Positions_Short_All | Change_in_NonComm_Long_All | Change_in_NonComm_Short_All | Pct_of_OI_NonComm_Long_All | Pct_of_OI_NonComm_Short_All |
10-YEAR U.S. TREASURY NOTES - CHICAGO BOARD OF TRADE | 12/29/2020 | 599004 | 573755 | 32215 | 57135 | 18.4 | 17.6 |
10-YEAR U.S. TREASURY NOTES - CHICAGO BOARD OF TRADE | 12/21/2020 | 566789 | 516620 | -866 | -23656 | 18 | 16.4 |
SILVER - COMMODITY EXCHANGE INC. | 12/29/2020 | 88868 | 34089 | -1605 | 905 | 52.3 | 20 |
SILVER - COMMODITY EXCHANGE INC. | 12/21/2020 | 90473 | 33184 | 9784 | 2007 | 52.8 | 19.4 |
GOLD - COMMODITY EXCHANGE INC. | 12/29/2020 | 341812 | 72940 | -8058 | 1266 | 61.4 | 13.1 |
GOLD - COMMODITY EXCHANGE INC. | 12/21/2020 | 349870 | 71674 | 9260 | 2648 | 62.4 | 12.8 |
RUSSIAN RUBLE - CHICAGO MERCANTILE EXCHANGE | 12/29/2020 | 7780 | 5729 | -886 | -1102 | 32.1 | 23.6 |
RUSSIAN RUBLE - CHICAGO MERCANTILE EXCHANGE | 12/21/2020 | 8666 | 6831 | 551 | -3911 | 34.2 | 26.9 |
CANADIAN DOLLAR - CHICAGO MERCANTILE EXCHANGE | 12/29/2020 | 42178 | 26810 | -1020 | -6303 | 27.3 | 17.4 |
CANADIAN DOLLAR - CHICAGO MERCANTILE EXCHANGE | 12/21/2020 | 43198 | 33113 | 3342 | -22459 | 27.6 | 21.1 |
SWISS FRANC - CHICAGO MERCANTILE EXCHANGE | 12/29/2020 | 21496 | 9709 | -1790 | -2333 | 41 | 18.5 |
SWISS FRANC - CHICAGO MERCANTILE EXCHANGE | 12/21/2020 | 23286 | 12042 | 6109 | 4156 | 43.7 | 22.6 |
MEXICAN PESO - CHICAGO MERCANTILE EXCHANGE | 12/29/2020 | 56929 | 62187 | 331 | -2660 | 39.9 | 43.6 |
MEXICAN PESO - CHICAGO MERCANTILE EXCHANGE | 12/21/2020 | 56598 | 64847 | -5737 | -715 | 39.6 | 45.4 |
BRITISH POUND STERLING - CHICAGO MERCANTILE EXCHANGE | 12/29/2020 | 35735 | 30903 | -1815 | -615 | 25.5 | 22.1 |
BRITISH POUND STERLING - CHICAGO MERCANTILE EXCHANGE | 12/21/2020 | 37550 | 31518 | 2422 | 458 | 26 | 21.8 |
JAPANESE YEN - CHICAGO MERCANTILE EXCHANGE | 12/29/2020 | 63577 | 16227 | -3393 | -4650 | 32.7 | 8.3 |
JAPANESE YEN - CHICAGO MERCANTILE EXCHANGE | 12/21/2020 | 66970 | 20877 | 1594 | -536 | 34 | 10.6 |
EURO FX - CHICAGO MERCANTILE EXCHANGE | 12/29/2020 | 222848 | 79772 | 405 | 1231 | 33.2 | 11.9 |
EURO FX - CHICAGO MERCANTILE EXCHANGE | 12/21/2020 | 222443 | 78541 | 3733 | 1664 | 33.7 | 11.9 |
BRAZILIAN REAL - CHICAGO MERCANTILE EXCHANGE | 12/29/2020 | 11407 | 21084 | 709 | 883 | 29.1 | 53.8 |
BRAZILIAN REAL - CHICAGO MERCANTILE EXCHANGE | 12/21/2020 | 10698 | 20201 | 0 | 290 | 28.3 | 53.5 |
NEW ZEALAND DOLLAR - CHICAGO MERCANTILE EXCHANGE | 12/29/2020 | 27839 | 15305 | -871 | 249 | 58.1 | 31.9 |
NEW ZEALAND DOLLAR - CHICAGO MERCANTILE EXCHANGE | 12/21/2020 | 28710 | 15056 | -29 | 510 | 59.4 | 31.2 |
SOUTH AFRICAN RAND - CHICAGO MERCANTILE EXCHANGE | 12/29/2020 | 9765 | 2388 | 200 | 300 | 83.5 | 20.4 |
SOUTH AFRICAN RAND - CHICAGO MERCANTILE EXCHANGE | 12/21/2020 | 9565 | 2088 | 105 | 585 | 83.7 | 18.3 |
AUSTRALIAN DOLLAR - CHICAGO MERCANTILE EXCHANGE | 12/29/2020 | 53827 | 60333 | 504 | 2591 | 38.9 | 43.6 |
AUSTRALIAN DOLLAR - CHICAGO MERCANTILE EXCHANGE | 12/21/2020 | 53323 | 57742 | 7537 | 2631 | 39.2 | 42.5 |
Voici la liste des noms pour créer un tableau dans la nouvelle feuille de calcul ...
10-YEAR U.S. TREASURY NOTES - CHICAGO BOARD OF TRADE |
SILVER - COMMODITY EXCHANGE INC. |
GOLD - COMMODITY EXCHANGE INC. |
RUSSIAN RUBLE - CHICAGO MERCANTILE EXCHANGE |
CANADIAN DOLLAR - CHICAGO MERCANTILE EXCHANGE |
SWISS FRANC - CHICAGO MERCANTILE EXCHANGE |
MEXICAN PESO - CHICAGO MERCANTILE EXCHANGE |
BRITISH POUND STERLING - CHICAGO MERCANTILE EXCHANGE |
JAPANESE YEN - CHICAGO MERCANTILE EXCHANGE |
EURO FX - CHICAGO MERCANTILE EXCHANGE |
BRAZILIAN REAL - CHICAGO MERCANTILE EXCHANGE |
NEW ZEALAND DOLLAR - CHICAGO MERCANTILE EXCHANGE |
SOUTH AFRICAN RAND - CHICAGO MERCANTILE EXCHANGE |
AUSTRALIAN DOLLAR - CHICAGO MERCANTILE EXCHANGE |
veuillez télécharger le classeur ci-dessous...
Si vous le souhaitez, merci pour votre aide.
À votre santé
Ceci est un petit fichier pour le mois de janvier
J'espère que je ne l'ai pas rendu déroutant
Bonjour,
Les spécialistes en Power Truc vont te sortir ça en & petit tour !
A+
Merci aux excellents spécialistes. J'attends gracieusement ta réponse ...
Un peu de patience mon ami ils ne sont pas nombreux, mais ça ne saurai tarder : Le simple fait de remonter le fil de temps en temps va les attirer comme des mouche sur la viande... Il faut dire que ton titre et ta présentation ne sont pas motivants : Si tu sais modifier le titre de ton topic, change le pour "extraction de données pour mise à jour BD."
Rien de tel qu'un bon titre pour motiver le chaland...
A+
Bonjour,
Voici une proposition avec PowerVBA : La macro test s'exécute grâce à un double-clic sur la feuille XLS ou depuis le code.
Il y a pour l'instant une macro secondaire qui supprime la feuille. Elle pourra être désactivée.
Sub test()
Dim textract(), chaine$
Set reg = CreateObject("vbscript.regexp")
motif = Join(Application.Transpose(Range("Liste")), "|")
tdatas = Sheets(1).UsedRange
ReDim textract(1 To UBound(tdatas), 1 To UBound(tdatas, 2))
Call supprimer
For i = LBound(tdatas) To UBound(tdatas)
reg.Pattern = motif
chaine = tdatas(i, 1)
If reg.test(chaine) Then
lig = match(chaine, textract, 1)
If lig > 0 Then
If tdatas(i, 2) > textract(lig, 2) Then
For k = LBound(tdatas, 2) To UBound(tdatas, 2)
textract(lig, k) = tdatas(i, k)
Next k
End If
Else
n = n + 1
For k = LBound(tdatas, 2) To UBound(tdatas, 2)
textract(n, k) = tdatas(i, k)
Next k
End If
End If
Next i
If n > 0 Then
Sheets.Add(after:=Sheets(1)).Name = "Extract_" & Format(Date, "YYMMDD")
With Sheets("Extract_" & Format(Date, "YYMMDD"))
.Rows(1).Value = Sheets(1).Rows(1).Value
.Cells(2, 1).Resize(n, UBound(textract, 2)) = textract
'.ListObjects.Add(Source:=.UsedRange, xllistobjecthasheaders:=xlYes).Name = .Name
End With
End If
End Sub
Function match(vcherchee, tableau As Variant, colonne As Long) As Long
For i = LBound(tableau) To UBound(tableau)
If tableau(i, colonne) = vcherchee Then
match = i
Exit Function
End If
Next i
End Function
Cdlt,
Bonjour galopin 01. Merci pour vos commentaires. Je l'apprécie beaucoup.
3 Go J'adore la proposition avec PowerVBA.
En regardant le classeur que vous avez présenté. Je me rends compte que j'ai commis une erreur dans mon explication, que je ne suis pas sûr que vous vouliez m'aider à corriger. Mais votre travail est sur la bonne voie.
Il y a 2 choses:
# 1 sur l'onglet de la feuille de calcul "Extract_210123" que vous avez créé. ce sont la seule colonne que je recherche:
Market_and_Exchange_Names | Report_Date_as_MM_DD_YYYY | NonComm_Positions_Long_All | NonComm_Positions_Short_All | Change_in_NonComm_Long_All | Change_in_NonComm_Short_All | Pct_of_OI_NonComm_Long_All | Pct_of_OI_NonComm_Short_All |
10-YEAR U.S. TREASURY NOTES - CHICAGO BOARD OF TRADE | 1/19/2021 | 633362 | 586786 | 48545 | -48220 | 18.8 | 17.4 |
SILVER - COMMODITY EXCHANGE INC. | 1/19/2021 | 84009 | 32007 | -3896 | -3106 | 50.3 | 19.2 |
GOLD - COMMODITY EXCHANGE INC. | 1/19/2021 | 307507 | 60869 | -5710 | -6121 | 56.8 | 11.2 |
RUSSIAN RUBLE - CHICAGO MERCANTILE EXCHANGE | 1/19/2021 | 6964 | 6079 | 225 | 976 | 29.3 | 25.6 |
CANADIAN DOLLAR - CHICAGO MERCANTILE EXCHANGE | 1/19/2021 | 43633 | 33307 | 247 | 1994 | 28.3 | 21.6 |
SWISS FRANC - CHICAGO MERCANTILE EXCHANGE | 1/19/2021 | 17706 | 8286 | -2715 | -160 | 36.5 | 17.1 |
MEXICAN PESO - CHICAGO MERCANTILE EXCHANGE | 1/19/2021 | 52890 | 60577 | -4680 | -2445 | 36.3 | 41.6 |
BRITISH POUND STERLING - CHICAGO MERCANTILE EXCHANGE | 1/19/2021 | 45904 | 32199 | -2031 | -2794 | 31.2 | 21.9 |
JAPANESE YEN - CHICAGO MERCANTILE EXCHANGE | 1/19/2021 | 64143 | 14129 | 286 | 792 | 33.5 | 7.4 |
EURO FX - CHICAGO MERCANTILE EXCHANGE | 1/19/2021 | 236533 | 73067 | 7776 | 200 | 35 | 10.8 |
BRAZILIAN REAL - CHICAGO MERCANTILE EXCHANGE | 1/19/2021 | 12978 | 20123 | -6 | 1407 | 47.8 | 74 |
NEW ZEALAND DOLLAR - CHICAGO MERCANTILE EXCHANGE | 1/19/2021 | 27997 | 12014 | 1866 | 590 | 60.5 | 26 |
SOUTH AFRICAN RAND - CHICAGO MERCANTILE EXCHANGE | 1/19/2021 | 7516 | 2233 | -1226 | -56 | 71.4 | 21.2 |
AUSTRALIAN DOLLAR - CHICAGO MERCANTILE EXCHANGE | 1/19/2021 | 59927 | 55067 | -523 | 73 | 41.5 | 38.2 |
Le reste des colonnes dans "Extract_210123" l'onglet peut être supprimé.
#2 Vous avez également fait un excellent travail avec les données fournies. Je n'ai plus besoin du troisième onglet "Feuil1".
Ce sont toutes les informations que je voulais.
Comme je place de nouvelles données sur une base hebdomadaire, sur l'onglet "XLS".
Le résultat souhaité que je recherche est d'obtenir la dernière date avec ses valeurs dans l'onglet "Extraire_210123" uniquement.
Merci à tous pour votre contribution.
Je suis ravi d'avoir bien travaillé
Je regarderai pour les colonnes.
Il faut savoir que l'onglet "Feuil1" contient la liste des infos à extraire qui est utilisée dans le code. Donc si on supprime cet onglet, il n'y aura plus d'exécution possible. Il est cependant possible de le masquer...
Que voulez-vous faire exactement chaque semaine ? Remplacer les infos ? Ajouter les infos ? Ou créer un nouvel onglet ?
Cdlt,
Merci pour vos commentaires et votre réponse rapide.
# 1 Concernant les données dans l'onglet "XLS". Je vais remplacer les données ... Chaque semaine, de nouvelles données sont ajoutées. Début janvier 2021 à fin décembre 2021.
Donc le plan est. Pour télécharger le dernier fichier. Puis copiez et collez dans l'onglet "XLS". Cliquez ensuite sur le bouton macro et ... Comme par magie. Obtenez les dernières données dans l'onglet "Extract_210123".
Concernant "sheet1", je n'ai aucun problème. Vous n'avez pas besoin de le cacher ...
J'espère que les informations vous aideront.
Merci d'avance
Bonjour,
Non, désolé, je ne comprends toujours pas...
Je me doute que les données de XLS évolueront. Ce n'est pas un problème puisque la macro récupère la dernière opération (date la plus récente) des lignes qui nous intéressent. Mais, dans l'onglet Extract (_210123, c'était pour la date du jour), on peut effacer les données existantes et les remplacer (donc en fait laisser le code tel quel) ou ajouter les nouvelles données exportées à la suite. C'est ça la question !
La feuille "Feuil1" est fondamentale. Dessus, il y a la liste des opérations à extraire. Sans cette liste, le code ne pourra pas deviner ce qu'il doit prendre. C'est pour ça qu'il faut la garder.
Cdlt,
Voici le code mis à jour avec ce qu'il faut changer, à savoir juste le filtre sur les colonnes, et un peu de mise en forme :
Sub test()
Dim textract(), tfiltre(), chaine$
Set reg = CreateObject("vbscript.regexp")
motif = Join(Application.Transpose(Range("Liste")), "|")
tdatas = Sheets(1).UsedRange
ReDim textract(1 To UBound(tdatas), 1 To UBound(tdatas, 2))
reg.Pattern = motif
Call SupprimerExtract ' SUPPRESSION DE LA FEUILLE EXTRACT
'RECUPERATION DES LIGNES (LES + RECENTES) DE LA LISTE "Liste"
For i = LBound(tdatas) To UBound(tdatas)
chaine = tdatas(i, 1)
If reg.test(chaine) Or i = 1 Then
lig = match(chaine, textract, 1)
If lig > 0 Then
If tdatas(i, 2) > textract(lig, 2) Then
For k = LBound(tdatas, 2) To UBound(tdatas, 2)
textract(lig, k) = tdatas(i, k)
Next k
End If
Else
n = n + 1
For k = LBound(tdatas, 2) To UBound(tdatas, 2)
textract(n, k) = tdatas(i, k)
Next k
End If
End If
Next i
'SORTIE SI PAS DONNEES
If n < 2 Then
MsgBox "Désolé... Nous n'avons pas trouvé les données recherchées", vbCritical, "Aucune correspondance"
Exit Sub
End If
'FILTRE LES COLONNES CIBLEES
ReDim tfiltre(1 To n, 1 To UBound(textract, 2))
motif = Join(Application.Transpose(Range("Titres")), "|")
reg.Pattern = motif
For k = LBound(textract, 2) To UBound(textract, 2)
chaine = tdatas(1, k)
If reg.test(chaine) Then
kk = kk + 1
For i = 1 To n
tfiltre(i, kk) = textract(i, k)
Next i
End If
Next k
'AJOUT FEUILLE, TABLEAU ET MISE EN FORME
Sheets.Add(after:=Sheets(1)).Name = "Extract"
With Sheets("Extract")
.Cells(1, 1).Resize(n, kk) = tfiltre
.ListObjects.Add(Source:=.UsedRange, xllistobjecthasheaders:=xlYes).Name = "Extract" '<<option
With .Range("Extract")
.Columns.ColumnWidth = 16
.Columns(1).ColumnWidth = 60
With .Rows(0)
.WrapText = True
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
End With
End With
End Sub
Cdlt,
Citation "Je soupçonne que les données XLS vont changer. Ce n'est pas un problème puisque la macro récupère la dernière opération (date la plus récente) à partir des lignes qui nous intéressent. Mais, dans l'onglet Extraire (_210123, c'était pour la date actuelle ), nous pouvons effacer les données existantes et les remplacer (donc en fait laisser le code tel quel) ou ajouter les nouvelles données exportées par la suite ».
C'est la bonne solution.
Le fichier fonctionne parfaitement.
J'aime cela. Merci, merci et merci beaucoup ...
J'apprécie vraiment votre temps et vos efforts donnés ...
https://giphy.com/gifs/clapping-clap-standing-ovation-qIXVd1RoKGqlO/fullscreen
Bonne continuation pour la suite,
Cdlt,