Pb d'extraction de donnée via Query et macro

Bonjour,

J'ai crée une concaténation de 2 fichiers Excel existant (ayant chacun plusieurs onglets) dans un seul et même fichier avec des Queries.

Les données des 2 fichiers sont réparties en 2 onglets spécifiques nommés "PD Process" ou "PD Maintenance".

Je souhaiterais maintenant pouvoir extraire les données des dernières heures/semaine via des macros associées à des boutons dans mon sommaire(dans l’idéal j'aimerais même créer un bouton avec choix de durée ou date...mais ça c'est un autre problème ! ).

Cela fonctionne pour l'un des 2 onglets (la partie "Maintenance") mais pas pour l'autre (la partie "Process") et je n'arrive pas à savoir d'ou vient l'erreur.

Pourriez-vous m'aider sachant que je ne maîtrise pas le VBA et que je pars de Macro existante que j'ai modifiées à la volée.

Voilà le code utilisé:

Sub Historique24hProcess()
'
'----------Efface tout----------------------------------------------------------------------------------------------------
    Sheets("HistoriqueProcess").Select

    Rows("2:100000").Select
    'Selection.Interior.ColorIndex = xlNone
    Selection.ClearContents

    Rows("2:100000").EntireRow.AutoFit
    With Selection.Interior
        .Pattern = xlNone
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    ActiveWindow.SmallScroll Down:=-21

    Range("B1").Select
    Selection.NumberFormat = "m/d/yyyy h:mm"
    Range("B1").Select

Cells(1, 2) = Now()
i = 2

Dim nbjour As Single
nbjour = 1

'------------PD Process---------------------------------------------------------------------------------------------------------
p = 2

While ((Worksheets("PD Process").Cells(p, 2).Value + nbjour) < Worksheets("HistoriqueProcess").Cells(1, 2))
p = p + 1
    If Worksheets("PD Process").Cells(p, 2) = "" Then
    GoTo finpdp
    End If

Wend
'                   ----ONglet---

'_________________________________________________________________________________________________________________________

While Worksheets("PD Process").Cells(p, 4).Value <> ""
Range(Cells(i, 1), Cells(i, 1)).Select
    With Selection.Interior
    .ColorIndex = 44
    End With
Worksheets("HistoriqueProcess").Cells(i, 2).Value = Worksheets("PD Process").Cells(p, 2).Value
Worksheets("HistoriqueProcess").Cells(i, 3).Value = Worksheets("PD Process").Cells(p, 3).Value
Worksheets("HistoriqueProcess").Cells(i, 4).Value = Worksheets("PD Process").Cells(p, 4).Value
Worksheets("HistoriqueProcess").Cells(i, 5).Value = Worksheets("PD Process").Cells(p, 5).Value
Worksheets("HistoriqueProcess").Cells(i, 6).Value = Worksheets("PD Process").Cells(p, 6).Value
Worksheets("HistoriqueProcess").Cells(i, 7).Value = Worksheets("PD Process").Cells(p, 7).Value
Worksheets("HistoriqueProcess").Cells(i, 8).Value = Worksheets("PD Process").Cells(p, 8).Value
Worksheets("HistoriqueProcess").Cells(i, 9).Value = Worksheets("PD Process").Cells(p, 9).Value
Worksheets("HistoriqueProcess").Cells(i, 10).Value = Worksheets("PD Process").Cells(p, 10).Value
Worksheets("HistoriqueProcess").Cells(i, 11).Value = Worksheets("PD Process").Cells(p, 11).Value

p = p + 1
i = i + 1
Wend
finpdp:

'----------Sélection première cellule-------------------------------------------------------------------------------------

Cells(1, 1).Select

'_________________________________________________________________________________________________________________________

End Sub

Et l'ensemble du projet:

image

Je ne sais pas quoi mettre d'autre

PS: le fichier est trop lourd pour l'envoyer avec ma demande mais je peux l'envoyer/partager via un autre biais si besoin.

Bonjour et bienvenue sur ce forum

votre première partie de code comme ceci

'----------Efface tout-------------------
Dim dl As Long
With Sheets("HistoriqueProcess")
    dl = .UsedRange.Rows.Count
    With .Rows("2:" & dl)
        .ClearContents
        .EntireRow.AutoFit
        With .Interior
            .Pattern = xlNone
            .TintAndShade = 0
            .PatternTintAndShade = 0
        End With
    End With

    With .Range("B1")
        .Value = Now()
        .NumberFormat = "m/d/yyyy h:mm"
    End With
