Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Séparer les données d'un fichier Source en fonction de la valeur dans une colonne

  • Initiateur de la discussion Initiateur de la discussion Magnio
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Magnio

XLDnaute Nouveau
Bonjour à tous,

J'ai tenté de faire ce projet mais je me heurte à une difficulté (ou plutôt un manque de connaissances de ma part ^^) qui requièrent votre aide.

Le fichier principal est Séparation Rapports, on clique sur le bouton Rouge et on va choisir le fichier REQUETE v1 d'où extraire les données.

Le but: en fonction de la valeur de la cellule en colonne H, trier les données et les incrémenter au fil de l'eau dans les onglets appropriés.
(Vous pouvez voir le résultat souhaité dans le fichier: Séparation Rapports Résultats Souhaités)

Je sais aller piocher la valeur d'une cellule en fonction d'une autre, mais je n'ai encore jamais expérimenter de sélectionner une ligne entière (du moins dans ce cas précis de la colonne B à S).

Si quelqu'un peut éclairer ma lanterne, cela me sera très utile et me fera progresser dans mes connaissances en VBA.
Merci. =)
 

Pièces jointes

Solution
Re,
Ai je le droit d'écrire dans le fichier requêtes avant de le fermer ?
Par exemple mettre en A1 la date et en B1 "Fichier déjà traité."
Il suffit alors de lire ces cellules avant exportation ou non.
Voir essai en PJ.
Bonjour Magnio,
Un essai en PJ, la macro est commentée.
Si problème, exposez le souci avec précision.
Ça fonctionne. Je n'avais pas pensé à définir un tableau, simple mais efficace.

Mais il faudrait effectuer une modification; et c'est de ma faute car j'ai oublié de le préciser; il faudrait que cela s'incrémente au fur et à mesure que je charge des Requêtes.
 
Mais il faudrait effectuer une modification; et c'est de ma faute car j'ai oublié de le préciser; il faudrait que cela s'incrémente au fur et à mesure que je charge des Requêtes.
Voir PJ. Par contre si on fait l'opération plusieurs fois sur le même fichier on recopie plusieurs fois les mêmes données.
Et je ne vois pas quelle sécurité mettre en place pour éviter cela.
Vos fichiers sources peuvent ils porter quelquefois le même nom, ou les noms seront ils toujours différents ?
 

Pièces jointes

Re,
Ai je le droit d'écrire dans le fichier requêtes avant de le fermer ?
Par exemple mettre en A1 la date et en B1 "Fichier déjà traité."
Il suffit alors de lire ces cellules avant exportation ou non.
Voir essai en PJ.
 

Pièces jointes

Dernière édition:
Alors il n'y avait aucun problème au fait de pouvoir recopier plusieurs fois les mêmes données, car peut-être que cela arrivera un jour.
Mais la proposition v4 est parfaite avec ce garde-fou qui vérifie si le fichier a déjà été importé ou non. (Et au pire, si on veut réinjecter les valeurs dans la macro, il suffit de supprimer le contenu des cellules A1 et B1 ^^)

Un grand merci à toi! 🙂
 
Bonsoir Magnio, sylvanu,

On peut importer et filtrer par le filtre automatique tous les fichiers .xlsx situés dans un même dossier.

Avec cette solution le fichier .xlsm de la macro doit être dans ce même dossier :
VB:
Sub ImporterFiltrer()
Dim t, F1 As Worksheet, F2 As Worksheet, chemin$, fichier$, n, c As Range
t = Timer
Set F1 = Sheets("Inférieur 0,4")
Set F2 = Sheets("Supérieur 0,4")
chemin = ThisWorkbook.Path & "\" 'dossier à adapter
fichier = Dir(chemin & "*.xlsx") '1er fichier du dossier
Application.ScreenUpdating = False
F1.Rows("5:" & Rows.Count).Delete 'RAZ
F2.Rows("5:" & Rows.Count).Delete 'RAZ
While fichier <> ""
    With Workbooks.Open(chemin & fichier).Sheets(1)
        n = n + 1
        With .Range("B4:S" & .Cells.SpecialCells(xlCellTypeLastCell).Row)
            .AutoFilter 'ôte le filtre automatique
            .AutoFilter 7, ">0", xlAnd, "<=0.4"
            Set c = F1.Cells(F1.Cells(F1.Rows.Count, 8).End(xlUp).Row + 1, 2)
            .Copy c
            c.EntireRow.Delete
            .AutoFilter
            .AutoFilter 7, ">0.4"
            Set c = F2.Cells(F2.Cells(F2.Rows.Count, 8).End(xlUp).Row + 1, 2)
            .Copy c
            c.EntireRow.Delete
        End With
        .Parent.Close False
    End With
    fichier = Dir 'fichier suivant
Wend
MsgBox n & " fichiers importés et filtrés en " & Format(Timer - t, "0.00 \sec")
End Sub
Bonne nuit.
 

Pièces jointes

Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…