VBA Excel 2007

Résolu
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. 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
    1. Contributeur
      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