Copier les lignes avec valeurs sans les lignes vides

Fermé
VDB.57 - 24 juin 2016 à 11:46
 VDB.57 - 25 juin 2016 à 15:24
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

thev Messages postés 1883 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 6 novembre 2024 691
24 juin 2016 à 18:27
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
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
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
thev Messages postés 1883 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 6 novembre 2024 691
25 juin 2016 à 13:00
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
TEHV,

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

Bon weekend
0