Copie conditionnelle et mise en forme conditionnelle

[Résolu]
Signaler
Messages postés
3
Date d'inscription
mercredi 13 octobre 2010
Statut
Membre
Dernière intervention
19 octobre 2010
-
Messages postés
3
Date d'inscription
mercredi 13 octobre 2010
Statut
Membre
Dernière intervention
19 octobre 2010
-
Bonjour à tous,

voilà, j'ai plusieurs questions, en fait très nombreuses...

Ma connaissance de VBA est assez restreinte, et je l'avoue TRES rouillée.
Donc j'aimerai vos lumières.

J'ai un tableau excel dont j'aimerai faire un tri par critère des colonnes K et L ( Ces même critères étant en liste de validation dans ces colonnes et donc listé dans une feuille nommée "critères"

Le but est de trier par critère est de faire une copie des lignes pour les coller dans la feuille du critère associé...

Je sais pas si je suis claire...

Donc voilà le code à son début:

Sub Filtre()

Dim Lig As Long
Dim Col As String
Dim NbrLig As Long
Dim NumLig As Long

Sheets("Feuil1").Activate ' feuille de destination

Col = "K" ' colonne de la donnée non vide à tester
NumLig = 0
With Sheets("Liste des documents") ' feuille source
NbrLig = .Cells(65536, Col).End(xlUp).Row
For Lig = 1 To NbrLig
If .Cells(Lig, Col).Value = "HSEQ" Then
.Cells(Lig, Col).EntireRow.Copy
NumLig = NumLig + 1
Cells(NumLig, 1).Select
ActiveSheet.Paste 'Copie des données, de la mise en forme et largeur colonne
Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
End If
Next
End With
End Sub

Maintenant se pose le problème que la macro me tri mes lignes par citères...si ces critères sont amenés à changer ça sera plus simple que de modifier la macro....


petite question supplémentaire...est il possible que la macro fonctionne seule? comme la mise en forme conditionnelle lorsqu'on écrit qui met la couleur seule?

en tous les cas merci à ceux qui prendront le temps de me répondre.
Bonne soirée
Zari

4 réponses

Messages postés
33721
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 octobre 2021
353
Bonjour,

Pour ce qui est de :
est il possible que la macro fonctionne seule?

La réponse est oui.

Tu pourrais utiliser par exemple la gestion des évènements dans ta feuille.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
' Detecte qu'on "bouge" dans une feuille.
' A chanque changement de cellule dans la feuille.. le code s'active.
'--------------------------------------------------------------------
' Target contient les coordonnées de la cellule nouvellement selectionée.
' Tu peux ainsi limiter le déclenchement que si l'utilisateur "navigue" dans
' telle ou telle colonne exemple :

'si la colonne est la "B" alors je quitte le sub.
If Target.Column = 2 Then Exit Sub

'Ensuite tu peux lancer ton code de tri/filtre directement d'ici.
' Par exemple :
Call Macro1


End Sub



Pour ce qui est de ta gestion de tes critères... en ce qui me concerne je serais plus passé par un filtre auto pour chaque critère .. et ensuite tu recopies toutes les lignes trouvées par ce filtre dans la feuille de ton choix.
Cela évite de devoir parcourir par une boucle tout le tableau (ce qui peu prendre du temps s'il y a beaucoup de lignes.)



Cordialement,
Jordane,
______________________________________________________
Règles du forum à lire avant de poster une question : ICI
Messages postés
3
Date d'inscription
mercredi 13 octobre 2010
Statut
Membre
Dernière intervention
19 octobre 2010

Ah ben justement j'avais un soucis...
Merci beaucoup, j'avais bien trouvé comment faire tourner ma macro seule, mais en fait dés que je clic ou que je tape une lettre dans la feuille concernée, la macro se déclenche, donc impossible d'écire....

Donc avec le ti bout de code que tu as ajouté, je peux lui demander de fairre tourner la macro que si la colonne ou l'on rensigne le critère est modifié? c'est ça? j'ai bien compris?

Je vais voir comment faire, car le soucis, c'est que je gère pas se fichier, et que papy qui lui le gère, si c'est pas tout automatisé, il va jamais s'en sortir..déjà que c'est l'enfer de le remettre à jour today....

merci pour ta réponse

D'autres idées???
Messages postés
33721
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 octobre 2021
353
Bonjour,

avec le ti bout de code que tu as ajouté, je peux lui demander de fairre tourner la macro que si la colonne ou l'on rensigne le critère est modifié? c'est ça? j'ai bien compris?


Oui c'est bien ça.

Au passage, je viens de penser que tu devrais plutot utiliser :

Private Sub Worksheet_Change(ByVal Target As Range)


Comme ça, s'il ne fait "QUE" naviguer dans la feuille.. il ne se passe rien. Le code ne se lancera que lorsqu'il sera entré en mode édition d'une cellule ( en gros.. quand il modifie la valeur de celle-ci ou y fait un double-clic puis en sort).

Pour ce qui est de "autres idées" .. j'ai pensé que tu pourrais appliquer un filtre sur chaque élément de la liste (sans connaitre le nombre et l'intitulé de chaque) en utilisant le code :

Dim Cell As Range
    Dim Unique As New Collection
    Dim Valeur As Range
    Dim i As Integer
    Dim Col As String
        Col = "A" 'colonne à Filtrer
    'Récupère la derniere ligne non vide dans la colonne A FILTRER
    i = Range(Col & "65536").End(xlUp).Row
    
    On Error Resume Next
    'boucle sur les cellules de la colonne A filtrer
    For Each Cell In Range(Col & "1:" & Col & i)
    If Not Cell.EntireRow.Hidden Then Unique.Add Cell, CStr(Cell)
        'Stocke les données dans une collection
        '(La collection n'accepte que des données uniques et permet donc
        ' de filtrer facilement les doublons).
        'Unique.Add Cell, CStr(Cell)
    Next Cell
    On Error GoTo 0
    
    
    'Boucle sur le contenu de la collection pour faire le filtre par exemple
    For Each Valeur In Unique
        
       'Ici tu places ton code pour filtrer ...
       ' Pour chaque Valeur dans Unique..
        
    Next Valeur



En gros, si ton nombre de critères et leur intitulé t'es inconnu à l'avance, le code ci-dessus, permet de lister tes différents critères ( ceux présents dans la liste déroulante du filtre automatique) et donc ensuite de pouvoir effectuer le filtre sur chacun d'eux.
=> en fait, il parcours ta plage de cellule (de la colonne à filtrer) et récupère chaque intitulé (sans doublons).

Pour info, j'ai pris ce code ici : LISTE-BOX-CHOIX-AUTOFILTER

Cordialement,


Jordane,
______________________________________________________
Règles du forum à lire avant de poster une question : ICI
Messages postés
3
Date d'inscription
mercredi 13 octobre 2010
Statut
Membre
Dernière intervention
19 octobre 2010

Rolala,
je me suis perdue complet tout cet aprem dans les codes VBA et à réviser mes bases...ben je suis super rouillée!!

Je regarderai ça demain :D j'avais pas vu la réponse...

Petite question, comment je fait pour avoir une variable i qui prend le numéro d'une ligne?
Je voudrais faire un copier coller conditionnel de 4 cellules de la feuille Y et les copier dans la feuille X si la cellule Xi de la ligne i est remplie...

j'ai fait ça, et je suis perdue...je sais pas comment définir ma valeur i:

Dim i As String

i = 720

Range("B,F,G,H" & i).Select
Range("H" & i).Activate
Selection.Copy
Sheets("AFFAIRES").Select
Range("C170").Select
ActiveSheet.Paste

Le but apres ça sera d'insérer une ligne dans la feuille X en ligne 3 ou 4, et de copier à partir de la colonne C...

Mais bon ça je pense y arriver...

Si quelqu'un peut me décoincer cette histoire de "i"!!!ça fait 3h qu eje suis dessus... :(:(

merki :)