Macro excel : Copier-Coller cellules non vides uniquement

Elessar_2006

XLDnaute Nouveau
Bonjour à toutes et tous,

voilà j'ai un souci avec Excel, ou plutôt VBA.

J'ai un classeur, appelons Classeur 1.

J'ai un feuille 1, à partir de laquelle je veux copier des données, mais uniquement les cellules non vides, vers une autre feuille, disons feuille2.

La structure est la suivante :

Feuille 1 :

Je cherche à copier les cellules non vides, sur la plage suivante : A5-A500.

Je veux qu'Excel copie les valeurs à la suite, donc sans cellules vides, sur la feuille 2, à partir de la cellule A5.

Ensuite, je dois faire la même chose, mais avec la colonne C de la feuill1, vers la colonne B de la feuill2, même longueur de plage.

Et enfin, même opération, mais sur la plage D5-P300 de la feuill1 vers la plage C5-O300 de la feuill2.

A ceci près que pour la dernière opération, il faudrait qu'Excel les copie, si et seulement si la cellule de la colonne A, sur la même ligne, n'est pas vide.

POur donner un exemple :

Feuill1
Colonne A Colonne C Colonne D-P
Ref1 description Ref1 Quantités par mois de la ref1
Vide Vide Vide
Ref2 description Ref2 Quantités par mois de la ref2
etc

Je veux donc copier ces valeurs sur la feuill2, comme spécifié plus haut, sans les lignes vides.

Admettons que la cellule A10 est vide sur la feuill1, je veux qu'excel oublie cette ligne et passe à la suivante pour la copie. Ainsi de suite jusqu'à la ligne 300, qui est la limite de ma plage.

Y aurait-il svp une âme charitable qui pourrait me donner un code VBA pouvant faire çà?

Merci d'avance.

Bonne soirée
 

job75

XLDnaute Barbatruc
Re : Macro excel : Copier-Coller cellules non vides uniquement

Bonjour Elessar_2006, bienvenue sur XLD,

Joignez un fichier (allégé et/ou zippé <48 k0, format Excel 2003 pour moi) avec le résultat souhaité et les explications.

Autrement, votre post est difficile à suivre.

A+
 

david84

XLDnaute Barbatruc
Re : Macro excel : Copier-Coller cellules non vides uniquement

Bonsoir,
sans fichier, difficile de t'aider...
un exemple basique pouvant peut-être t'aider (données comportant les cellules vides en colonne A avec recopie sans ces cellules vides en colonne B) :
Sub EffacerCelluleVide()
[A:A].Copy [B:B]
For i = [B65000].End(xlUp).Row To 1 Step -1
If Cells(i, 2) = "" Then Cells(i, 2).Delete Shift:=xlUp
Next i
End Sub
A+

Edit : bonsoir Job
 

jp14

XLDnaute Barbatruc
Re : Macro excel : Copier-Coller cellules non vides uniquement

Bonsoir

Ci dessous une procédure avec un "call" à une macro paramètrable
Code:
Option Explicit

Private Sub copiecellule(nomfeuilleorg As String, colonneorg As String, nomfeuilledest As String, colonnedest As String)
Dim Dl1 As Long ' dernière ligne
Dim cell As Range
With Worksheets(nomfeuilleorg)
For Each cell In .Range(colonneorg & "5:" & colonneorg & 300)
    If cell <> "" Then
        Dl1 = Worksheets(nomfeuilledest).Range(colonnedest & "65536").End(xlUp).Row
        If Dl1 < 4 Then Dl1 = 5
        Worksheets(nomfeuilledest).Range(colonnedest & Dl1 + 1) = cell
    End If
Next cell
End With
End Sub

Sub copie()
copiecellule "Feuil1", "a", "Feuil2", "a"
copiecellule "Feuil1", "c", "Feuil2", "b"
...............................................
End Sub

A compléter en indiquant l'origine (org) et la destination (dest)

A tester

JP
 

Staple1600

XLDnaute Barbatruc
Re : Macro excel : Copier-Coller cellules non vides uniquement

Bonsoir à tous

Elessar_2006
En utilisant l'enregistreur de macros , tu pouvais répondre toi-même à ta question... :rolleyes:

Voici pour la 1ère étape ce que cela donne
Code:
Sub Macro1() 'code spécifique à  Excel 2010
With Feuil1
    .Sort.SortFields.Clear
    .Sort.SortFields.Add Key:=Range("A5:A500"), _
        SortOn:=xlSortOnValues, _
        Order:=xlAscending, _
        DataOption:=xlSortNormal
    With .Sort
        .SetRange Range("A5:A500")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    .Range([A1], [A65536].End(xlUp)).SpecialCells(xlCellTypeConstants, 23).Copy _
