XL 2010 traitement des données

hsf

XLDnaute Nouveau
Bonjour à tous,

J'ai besoin de votre aide concernant le traitement d'un fichier Excel à l'aide du code VBA.

Mon classeur Excel comporte 4 feuilles : "Source", "traitement", "BD" et "output".

je veux que ma macro exécute ceci :

- Sur le feuille "source", la macro compare les cellules de la colonne 3 (Prénom) c'est à dire : si le prénom de la première cellule est égale au prénom de la cellule suivante:
- La macro séléctionne tout le tableau contenant les prénoms répétés et copie colle le tableau sur la feuille "traitement" sur la troisième ligne.
- Après la macro cherche ce prénom sur la feuille BD et filtre sur le sexe = "femme" et trie sur le salaire du plus petit au plus grand et récupère que le plus petit salaire
- Donc, il sélectionne cette ligne et copie colle sur la feuille "traitement" sur la deuxième ligne.
- après, sur la feuille "traitement, sélectionne tout le tableau et le copie colle sur la feuille "output".

une fois ces actions sont terminés, la macro revient à la feuille "source" et continue le test sur tout le tableau et si cette fois-ci les deux prénoms ne sont pas identiques, il récupère juste cette ligne et applique les mêmes actions que précédemment et ainsi de suite.

Merci pour votre aide.

Voilà mon fichier excel ci-joint
 

Pièces jointes

  • classeur.xls
    38 KB · Affichages: 6

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour et bienvenue sur xld,

Je crois qu'il existe un malentendu. Xld n'est pas une société de services où l'on peut commander des macros. Un minimum de travail est demandé aux demandeur afin qu'ils participe à l'élaboration de leur(s) solution(s).

Si vous n'y connaissez rien en macro, profitez du confinement pour suivre un tutoriel, puis revenez avec vos difficultés particulières dans votre apprentissage et on vous aidera.

P.S. vous avez excel 2010 enregistrez vos classeur au format .xlsx le format .xls est dépassé depuis 2007.

cordialement
 

hsf

XLDnaute Nouveau
Bonjour et bienvenue sur xld,

Je crois qu'il existe un malentendu. Xld n'est pas une société de services où l'on peut commander des macros. Un minimum de travail est demandé aux demandeur afin qu'ils participe à l'élaboration de leur(s) solution(s).

Si vous n'y connaissez rien en macro, profitez du confinement pour suivre un tutoriel, puis revenez avec vos difficultés particulières dans votre apprentissage et on vous aidera.

P.S. vous avez excel 2010 enregistrez vos classeur au format .xlsx le format .xls est dépassé depuis 2007.

cordialement

j'ai essayé d'écrire un code mais je me bloque toujours dans la condition d'arrêt.

voilà mon code

Sub test()

Dim i As Integer

For i = 2 To 20 Step 1

If Cells(i, 3).Value = Cells(i + 1, 3).Value Then
Sheets("Source").Activate
Range("A2" & ":J" & i).Select
Application.CutCopyMode = False
Selection.Copy
Sheets("traitement").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End If
Next i

End Sub
 

Pièces jointes

  • classeur.xlsm
    28.3 KB · Affichages: 3

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Votre macro corrigée et commentée dans le fichier joint.
VB:
Sub test()
    Dim Calc As XlCalculation
    Dim Source As Range, Destination As Range, c As Range
    '
    ' Préparer l'application pour plus de rapidité
    With Application
        Calc = .Calculation                 ' Mode actuel de calcul
        .Calculation = xlCalculationManual  ' Mise en mode manuel
        .ScreenUpdating = False             ' Figer l'écran
    End With
    '
    ' Définir la source
    With Sheets("Source").Range("A1").CurrentRegion
        Set Source = .Offset(1).Resize(.Rows.Count -1)
    End With
    '
    ' Parcourir les cellules de la colonne 3 de la source
    For Each c In Source.Columns(3).Cells
        '
        ' Comparer le texte avec la cellule du dessous
        If c.Text = c.Offset(1, 0).Text Then
            '
            ' Copier la ligne du tableau
            Intersect(c.EntireRow, Source).Copy
            With Sheets("Traitement")
                '
                ' Coller les valeurs dans la destination
                .Range("A" & Rows.Count).End(xlUp)(2).PasteSpecial xlPasteValues
            End With
        End If
    Next c
    '
    ' Rétablir l'application
    With Application
        .CutCopyMode = False    ' Vidage du presse papier
        .ScreenUpdating = True  ' Réveiller l'écran
        .Calculation = Calc     ' Retour au mode de calcul d'origine
    End With

