Copie Cellules Visibles

Bonjour,

Je souhaite copier les cellules visibles (filtrées) et non vides des colonnes Poulies, Tomates, Voiture du tableau feuille TATA dans le tableau feuille TOTO à la suite des données dans les bonnes colonnes.

J’arrive à copier une colonne mais en indiquant la plage des données car sinon je copie en plus des lignes vides et ça ne fonctionne pas si un filtre est activé.

J’aimerais que la macro ne copie que ces plages de données sans avoir besoin de définir le début et fin de plage.

Est-il aussi possible de copier les commentaires car ils disparraissent ?

Merci pour votre aide.

Pilougne

26cpycell.zip (14.71 Ko)

Bonjour,

Utiliser SpecialCells pour définir LastLigne ne sert à rien. En outre, la définition par End(xlUp) te renverra la dernière ligne du tableau, même si elle est vide (un effet pervers des tableaux Excel !).

Pour utiliser correctement SpecialCells, tu dois filtrer pour masquer les lignes vides, tu dois masquer les colonnes que tu ne veux pas, et tu l'appliques à ton tableau (car SpecialCells s'applique à un objet Range).

Cordialement.

Bonjour MFerrand,

Merci pour votre réponse, je comprends pourquoi je galère.

Auriez-vous un exemple pour m'aider?.

Cordialement

Bonjour,

Essaie ceci :

Sub Transférer()
    Dim plt(), i%, k%, n%
    For k = 1 To 5 Step 2
        For i = 1 To [Tableau1].Rows.Count
            If [Tableau1].Cells(i, k) <> "" And i > n Then n = i
        Next i
    Next k
    ReDim plt(1 To n, 1 To 3)
    For k = 0 To 2
        For i = 1 To n
            plt(i, k + 1) = [Tableau1].Cells(i, k * 2 + 1)
        Next i
    Next k
    [Tableau17].Cells(1, 1).Resize(n, k).Value = plt
End Sub

sans filtrage ni SpecilCells, qui me paraît plus sûr...

(Bouton Transférer)

Cordialement.

Bonjour MFerrand,

Je vous remercie pour votre aide et votre temps passé sur mon problème.

je viens de tester votre fichier qui fonctionne correctement mais sauf erreur il ne "gère" pas le filtrage et les données transférées ne se cumulent pas. Si je ne me trompe, vous utilisez les variables dynamiques, vu mon petit niveau je n'y aurais jamais pensé en vba, j'étais entrain de voir du côté de Userange, mais pareil, je n'arrive pas a détecter la dernière ligne non vide du tableau.

Je suis preneur de toute solution.

En espérant de mon problème serve aussi à d'autres.

Cordialement

Bonjour,

J'ignore ce que tu entends pas "gérer le filtrage" !? L'objectif était que les valeurs de 3 colonnes du tableau de la feuille 1 soient transférées dans le tableau de la feuille 2.

En tout état de cause, si la procédure avait opéré un filtrage pour procéder à cette action, elle aurait rétabli la situation initiale une fois l'action réalisée, tu ne verrais donc rien.

Mais cette procédure réalise le transfert au moyen d'un tableau VBA, servi valeur par valeur et affecté globalement au tableau cible.

Comme je l'ai indiqué, elle n'opère aucun filtrage et n'utilise pas la méthode SpecialCells, et également elle ne procède pas par copier-coller. Elle utilise donc des méthodes propres à VBA qui ne sont pas reproductibles manuellement.

Elle présuppose effectivement que le tableau cible est vide, mais on peut aisément remédier à cela. Je ne l'avais point fait car ton utilisation de tableaux Excel de façon quelque peu désordonnée car il sont en partie vides... ne permet pas d'utiliser les méthodes habituelles de recherche de la fin d'une plage. Mais c'est ton choix !

Sub Transférer()
    Dim plt(), i%, k%, n%
    For k = 1 To 5 Step 2
        For i = 1 To [Tableau1].Rows.Count
            If [Tableau1].Cells(i, k) <> "" And i > n Then n = i
        Next i
    Next k
    ReDim plt(1 To n, 1 To 3)
    For k = 0 To 2
        For i = 1 To n
            plt(i, k + 1) = [Tableau1].Cells(i, k * 2 + 1)
        Next i
    Next k
   i = 0
    Do
        i = i + 1
        If IsEmpty([Tableau17].Cells(i, 1)) Then Exit Do
    Loop
    [Tableau17].Cells(i, 1).Resize(n, k).Value = plt
End Sub

Tu modifies la fin de la macro (partie surlignée) et tu testes en actionnant deux fois le transfert. Tu auras 2 fois les valeurs à transférer à la suite...

Cordialement.

Bonjour,

Je suis désolé si ma demande n'est pas très claire, votre fichier réalise correctement la copie de mes colonnes dans le tableau de la feuille 2 (MERCI) , mais je ne souhaite copier uniquement les cellules non filtrées, j'entends par filtrage: critère.

Exemple si je sélectionne le critère jaune sur la colonne 1 , je ne veux copier que les cellules des lignes qui seront visibles.

Cordialement.

Bonjour,

Sub Transférer()
    Dim plt(), i%, k%, n%, m%
    For k = 1 To 5 Step 2
        For i = 1 To [Tableau1].Rows.Count
            If [Tableau1].Cells(i, k) <> "" And i > n Then n = i
        Next i
    Next k
    ReDim plt(1 To 3, 1 To n)
    For i = 1 To n
        If Not [Tableau1].Rows(i).Hidden Then
            m = m + 1
            For k = 0 To 2
                plt(k + 1, m) = [Tableau1].Cells(i, k * 2 + 1)
            Next k
        End If
    Next i
    ReDim Preserve plt(1 To 3, 1 To m): i = 0
    Do
        i = i + 1
        If IsEmpty([Tableau17].Cells(i, 1)) Then Exit Do
    Loop
    [Tableau17].Cells(i, 1).Resize(m, k).Value = Application.Transpose(plt)
End Sub

Ça ressemble, mais il y a pas mal de petites différences...

Cordialement.

Bonjour,

Je vous REMERCIE c'est exactement ce que je voulais.

Il me reste a décortiquer votre code, car j'aime bien

comprendre ce que j'utilise.

Merci

Cordialement.

Si quelque chose t'échappe, je répondrai aux questions...

Bonne journée.

Rechercher des sujets similaires à "copie visibles"