Sheets("Feuil2").[A1]
End With
End Sub
 
Dernière édition:

Elessar_2006

XLDnaute Nouveau
Re : Macro excel : Copier-Coller cellules non vides uniquement

Bonjour,

merci pour vos réponses.

Je joint en pj un exemple de ce que je recherche.

En feuill1, c'est les données telles qu'elles sont à l'origine.

En feuille2, c'est ce que je cherche à faire en copiant de la feuill1 vers la feuill2.

Merci pour les codes.

Je vais essayer çà de suite.
 

Pièces jointes

  • Modèle.xls
    30.5 KB · Affichages: 372
  • Modèle.xls
    30.5 KB · Affichages: 360
  • Modèle.xls
    30.5 KB · Affichages: 385

job75

XLDnaute Barbatruc
Re : Macro excel : Copier-Coller cellules non vides uniquement

Bonjour Elessar_2006, David, Jean-Marie, [Edit] et jp14 que j'avais oublié,

Ma foi cela a l'air trop simple, quelque chose nous échappe peut-être.

La macro pour transférer les données :

Code:
Sub Transférer()
Dim plage As Range
On Error Resume Next 'au cas où la colonne A est vide
Set plage = Columns("A").SpecialCells(xlCellTypeConstants).EntireRow
With Sheets("Sheet2")
  Cells.Copy .Cells 'pour copier les dimensions des colonnes
  .Cells.Clear
  plage.Copy .Rows(5)
  .Columns("B").Delete
  .Activate 'facultatif
End With
End Sub

Fichier joint.

A+
 

Pièces jointes

  • Modele(1).xls
    41 KB · Affichages: 549
  • Modele(1).xls
    41 KB · Affichages: 561
  • Modele(1).xls
    41 KB · Affichages: 585
Dernière édition:

ROGER2327

XLDnaute Barbatruc
Re : Macro excel : Copier-Coller cellules non vides uniquement

Bonjour à tous
Un autre essai :
Code:
Private Sub Bouton_de_commande_01_Click()
  With Application: .ScreenUpdating = 0: .Calculation = -4135: End With
  Sheets("Sheet2").Cells.Clear
  With Selection
    With Range("A1"): .Resize(Cells(Rows.Count, .Column).End(xlUp).Row, 1).Select: End With
    Selection.AutoFilter
    Selection.AutoFilter Field:=1, Criteria1:="<>"
    Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Copy Destination:=Sheets("Sheet2").Range("A1")
    Selection.AutoFilter Field:=1
    Selection.AutoFilter
    .Cells.Select
  End With
  With Application: .Calculation = -4105: .ScreenUpdating = 1: End With
End Sub
ROGER2327
#4734


Samedi 14 Sable 138 (Don Quichotte, champion du monde, SQ)
24 Frimaire An CCXIX
2010-W50-2T10:44:03Z
 

Pièces jointes

  • Copie de Modèle.xls
    29 KB · Affichages: 477
  • Copie de Modèle.xls
    29 KB · Affichages: 471
  • Copie de Modèle.xls
    29 KB · Affichages: 536

jp14

XLDnaute Barbatruc
Re : Macro excel : Copier-Coller cellules non vides uniquement

Bonjour à tous

Ci dessous le code à tester
Code:
Option Explicit
Sub copie()
Dim i As Long
copiecellule "Sheet1", "a", "Sheet3", "a", False
copiecellule "Sheet1", "c", "Sheet3", "b", False
For i = 4 To 16 ' a modifier en fonction des colonnes
    copiecellule "Sheet1", Chr(64 + i), "Sheet3", Chr(64 + i - 1), True
Next i
End Sub
Private Sub copiecellule(nomfeuilleorg As String, colonneorg As String, nomfeuilledest As String, colonnedest As String, Select1 As Boolean)
Dim Dl1 As Long ' dernière ligne
Dim cell As Range
With Worksheets(nomfeuilleorg)
For Each cell In .Range(colonneorg & "5:" & colonneorg & 300)
    If (cell <> "" And Select1 = False) Or (.Range("A" & cell.Row) <> "" And Select1 = True) Then
        Dl1 = Worksheets(nomfeuilledest).Range(colonnedest & "65536").End(xlUp).Row
        If Dl1 < 4 Then Dl1 = 5 
        Worksheets(nomfeuilledest).Range(colonnedest & Dl1 + 1) = cell
    End If
Next cell
End With
End Sub
Bonne journée

JP
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 870
dernier inscrit
Armisa