End With

ensuite que cherchez-vous à faire sur la partie PD Process dans les lignes While....wend

Malheureusement je ne sais pas trop puisque je ne suis pas à l'origine de ce code et que je n'y connais vraiment pas grand chose en VBA.

Peut être est-ce en rapport avec la limite de temps voulue ?

En gros ce que je cherche à faire c'est:

  1. - Cliquer sur mon bouton "Historique 24h" ou 48H ou Semaine.
  2. - Que ça m'envoie automatiquement dans mon onglet "HistoriqueProcess"
  3. - Que ça efface les anciennes données et extrait toutes les actions faites dans un laps de temps donné (ex: les dernières 24h).

Donc que ça me passe en revue tout mon onglet "PD Process" et que, dans mon onglet historique, je retrouve ce qui s'est passé sur les dernières 24h / 48h ou semaine et pouvoir le rafraîchir à tous moments sans conserver les données précédentes... j'espère que je suis clair !

En gros ce que je cherche à faire c'est extraire, dans un nouvel onglet, toutes les actions faites dans un laps de temps donné (ex: les dernières 24h), en cliquant sur le bouton créé sur mon sommaire.

C'est trop vague pour vous aider correctement
Essayez de placer un fichier sans données confidentielles en réduisant e nombre de données par feuille ou alors essayez de le placer en utilisant l'extension xlsb.

J'essaye mais je ne comprends pas ce qui est aussi lourd, il fait encore 6Mo et y'a quasi plus rien.

J'essaye mais je ne comprends pas ce qui est aussi lourd, il fait encore 6Mo et y'a quasi plus rien.

Ce n'est parce que vous ne voyez rien qu'excel n'a pas garder des infos
le mieux est de sélectionner toutes les lignes et colonnes qui sont vides, puis click droite --> Supprimer

Ensuite enregistrez le fichier

J'ai créé un nouveau doc à partir d'un fichier vierge mais je sais pas si ça va marcher

2book1.xlsx (275.22 Ko)

Ok mais le code n'est plus là ... puisque vous avez enregistré au format xlsx. Je suppose qu'il n'y avait que le code que vous avez posté ?

Il y a aussi des liaisons avec un fichier de maintenance Version 3, normal ?

Edit : bon la feuille Historique ne comporte rien. Expliquez-moi ce que vous devez faire depuis la feuille Process

Je peux envoyer ou partager le fichier via un autre moyen ??

Oui il n'y a que ce code dupliqué pour les différente Macro 24h ou 48h ou Semaine

En fait je pense avoir compris, vous devez recopier toutes les lignes de la feuille Process dont la date est inférieur à la cellule B1 dans feuille Historique ?

Alors en fait B1 est ma date actuelle.

J'ai un onglet qui répertorie toutes les actions faites sur mes machines depuis 2012 (onglet base de données) et je veux pouvoir récupérer dans un nouvel onglet "historique" uniquement les actions des 24 dernières heures en fonctions de ma date actuelle.

ça me permet de toujours alimenter ma base de données et de pouvoir voir d'un coup d'oeil rapide tout ce qui s'est passé la veille en l'affichant dans cet onglet "historique".

J'ai un onglet qui répertorie toutes les actions faites sur mes machines depuis 2012 et je veux pouvoir récupérer dans un nouvel onglet "historique" que les actions des 24 dernières heures en fonctions de ma date actuelle.

Ok mais çà ce n'est pas ce que le code fait
Le code actuel vérifie que la colonne B est inférieur à votre cellule B1 en Historique et copie les lignes de depuis process si la colonne (colonne 4) Tools n'est pas vide
Avec ce que vous l'expliquez, cela voudrait dire que l'on récupère les lignes 46 et 47 de process pour mettre dans Historique (donc deux lignes) . Correct çà ?

Ok alors est-ce possible d'avoir un code différent pour faire ce que je souhaite ?

Oui c'est correct

Si on oublie le code actuel est-ce possible de faire ce que j'ai mis plus haut, à savoir :

  1. - Cliquer sur mon bouton "Historique 24h" ou 48H ou Semaine.
  2. - Que ça m'envoie automatiquement dans mon onglet "HistoriqueProcess"
  3. - Que ça efface les anciennes données et extrait toutes les actions faites dans un laps de temps donné (ex: les dernières 24h).

Donc que ça me passe en revue tout mon onglet "PD Process" et que, dans mon onglet historique, je retrouve ce qui s'est passé sur les dernières 24h / 48h ou semaine et pouvoir le rafraîchir à tous moments sans conserver les données précédentes... j'espère que je suis clair !