End Sub

Cordialement
 

Pièces jointes

  • classeur.xlsm
    30.4 KB · Affichages: 2
Dernière édition:

hsf

XLDnaute Nouveau
Bonjour,

j'ai testé ce code mais il me donne ce résultat :

sur le feuille "traitement":

1586869692448.png


alors que ma source contient ça:

1586869786625.png


merci pour votre aide.
 

hsf

XLDnaute Nouveau
Re,

En fait ce que vous voulez c'est un filtre avancé sur le Prénom Non ?
Extraire par exemple toutes les lignes dont le Prénom est Estelle ?
Votre souhait n'est pas très clair !

cordialement

je veux parcourir tout le tableau en filtrant sur le prénom:
une fois je clique sur le bouton, la macro fait un filtre sur le prenom commencant par estelle dans ce cas là après elle copie colle ces lignes sur la destination à partir de la 3ème ligne, une fois terminé, elle efface ce contenu dans la destination et continue le parcours du tableau sur la source, par exemple elle trouve le prénom "marion", elle copie colle juste cette ligne sur la destination et ainsi de suite jusqu'à qu'elle termine tout le tableau.

j'espère que mon souhait est clair cette fois-ci


merci
 

hsf

XLDnaute Nouveau
Re,

E

Toujours pas pour moi. Peut-être que quelqu'un de plus intelligent passera par là.
En fait votre macro telle qu'expliquée, va faire une copie de la source, qu'il suffira de trier sur le prénom.

Cordialement

je m'excuse si j'ai mal exprimé.
En fait, d'après l'analyse de mon besoin je veux appliquer un filtre avancé par prénom et l'extraction se fait automatique sur la feuille de destination.

sauf que je veux pas a chaque fois je choisis le prenom je veux que ca soit automatique, la macro fait le parcours de tous les prénoms dans la zone de critère jusqu'à qu'elle termine.

comme ceci:

1-dans un premier temps, sur la feuille "traitement" : extraction depuis la source

1586873786920.png


2- appliquer un filtre avancé sur le prénom aussi sur la feuille "BD" avec deux autres critères sexe ="femme" et le salaire est trié du plus petit au plus grand.
après extraire cette ligne contenant le prénom = estelle avec sexe= femme et le plus petit salaire dans la feuille"extractionbd".
comme suit:

1586874477704.png


dans ce cas là, il y a une seule ligne.

3- remplir la ligne 2 sur la feuille 'traitement" par les données extraites sur la feuille "extractionbd".
comme suit:

1586874955082.png


4- une fois c'est terminé avec le prénom "estelle", efface le contenu de la feuille "traitement"
5- maintenant, passe au deuxième prénom dans la liste des prénoms et applique les mêmes étapes (1,2,3,4). et ainsi de suite.

merci beaucoup pour votre aide,

merci de trouver ci-joint le fichier

Bien cordialement
 

Pièces jointes

  • classeur2.xlsm
    34.1 KB · Affichages: 1

David Aubert

XLDnaute Barbatruc
Administrateur
Modérateur
Bonjour Roblochon,
Désolé je viens de voir que je n'ai pas salué l'ensemble du fil :(
Pas de soucis pour la confidentialité, j'attends la réponse mais je pense que je connais la réponse :)
J'espère que tu vas bien.
Bonne fin d'après-midi à toi
David
 

hsf

XLDnaute Nouveau
Bo
Bonjour Roblochon,
Désolé je viens de voir que je n'ai pas salué l'ensemble du fil :(
Pas de soucis pour la confidentialité, j'attends la réponse mais je pense que je connais la réponse :)
J'espère que tu vas bien.
Bonne fin d'après-midi à toi
David
Bonjour tout le monde,
pour la confidentialité, ces données sont fausses.
Merci pour votre collaboration.

Bien cordialement
 

Discussions similaires

Statistiques des forums

Discussions
312 488
Messages
2 088 841
Membres
103 972
dernier inscrit
steeter