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

XL 2013 filtrage et copiage de données dans une autre feuille excel

cedric_hiss

XLDnaute Junior
Bonjour tout le monde

je travaille sur un code lié a une userform pour calculer un pourcentage de donnees dans une colonne et apres de copier les données de le feuille "Sheet1" a une autre feuille appelé "filtred_data" , dans la userform j'ai une zone text ou je tape un numero qui est le pourcentage choisi par l'utilisateur ca marche tres bien apres qu'on je fais appelle a la procedure qui calcule le pourcentage et qui me copie les donnees vers la deuxieme feuille la ou je trouve probleme .

j'ai des donnees en colonne E sur laquelle je filtre par exemple j'ai des valeur de 1 jusqu'au 500 si l'utilisateur choisi 50 alors le code doit chercher les donnees jusqu'a la valeur 255 et me copie ces valeur de la feuille 1 a la feuille deux , ce que le code me fait il recupere la valeur de la deuxieme cellule dans la colonne D et il me la copie partout dans la deuxieme feuille voila les deux codes que j'utilise le premier pour recupere la valeur choisi par l'utilisateur et la deuxieme qui fait le calcule et le copiage , si vous pouvez m'aider a trouver ou esst le probleme dans mon code s'il vous plait et merci .

code 1

Code:
Private Sub CommandButton1_Click()
Sheets("filtred_data").Cells.ClearContents
Dim pctg As Long
pctg = Val(TextBox1.Text)
Call OK(pctg)
 
End Sub

Code 2
Code:
Public Sub OK(pctg As Long)
 
Dim LastKRow As Long
Dim plage As Range
With Sheets("Sheet1").Range("A1:E100000")
 
 LastERow = Cells(Rows.Count, "E").End(xlUp).Row
  x = Range("E65535").End(xlUp).Value
  y = x * pctg / 100
  Set plage = .Find(What:=y, _
                            After:=.Cells(LastERow, 5), _
                            LookIn:=xlValues, _
                            LookAt:=xlPart, _
                            SearchOrder:=xlByRows, _
                            SearchDirection:=xlNext, _
                            MatchCase:=False)
  plage.Copy Sheets("filtred_data").Range("A1:E100000")
  MsgBox " Nombre de communauté filtré est " & plage
End With
 
End Sub
et voila le fichier sur le quel je bosse :percentage-new.xlsm
 

thebenoit59

XLDnaute Accro
Re : filtrage et copiage de données dans une autre feuille excel

Peux-tu essayer avec le code ci-dessous ?

Code:
Public Pourcentage As Integer
Public Satisfait As Boolean

'Forumeur : cedric_hiss
'Auteur : TheBenoit59
'Lien : 

Sub Exportation_filtred()
    Satisfait = False
    UserForm1.Show
    If Not Satisfait Then Exit Sub
    Sheets("filtred_data").Range("a:e").ClearContents
    With Sheets("Sheet1")
        j = .[e65000].End(xlUp).Row
        Valeur_Max = .Cells(j, "e").Value * Pourcentage / 100
        'On boucle la ligne pour récupérer la ligne ayant la valeur la plus haute
        For i = 2 To j + 1
            If .Cells(i, "e").Value > Valeur_Max Or .Cells(i, "e").Value = "" Then
                .Range("a1:e" & i - 1).Copy Sheets("filtred_data").[a1]
                Exit For
            End If
        Next i
    End With
    MsgBox "Nombre de communautées filtrées " & i - 1
End Sub
 

cedric_hiss

XLDnaute Junior
Re : filtrage et copiage de données dans une autre feuille excel

thebenoit59 pour un deuxieme choix quand je rechoisit un autre pourcentage le code ne s'applique pas la userform s'expire sans aucun resultat pour le nouveau filtre c'est a cause de quoi ?
 

cedric_hiss

XLDnaute Junior
Re : filtrage et copiage de données dans une autre feuille excel

enfaite quand je fais le premier filtre j'entre le pourcentage et ca marche mais quand j'execute une autre fois avec une autre valeur de pourcentage le code ne fait rien y a pas de changement. parexemple dans le premier filtre je choisi 50% et ca marche on a 50% de donnees qui se copient a la feuille "filtred_data" mais quand je reexecute une deuxieme fois avec disant que 30% normalement les donnees doivent changer dans la feuilles " filtred_data" mais il reste toujours que les donnees du premier filtre et meme si je vide les donnees manuellement .
 
Dernière modification par un modérateur:

thebenoit59

XLDnaute Accro
Re : filtrage et copiage de données dans une autre feuille excel

D'accord.
Comment procèdes-tu ? Tu as un bouton qui ouvre ton UserForm ?
Car ici, j'ai utilisé une Boolean pour vérifier que le bouton de l'UserForm pour démarrer la procédure.
Je te joins les différents codes commentés ci-dessous.

