VBA Excel 2007

Résolu
ella12_12 Messages postés 99 Statut Membre -  
ella12_12 Messages postés 99 Statut Membre -
Bonjour à tous,

N'étant pas très douée en VBA, je voudrais savoir si il est possible :
1. de faire un couper/ coller des valeurs uniquement
2 de faire en sorte qu'un filtre soit appliqué automatiquement

Je m'explique :

J'ai un fichier contenant 2 feuilles:
Nom de la 1ère feuille = "Issue_List"
Nom de la 2ème feuille = "Issue_list_Closed"

Je voudrais (feuille "Issue_List") que quand dans la colonne "J" il y a "close" alors il coupe et colle ces données dans la feuille "Issue_list_Closed" (cela fonctionne avec la macro ci-dessous) mais uniquement les valeurs (ca ca ne fonctionne pas avec la mocro actuelle). En effet, dans la feuille 1 il y a des Formats conditionnels et j'ai appliqué dans certaines cellules des validations que je ne veux pas retrouver dans la feuille 2

Ensuite j'aimerai qu'il filtre ou qu'il cache automatiquement les lignes qui sont vides dans la feuille 1. (cela ne fonctionne pas dans la macro actuelle)

J'ai déjà une partie du code:

Sub Retire_Close()
Dim i As Integer 
Sheets("Issue_List").Select 
For i = 6 To Range("A1048576").End(xlUp).Row
    If Cells(i, 10) = "Close" Then
        Range(Cells(i, 1), Cells(i, 16)).Cut
        Sheets("Issue_List closed").Select
        Range("A1048576").End(xlUp).Offset(1).Activate
        ActiveSheet.Paste
        Sheets("Issue_List").Select
    End If
Next i


End Sub


J'espère que tout ceci est clair (sourire)

D'avance je vous remercie pour les bons soins que vous porterez à cette demande

Bien à vous
E

3 réponses

  1. ella12_12 Messages postés 99 Statut Membre 31
     
    a
    0
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour,

    En VBA, évite les select-selection et les copy ou cut -paste très lents et "mangeurs de mémoire" :-)

    proposition
    Sub Retire_Close()   
    Dim Nbre As Integer, Cptr As Integer   
    Dim Lig1 As Integer, Lig2 As Integer   
    Dim ligne  
    
    'fige le défilement de l'écran   
    Application.ScreenUpdating = False   
    
     With Sheets("Issue_List")   
        'compte le nombre de "close" dans colonne 10   
        Nbre = Application.CountIf(.Columns(10), "Close")   
        ' vérification de présence   
        If Nbre = 0 Then: GoTo vide   
           
            Lig1 = 5   
            'on ne boucle que sur les lignes avec "close"   
            For Cptr = 1 To Nbre   
                Lig1 = .Columns(10).Find("close", .Cells(Lig1, 10), xlValues).Row   
                 With .Range(.Cells(Lig1, 1), .Cells(Lig1, 16))   
                    'mémorise et nettoie la ligne avec "close"   
                    ligne = .Value   
                    .Clear   
                End With   
                With Sheets("Issue_List closed")   
                    'restitue la ligne avec c"lose"   
                    Lig2 = .Range("A1048576").End(xlUp).Offset(1).Row   
                    .Range(.Cells(Lig2, 1), .Cells(Lig2, 16)) = ligne   
                End With   
        Next   
    'cache les lignes contenant auparavant "close"   
     .Range("J6:J" & Lig1).SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True   
    End With   
    
    Exit Sub   
    vide:   
    MsgBox " aucune valeur ""close"", vbcritical"   
    End Sub   
    


    En espèrant que
    Michel
    0
  3. ella12_12 Messages postés 99 Statut Membre 31
     
    Bonjour Michel,

    Un tout grand merci.
    Cela fonctionne pas mal, mais il y a deux points de détails :

    Feuille issue_list

    1. Colonne "j" et "P" : lorsque je j'insère une nouvelle ligne, ces lignes n'ont plus la validation
    2. Colonne "L" : lorsque j'insère une nouvelle ligne, il n'y a plus la formule

    Feuille issue_list_closed
    1. Colonne "j" et "P" : La validation reste
    2. Les formats conditionnels restent aussi
    J'aimerai ne plus les avoir dans la feuille issue liste

    j'ai essayé en changeant une partie du code.

    With .Range(.Cells(Lig1, 1), .Cells(Lig1, 16))
    'mémorise et nettoie la ligne avec "close"
    ligne = .Value
    EntireRow.Hidden = True

    '.Clear
    End With
    With Sheets("Issue_List closed")
    'restitue la ligne avec c"lose"
    Lig2 = .Range("A1048576").End(xlUp).Offset(1).Row
    .Range(.Cells(Lig2, 1), .Cells(Lig2, 16)) = ligne
    End With
    Next
    'cache les lignes contenant auparavant "close"
    '.Range("J6:J" & Lig1).SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
    End With

    Un tout grand merci d'avance

    Bien à vous
    E
    0