Copier des données selon un seuil de valeur comprise entre x numéro

Bonjour à tous,

j'ai 22 pages avec un très grands nombres de formules divers et je cherche le moyen de faire en sorte de regrouper les valeurs finaux vers une page unique afin d'avoir un visuel global sur ceux ci.

Mon dilemme est que pour choisir ces valeurs elles doivent être comprises entre un seuil que je dois déterminer avec une formule si possible ou un code VBA pour être envoyé vers cette page unique.

Cela ne doit pas être compliqué à réaliser mais avec ma maigre connaissance en VBA, je n'arrive pas mettre en place ce genre de code ou formule et je demande votre aide s'il vous plait pour m'aider à réaliser cela.

je joins une démo ou j’explique du mieux que je peux ce que je cherche à réaliser.

Je vous remercie d'avance.

21demo.xlsm (19.61 Ko)

Bonjour,

Dans la feuille "Resultat", saisissez les seuils haut et bas en B1 et B2, puis cliquer sur le bouton pour importer les valeurs.

Cdlt

Bonjour Arturo83, je te remercie de t'être manifesté et m'avoir donné une solution à mon dilemme, ton code réponds à mes attentes sur la démo, j'ai donc modifié les paramètres et adapté celui ci par apport à mes feuilles, qui m'ont apprise pas mal de choses grâce à tes commentaires sur le code, je l'ai testé sur une des feuilles en modifiant "page" par son nom qui a bien fonctionné mais j'ai omis de mentionner que mes 22 pages ont des noms différents qui fait que je dois lui spécifier les pages à traiter par ce bout de code à modifier je pense

If Left(Sheets(i).Name, 4) = "Page" Then

Comme mon classeur se compose de 30 pages en tout et que le code doit traiter 22 pages qui sont à droite, serait il possible de lui spécifier les page à traiter dans sa boucle? ou je dois mettre un nom unique devant mes noms existant?

Je m'excuse d'avoir omis cela car pour la démo je voulais schématiser au plus simple pour que ce soit compréhensible.

"Je m'excuse d'avoir omis cela car pour la démo je voulais schématiser au plus simple pour que ce soit compréhensible."

Comme quoi, il est important de déposer un fichier qui soit au plus proche du fichier réel, sinon il faut tout reprendre.

Dans votre cas, s'il y a 30 feuilles et que les 22 feuilles à tester sont toutes à droites alors:

Sub Resultat()
    Dim i As Long, j As Long, Lig_Dest As Long, Col_Dest As Long
    Dim Seuil_Bas As Long, Seuil_Haut As Long
    Application.ScreenUpdating = False
    Sh_Res.Range("C7:AG28").ClearContents 'effacement des précédents résultats
    Seuil_Haut = Sh_Res.Range("B1").Value
    Seuil_Bas = Sh_Res.Range("B2").Value
    Lig_Dest = 7 'première ligne de la feuille "Resultat" ou sera recopiée les valeurs
    For i = 8 To Sheets.Count
        Col_Dest = 3 'première colonne de la feuille "Resultat" ou sera recopiée les valeurs
        'Application des formules pour trouver les valeurs à exporter vers la feuille "Resultat"
         Sheets(i).Range("S29:AV29").FormulaR1C1 = "=R[-22]C[-2]"
         Sheets(i).Range("S31:AV31").FormulaR1C1 = "=COUNTIF(R[-11]C:R[-4]C,MAX(R[-11]C:R[-4]C))"
         'Exportation des valeurs comprises dans les seuils
         For j = 19 To 49 'de la colonne 19 à 49
             If Sheets(i).Cells(31, j) >= Seuil_Bas And Sheets(i).Cells(31, j) <= Seuil_Haut Then
                 Sh_Res.Cells(Lig_Dest, Col_Dest).Value = Sheets(i).Cells(29, j).Value
                 Col_Dest = Col_Dest + 1 'colonne suivante de la feuille "Resultat" ou sera recopiée les valeurs
             End If
         Next j
         Sh_Res.Cells(Lig_Dest, "B").Value = Sheets(i).Name 'copie le nom de la feuille traitée en colonne B
         Lig_Dest = Lig_Dest + 1 'ligne suivante de la feuille "Resultat" ou sera recopiée les valeurs
    Next i
End Sub

Merci infiniment pour votre aide et votre patience à expliquer chaque fonctionnement du code, j'ai appliqué la modification et il a bien recopié les valeurs demandés..