Donc que ça me passe en revue tout mon onglet "PD Process" et que, dans mon onglet historique, je retrouve ce qui s'est passé sur les dernières 24h / 48h ou semaine et pouvoir le rafraîchir à tous moments sans conserver les données précédentes... j'espère que je suis clair !

Vous voulez en plus avoir le choix de 24 ou 48 heures, sinon qui peut le plus peu le moins. Avec 48 vous aurez aussi 24...

Question : est-ce que le tri des données pourrait être différent dans process. Là les dates sont par ordre croissant... Est-ce toujours le cas ?

Alors la le fichier est très très très simplifié.

En réalité il y a de nombreuses lignes, avec des dates mélangées car je passe par des Query pour les concaténer.

Il y a possiblement bcp de donnée en 24h, voilà pourquoi je voulais créér un bouton 24h, un autre 48h et un autre 1 semaine.

Mais il est vrai que dans l'idéal j'aurais aimé n'avoir qu'un seul bouton qui ouvre une fenêtre de choix multiple avec jours/mois/année et heure et choisir l'historique récupéré.

Si je prends votre fichier et que l'on se base sur 24 h, la feuille historique reprendrait 2 lignes. celle du 1309 et celle du 14/09

vous auriez ceci

image

Correct ?


Il y a possiblement bcp de donnée en 24h, voilà pourquoi je voulais créér un bouton 24h, un autre 48h et un autre 1 semaine.

On peut créer une seul bouton qui vous permettra de choisir entre 1 jour, 2 jour ou 7 jours
On fait une Inputbox qui vous invite à choisir ce que vous voulez avec 3 choix : vous tapez 1 pour 1 jour, 2 pour 2 jour ou 3 pour 7 jour

Oui c'est exactement ça.

Si c'est possible d'avoir un choix multiple oui mais je ne sais pas faire.

Re

Ok. Remplacez le code par celui-ci

Sub HistoriqueProcess()
'----------Efface tout-------------------
Dim dl As Long
With Sheets("HistoriqueProcess")
    dl = .UsedRange.Rows.Count
    With .Rows("2:" & dl)
        .ClearContents
        .EntireRow.AutoFit
        With .Interior
            .Pattern = xlNone
            .TintAndShade = 0
            .PatternTintAndShade = 0
        End With
    End With

    With .Range("B1")
        .Value = Now()
        .NumberFormat = "m/d/yyyy h:mm"
    End With
End With

'-----------ajout des données--------------
Dim jour As Date
Dim j As Integer
Dim rep As Integer

On Error Resume Next
rep = Application.InputBox("1 = 24 Heures" & vbLf & "2 = 48 Heures" & vbLf & "3 = 1 semaine" & vbLf & "4 = Arrêter", "Choix nombre de jour", , 1)
Select Case rep
     Case Is = 1: K = 2
     Case Is = 2: K = 3
     Case Is = 3: K = 7
     Case Is = 4: Exit Sub
End Select

With Sheets("PD Process")
    dl = .UsedRange.Rows.Count
    j = 2
    For i = dl To 2 Step -1
        jour = Format(.Range("B" & i), "dd/mm/yyyy")
        With Worksheets("HistoriqueProcess")
            If CLng(.Range("B1")) > CLng(jour) + K Then Exit Sub
            .Range("B" & j & ":K" & j).Value = Worksheets("PD Process").Range("B" & i & ":K" & i).Value2
            j = j + 1
        End With
    Next i
End With
End Sub

Ensuite vous pouvez l'associer à votre bouton.

Le code vous demandera d'entrer les valeurs 1, 2, 3 ou 4 pour faire le choix de 24H, 48h, 1 semaine ou pour arrêter

NB : je vous conseille de ne pas mettre des espaces dans le nom de vos feuilles. Cela évite les erreurs éventuelles avec VBA.

Si ok, pensez à cloturer le fil

Cordialement

Bonjour,

Merci pour ce code.

3 choses:

  1. quand je choisis 1 ou 2 ça ne remonte pas de ligne alors qu'elles remontent quand je choisis le 3, et je n'ai pas d'erreur de code.
  2. est-ce possible de basculer directement sur l'onglet de résultat une fois le choix de "date" validé ?
  3. j'ai l'impression que ça ne scan pas l'entièreté de l'onglet PD Process pour ressortir les bonnes infos
Rechercher des sujets similaires à "extraction donnee via query macro"