Copier les lignes avec valeurs sans les lignes vides
VDB.57
-
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
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
-
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
--
-
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 !!! -
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 -
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
--
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -