VBA extraire une colonne sans vides vers une autre feuille

Bonjour,

Je viens demander un peu d'aide, car j'essaye d'adapter une macro que j'ai trouver pour mes besoins,

mais je ne comprend pas très bien la commande.

Ce que je souhaite, c'est extraire dans la "Feuil1" les noms de postes, pour les coller sans les vides dans la "Feuil2".

Voici le fichier en question.

Je vous remercie d'avance pour votre aide.

43planning.xlsm (24.28 Ko)

Bonjour Pierre, bonjour le forum,

Tu ne précises pas tu veux coller ? Le code ci-dessous à adapter :

Sub Macro1()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Integer 'déclare la variable I (Incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)

Set OS = Worksheets("Feuil1") 'définit l'onglet OS
Set OD = Worksheets("Feuil2") 'définit l'onglet OD
DL = OS.Cells(Application.Rows.Count, "C").End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne C de l'onglet OS
TV = OS.Range("C1:C" & DL) 'définit le tableau des valeurs TV
K = 1 'initialise la variable K
For I = 11 To DL 'boucle sur toutes les lignes I de TV (en partant de la onzième)
    'si la donnée ligne I colonne 1 de TV n'est pas vide, redimensionne le tableau des lignes TL, récupère la données dans le tableau TL, incrémente K
    If TV(I, 1) <> "" Then ReDim Preserve TL(K): TL(K) = TV(I, 1): K = K + 1
Next I 'prochaine ligne de la boucle
If K > 1 Then 'condition : si K est supérieure à 1
    Set DEST = OD.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0) 'définit la cellule de destination DEST (tu n'as pas précisé ?!...)
    DEST.Resize(UBound(TL), 1) = Application.Transpose(TL) 'renvoie dans DEST redimensionnée le tableau TL transposé
End If 'fin de la condition
End Sub

Effectivement, la cellule d'arrivée sur la "Feuil2" est celle en dessous de la cellule poste (A7).

Bonjour pierre.malouin, Bonjour ThauThème

Deux propositions, en partant du principe que l'exemple est significatif du réel:

Par Macro:

Sub extraction_3()
 Dim Rng As Range
 Set Rng = Sheets("Feuil1").Columns("C:C").SpecialCells(xlCellTypeConstants)
 Rng.Copy Sheets("Feuil2").Cells(8, 1) 'a adapter
End Sub

Par formule matricielle (a valider par CTRL + Maj + Entrée)

=SIERREUR(INDEX(Feuil1!$C$11:$C$167;PETITE.VALEUR(SI(Feuil1!$C$11:$C$167<>"";LIGNE(Feuil1!$C$11:$C$167)-10);LIGNES($1:1)));"")

Cordialement

Je ne peux pas envoyer le vrai fichier dans lequel la macro doit être exécuter, la Feuil1 correspond à l'emplacement où se situe la colonne concernée.

Au-dessus et en-dessous cette colonne, il y a d'autres lignes remplis qui ne sont pas à prendre en compte.

Re

Dans ce cas, pour ma proposition cela deviens:

Sub extraction_4()
 Dim Rng As Range
 Set Rng = Sheets("Feuil1").Range("$C$11:$C$167").SpecialCells(xlCellTypeConstants)
 Rng.Copy Sheets("Feuil2").Cells(8, 1) 'a adapter
End Sub

Cordialement

Je viens de tester la macro en modifiant la feuil1,

en supprimant des données de la feuil1, et en exécutant la macro, la dernière cellule non vide apparait 2 fois.

Peut-on faire en sorte que la macro détecte le changement de cellules et actualise la feuil2 à chaque modifications de la modifications de la feuil1?

Ou je dois obligatoirement passer par un bouton?

Re

Je ne comprend pas bien...

Si tu veux une actualisation directe sans bouton, utilise la formule.

Cordialement

29planning-2.xlsx (15.63 Ko)

Re

Je pense avoir compris.

J'ai modifié la macro.

L'actualisation se fait dès que tu quittes la feuille1.

La code est dans le code de la feuille1

Cordialement

43planning-3.xlsm (21.01 Ko)
Rechercher des sujets similaires à "vba extraire colonne vides feuille"