Copier les lignes avec valeurs sans les lignes vides

VDB.57 -  
 VDB.57 -
Bonjour à tous,

Encore une fois je me tourne vers vous.

Mon objectif est de recueillir l'ensemble des valeurs contenues sur la plage « AA2:AH36 » de ma feuill1 et d'insérer à la suite les lignes non vides en « A2 »de ma feuill2.

La difficulté réside dans le fait que ma plage « AA2:AH36 » contient des cellules vides avec des formules qui sont copiées également, ce que je ne souhaite pas...

J'ai beau chercher je ne parviens pas à modifier ma macro me permettant de réaliser cette opération...

Je joins ma macro incomplète.
Merci par avance.
Sub Bouton5_Clic()

Sheets("feuil1").Select
Sheets("feuil2").Visible = True

Dim Ligne As String
Ligne = Range("AA2:AH" & Range("AA65536").End(xlUp).Row).Address
Range(Ligne).Select
Application.CutCopyMode = False
Selection.Copy
Sheets("feuil2").Select
Dim i As Long
i = Sheets("feuil2").Range("A65536").End(xlUp).Row
Sheets("feuil2").Range("A" & i + 1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Transpose:=False
Range("A1").Select

End Sub

5 réponses

  1. thev Messages postés 2005 Date d'inscription   Statut Membre Dernière intervention   721
     
    Bonjour,

    ci-dessous code à essayer

    Sub Bouton5_Clic()

    Dim plage_à_copier, première_cellule_vide, plage_collée As Range

    'copie feuille de AA2 à la dernière cellule utilisée de la colonne AH
    With Sheets("feuil1")
    Set plage_à_copier = Range(.[AA2], .[AH:AH].Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious))
    End With
    plage_à_copier.Copy

    'collage sur feuille 2 à partir de la première cellule vide
    With Sheets("feuil2")
    Set première_cellule_vide = .[A:A].Find("", SearchOrder:=xlByRows, SearchDirection:=xlNext)
    End With
    première_cellule_vide.PasteSpecial Paste:=xlPasteValues, Transpose:=False

    'suppression cellules vides
    Set plage_collée = première_cellule_vide.Resize(plage_à_copier.Rows.Count, plage_à_copier.Columns.Count)
    plage_collée.SpecialCells(xlCellTypeBlanks).Delete (xlShiftToLeft)
    plage_collée.SpecialCells(xlCellTypeBlanks).Delete (xlShiftUp)

    End Sub

    --
     
    0
  2. VDB.57
     
    Bonsoir thev,

    Avant tout merci pour ta réponse.

    Lorsque le code arrive à la 1° ligne "plage_collée" j'ai l'erreur 1004 "pas de cellules correspondantes".

    J'ai supprimé ces 2 dernières lignes "plage_collée" et tout fonctionne bien.

    Par contre j'ai essayé de mettre "Range("A1").Select" pour terminer proprement le code. IMPOSSIBLE de sélectionner cette cellule !!!
    0
  3. VDB.57
     
    Bonjour,

    J'ai omis de vous dire qu'en plus de sélectionner A1 en fin de code , je voudrai copier le même résultat en feuil3 sachant que les feuils 2 et 3 sont protégées (sans mot de passe).

    J'abuse de votre savoir et de votre implication.

    Merci
    0
  4. thev Messages postés 2005 Date d'inscription   Statut Membre Dernière intervention   721
     
    Bonjour,

    Effectivement, les lignes plages collées ne fonctionnent que s'il y a des cellules vides. Je les ai donc encadrées par une gestion de routine d'erreur.

    Le "Range("A1").Select" ou en notation abrégée "[A1].Select" ne peut fonctionner que sur une feuille active.

    ci-dessous nouveau code

    Sub Bouton5_Clic()

    Dim plage_à_copier, première_cellule_vide, plage_collée As Range

    'défintion plage de copie feuille de AA2 à la dernière cellule utilisée de la colonne AH
    With Sheets("feuil1")
    Set plage_à_copier = Range(.[AA2], .[AH:AH].Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious))
    End With

    'collage sur feuille 2 à partir de la première cellule vide
    plage_à_copier.Copy
    With Sheets("feuil2")
    Set première_cellule_vide = .[A:A].Find("", SearchOrder:=xlByRows, SearchDirection:=xlNext)
    If première_cellule_vide Is Nothing Then Set première_cellule_vide = .[A1]
    End With
    première_cellule_vide.PasteSpecial Paste:=xlPasteValues, Transpose:=False

    'suppression cellules vides feuille2
    Set plage_collée = première_cellule_vide.Resize(plage_à_copier.Rows.Count, plage_à_copier.Columns.Count)
    On Error Resume Next 'active la gestion d'erreurs
    plage_collée.SpecialCells(xlCellTypeBlanks).Delete (xlShiftToLeft)
    plage_collée.SpecialCells(xlCellTypeBlanks).Delete (xlShiftUp)
    On Error GoTo 0 'désactive la gestion d'erreurs

    'collage sur feuille 3 à partir de la première cellule vide
    plage_à_copier.Copy
    With Sheets("feuil3")
    Set première_cellule_vide = .[A:A].Find("", SearchOrder:=xlByRows, SearchDirection:=xlNext)
    If première_cellule_vide Is Nothing Then Set première_cellule_vide = .[A1]
    End With
    première_cellule_vide.PasteSpecial Paste:=xlPasteValues, Transpose:=False

    'suppression cellules vides feuille3
    Set plage_collée = première_cellule_vide.Resize(plage_à_copier.Rows.Count, plage_à_copier.Columns.Count)
    On Error Resume Next 'active la gestion d'erreurs
    plage_collée.SpecialCells(xlCellTypeBlanks).Delete (xlShiftToLeft)
    plage_collée.SpecialCells(xlCellTypeBlanks).Delete (xlShiftUp)
    On Error GoTo 0 'désactive la gestion d'erreurs

    'retour sur feuille 1
    With Sheets("feuil1")
    .Activate
    .[A1].Select
    End With

    End Sub

    --
     
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. VDB.57
     
    TEHV,

    Mille fois merci pour ton efficacité, tout fonctionne à merveille.

    Bon weekend
    0