Je suis conscient que le classeur original est mieux qu'une démo mais il y a des données sensibles que je ne peux partager au vu de tout le monde..

Mais mission réussi et je peux mettre en résolu !

Bonjour Arturo83, j'aimerais encore solliciter vos connaissances pour m'aider sur le projet d'importation de valeur selon un seuil.

Si c'est possible de créer un code et à l'aide d'un bouton que quand on appuie dessus, prends toutes les valeurs de chaque lignes et les places sur une ligne à la suite et en ordre croissant, et petit bonus si possible est de me donner les valeurs manquantes de la série sur une autre ligne.

J'ai d'abord essayé de créer une macro pour copier coller les valeurs mais le problème est que le nombre de cellule a partir de C7 n'est jamais la même et varient à chaque importation et donc je dois tout le temps copier coller toutes les lignes, trier du plus petit au plus grand et ensuite vérifier les numéro manquants quand j'importe les données.

Je voulais créer un nouveau post avec une démo mais comme vous avez créé le code précédent, vous êtes le mieux placé pour comprendre le contexte, mais je ne veux pas abuser de vos compétences et si vous refusez je comprendrais sincèrement et irais créer un nouveau poste.

Mais cela m'aiderais grandement dans mon travail si cela se réalise.

En vous remerciant par avance

16demo.xlsm (18.22 Ko)

Bonjour,

Voici la macro:

Sub Resultat()
    Dim DerLig As Long, DerCol As Long, i As Long, Col_Dest_Exist As Long, Col_Dest_NonExist As Long
    Dim NbExist As Long, NbNonExist As Long
    Application.ScreenUpdating = False
    Rows("32:34").ClearContents 'Effacement des précédents résultats
    Col_Dest_Exist = 3 'première colonne libre pour résultat des valeurs existantes
    Col_Dest_NonExist = 3 'première colonne libre pour résultat des valeurs inexistantes
    DerLig = Range("B" & Rows.Count).End(xlUp).Row 'Dernière ligne de la liste
    DerCol = Range(Cells(7, "C"), Cells(DerLig, 100)).SpecialCells(xlCellTypeLastCell).Column 'Dernière colonne de la liste
    For i = 1 To 40 'pour le numéros de 1 à 40
        NbExist = Application.WorksheetFunction.CountIf(Range(Cells(7, "C"), Cells(DerLig, DerCol)), i) 'on compte le nombre de fois ou l'on trouve le numéro recherché
        If NbExist = 0 Then 'si le nombre de fois est égal à 0, alors:
            Cells(34, Col_Dest_NonExist).Value = i 'on l'inscrit sur la ligne 34
            Col_Dest_NonExist = Col_Dest_NonExist + 1 'on incrémente de 1 la nouvelle colonne de destination
        Else 'sinon:
            Range(Cells(32, Col_Dest_Exist), Cells(32, Col_Dest_Exist + NbExist - 1)).Value = i 'on recopie le numéro trouvé autant de fois qu'il existe
            Col_Dest_Exist = Col_Dest_Exist + NbExist 'on incrémente le numéro de la dernière colonne du nombre de fois où le numéro à été trouvé
        End If
    Next i 'on cherche le numéro suivant
End Sub


***************************************************************************

Je suis conscient que le classeur original est mieux qu'une démo mais il y a des données sensibles que je ne peux partager au vu de tout le monde..

Je ne vous ai pas demandé le fichier réel, simplement un fichier le plus représentatif possible et sans données confidentielles.

Cdlt

Je vous remercie encore une fois pour votre implication et votre aide, toujours bien détaillé et clair.. j'envie votre connaissance et cette facilité à écrire des codes si efficace comme la plupart des personnes et ceux qui m'ont déjà aidé sur ce forum, merci pour tout ce que vous faites :)

Et vous avez raison, j'aurai du représenter au plus proche ma démo et malgré cela vous vous êtes débrouillé comme un chef!

il y a 3 mois de cela je connaissait pas excel à part word pour le traitement de texte et encore moins le VBA mais je m'instruit petit à petit et grâce à vos commentaire précieuse dans les codes cela permet de mieux comprendre les étapes et aussi pour peut être aider quelqu'un d'autre qui lira le post.

Sujet Résolu ;)

Rechercher des sujets similaires à "copier donnees seuil valeur comprise entre numero"