Code:
Public Pourcentage As Integer
Public Satisfait As Boolean

'Forumeur : cedric_hiss
'Auteur : TheBenoit59
'Lien : 

Sub Exportation_filtred()
    'Satisfait est un Boolean, ce qui nous permettra de vérifier sa valeur en sortie de l'UserForm
    Satisfait = False
    'On affichage l'UserForm
    UserForm1.Show
    'Si Satisfait ressort avec la valeur True, donc en cliquant sur le bouton d'action de l'UserForm, on continue la procédure
    If Not Satisfait Then Exit Sub
    'On nettoie les colonnes A à E
    Sheets("filtred_data").Range("a:e").ClearContents
    With Sheets("Sheet1")
        'On détermine la dernière ligne de la feuille
        j = .[e65000].End(xlUp).Row
        'On en détermine la valeur maximale après application du pourcentage
        Valeur_Max = .Cells(j, "e").Value * Pourcentage / 100
        'On boucle la ligne pour récupérer la ligne ayant la valeur la plus haute
        For i = 2 To j + 1
            'Si la valeur en colonne E est supérieure à la valeur maximale ou que nous avons passé la dernière valeur
            'Nous appliquons l'extraction
            'Et on sort de la boucle
            'Sinon on continue de boucler
            If .Cells(i, "e").Value > Valeur_Max Or .Cells(i, "e").Value = "" Then
                'On copie le tableau de [a1] à la dernière ligne de la boucle - 1 en colonne E
                'En effet nous avons soit dépassé la valeur max soit nous sommes sortis du tableau avec "i"
                .Range("a1:e" & i - 1).Copy Sheets("filtred_data").[a1]
                Exit For
            End If
        Next i
    End With
    'On affiche la box
    MsgBox "Nombre de communautées filtrées " & i - 1
End Sub

Code:
Private Sub CommandButton1_Click()
    'On enregistre la variable
    Pourcentage = TextBox1.Value
    'On vérifie qu'elle ne soit pas au dessus de 100
    If Pourcentage > 100 Then MsgBox "Insérer une valeur maximale de 100", 16: Exit Sub
    'On applique la valeur True à Satisfait, indispensable pour continuer la procédure
    Satisfait = True
    'On décharge l'UserForm
    Unload Me
End Sub

Profitons en pour modifier le nettoyage de la seconde feuille en utilisant
Code:
    'On supprime les lignes inutiles pour la suite
    Sheets("filtred_data").Rows("1:" & Sheets("filtred_data").[a65000].End(xlUp).Row).Delete

Au lieu de

Code:
    'On nettoie les colonnes A à E
    Sheets("filtred_data").Range("a:e").ClearContents

As-tu modifié une partie du code dans ton fichier ?
 
Dernière édition:

cedric_hiss

XLDnaute Junior
Re : filtrage et copiage de données dans une autre feuille excel

non j'ai rien modifier et merci beaucoup pour l'explication enfaite la userform s'ouvre la premiere en ouvrant le fichier excel , la premiere fois le code marche tres bien , mais pour l'appliquer une deuxieme fois il fait rien meme si je ferme et je reouvre le fichier s'il y a des donnees dans la deuxieme feuille "filtred_data " le code ne fait aucun changement , est ce que ca a avoir avec le boolean ?
 

thebenoit59

XLDnaute Accro
Re : filtrage et copiage de données dans une autre feuille excel

Es-tu certain de regarder depuis la première ligne de la seconde feuille ?
Essaye en modifiant le code (voir la fin de mon précédent poste).
J'ai testé sur mon ordinateur et cela fonctionne de base, alors je ne saisis pas mon erreur
 

cedric_hiss

XLDnaute Junior
Re : filtrage et copiage de données dans une autre feuille excel

re
enfin j'ai compris ce qui se passe , enfaite quand je lance le module ca marche parfaitement a chaque fois mais quand je lance de la UI , il prend pas le module en compte du coup je pense que je vais cree une procedure pour appeler le sub du module dans le code du button .
 

thebenoit59

XLDnaute Accro
Re : filtrage et copiage de données dans une autre feuille excel

Bonsoir Cedric.
Une autre proposition, si j'ai bien compris ta demande.
 

Pièces jointes

  • FEBkhWobcDG_cedric-hiss---filtrage-et-copiage-de-données-dans-une-autre-feuille-excel.xlsm
    473.4 KB · Affichages: 42

cedric_hiss

XLDnaute Junior
Re : filtrage et copiage de données dans une autre feuille excel

Bonjour thebenoit59 ,

je te remercie , cette dernière version du code est parfaitement ce que je cherche , merci beaucoup .

Bonne journée .
 

Discussions similaires

Réponses
4
Affichages
433
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…