Parcourir une colonne et copier les cellules non-vide les unes à la suites des autres

moustiik

XLDnaute Nouveau
Bonjour,
je voudrais parcourir les cellules B180 à B215 et quand la cellule n'est pas vide, la copier dans une autre colonne (sur une autre feuille). En gros sa doit donner à peu près se genre de langage si b180<>"" la copier à la première case vide de la feuille "gnagna" sinon passer à la cellule suivante et ainsi de suite!
mais je ne vois pas comment partir :/
(je suis plus automaticienne que développeuse de macro sous excel^^)
si quelqu'un avait un idée de bout de programme à me donné je prend :)
pour mes premiers cas je n'avais que 3 cellules à tester donc pas beaucoup de cas à traiter et j'avais fait sa :

If (Range("g85") <> "") And (Range("g86") = "") And (Range("g87") = "") Then
Range("G85:J85").Select
Selection.Copy
Sheets("liste toto").Select
Range("B1").End(xlDown).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End If

mais là j'ai plus de 1200 cas à faire comme sa donc HEEEELP :)
 

Dugenou

XLDnaute Barbatruc
Re : Parcourir une colonne et copier les cellules non-vide les unes à la suites des a

Bonjour,

c'est faisable par formule (matricielle)

ça t'intéresse ?

Salut grand Chamane : moi c'est plutôt le contraire !! tu donnes des cours ?
 

Pièces jointes

  • demo moustiik.xls
    17.5 KB · Affichages: 186
Dernière édition:

Grand Chaman Excel

XLDnaute Impliqué
Re : Parcourir une colonne et copier les cellules non-vide les unes à la suites des a

Bonjour moustik,

Une petite macro pour faire ça, à adapter à ton cas...

Code:
Sub CopierCellulesNonVides()
Dim rgSource As Range
Dim rgDestination As Range
Dim wsSource As Worksheet
Dim wsDestination As Worksheet
Dim c As Range

Application.ScreenUpdating = False

Set wsSource = ThisWorkbook.Sheets("Source")        'le nom de ta feuille qui contient les données
Set rgSource = wsSource.Range("B180:B215")                    'Ta plage de recherche : B180:B215

Set wsDestination = ThisWorkbook.Sheets("Destination")  'le nom de ta feuille de destination
Set rgDestination = wsDestination.Range("A1")           'la première cellule où tu veux écrire les données
    'Note : ça pourrait aussi être
    'Set rgDestination = wsDestination.Range("A60000").End(xlUp).Offset(1, 0) '  pour aller à la dernière
    'cellule disponible dans une colonne
      
For Each c In rgSource      'boucle sur les cellules sources
    If c.Value <> "" Then
        rgDestination = c
        Set rgDestination = rgDestination.Offset(1, 0)      'on passe à la ligne suivante pour écriture
    End If
Next c

Application.ScreenUpdating = True

End Sub

A+

Edit:
Bonjour Dugenou... (je suis plus du type macro que formule) ;)
 

moustiik

XLDnaute Nouveau
Re : Parcourir une colonne et copier les cellules non-vide les unes à la suites des a

hum... je pense que je vais partir sur les formules ;) un peu plus à ma hauteur niveau compréhension :) sa me fera un tableau intermédiaire (certes supplémentaire) que je copierais par la suite avec ma méthode habituelle :) MERCI, je vais quand même tester ta petite macro cher ami car elle m'a l'air forte intéressante ;)
 

c.clappier

XLDnaute Nouveau
Re : Parcourir une colonne et copier les cellules non-vide les unes à la suites des a

Bonjour,
Je relance cette discussion afin de savoir comment modifier la macro pour qu'elle teste les valeurs d'une colonne (H chez moi) mais qu'elle copie/colle les valeurs d'une autre colonne (la A) dans une autre feuille pour chacune des cellules qui répond à la condition.
En l'occurrence, contenir la mention "Ok" dans les cellules de la colonne H.
Merci
 

DoubleZero

XLDnaute Barbatruc
Re : Parcourir une colonne et copier les cellules non-vide les unes à la suites des a

Re-bonjour,

C'est excatement ce qu'il fallait ! Sauf que quand je remplace "Résultat" par le nom de ma feuille, plus rien ne se passe ... :(

:confused:

Dans ce cas, afin que nul ne perde son temps, merci de bien vouloir déposer le fichier de travail sans donnée confidentielle..

A bientôt :)
 

maynou24

XLDnaute Nouveau
bonjourn je relance la discussion si quelqu'un peut m'aider
j'ai utilisé le code mis
Sub CopierCellulesNonVides()
Dim rgSource As Range
Dim rgDestination As Range
Dim wsSource As Worksheet
Dim wsDestination As Worksheet
Dim c As Range

Application.ScreenUpdating = False

Set wsSource = ThisWorkbook.Sheets("Source") 'le nom de ta feuille qui contient les données
Set rgSource = wsSource.Range("B180:B215") 'Ta plage de recherche : B180:B215

Set wsDestination = ThisWorkbook.Sheets("Destination") 'le nom de ta feuille de destination
Set rgDestination = wsDestination.Range("A1") 'la première cellule où tu veux écrire les données
'Note : ça pourrait aussi être
'Set rgDestination = wsDestination.Range("A60000").End(xlUp).Offset(1, 0) ' pour aller à la dernière
'cellule disponible dans une colonne

For Each c In rgSource 'boucle sur les cellules sources
If c.Value <> "" Then
rgDestination = c
Set rgDestination = rgDestination.Offset(1, 0) 'on passe à la ligne suivante pour écriture
End If
Next c

Application.ScreenUpdating = True

End Sub

mais le problème c'est que quand une cellule passe d'une cellule pleine à une cellule vide il la considère toujours pleine et sa valeur reste dans le cellule copié
 

Discussions similaires

Statistiques des forums

Discussions
312 496
Messages
2 088 976
Membres
103 995
dernier inscrit
Flodk