Microsoft 365 Copier-coller dans une plage avec des cellules masquées

iliess

XLDnaute Occasionnel
Bonjour,
Je vous transmets un code qui permet de copier-coller dans des cellules filtrées d'une plage contenant des cellules masquées.
Pourriez-vous, s’il vous plaît, l’améliorer ou le modifier afin de le rendre plus rapide et performant, sachant que ma plage de données est très étendue ?
Je vous remercie par avance pour votre aide.
Cordialement.

VB:
Sub RemplirDictionnaireVisible()
    Dim Disco1 As Object  ' Déclare un objet dictionnaire
    Dim Cellule As Range  ' Déclare une variable pour chaque cellule dans la plage
    Dim Plage As Range    ' Déclare la plage de cellules à parcourir

    ' Créer un objet dictionnaire
    Set Disco1 = CreateObject("Scripting.Dictionary")

    ' Définir la plage de cellules à analyser
    Set Plage = Range("C2:C19")  ' Plage de A1 à A20

    ' Parcourir chaque cellule de la plage
    For Each Cellule In Plage
        ' Vérifier si la cellule est visible (pas masquée)
        If Not Cellule.EntireRow.Hidden And Not Cellule.EntireColumn.Hidden Then
            ' Ajouter au dictionnaire : clé = adresse de la cellule, valeur = contenu de la cellule
            Disco1(Cellule.Address) = Cellule.Value
        End If
    Next Cellule


    ' Définir la nouvelle colonne (par exemple colonne B)
    NouvelleColonne = "A"
For Each Cle In Disco1.Keys
    ' Extraire uniquement le numéro de ligne de l'adresse
    Dim Ligne As String
    Ligne = Replace(Cle, "$", "") ' Enlever les signes "$" pour garder "A1"
    Ligne = Mid(Ligne, 2) ' Garder uniquement la partie ligne après la lettre de la colonne
    
    ' Construire l'adresse avec la nouvelle colonne
    Range(NouvelleColonne & Ligne).Value = Disco1(Cle)
Next Cle
    ' Libérer le dictionnaire
    Set Disco1 = Nothing
End Sub
 

Pièces jointes

  • Copier Coller uniquement les cellule visible.xlsm
    17.6 KB · Affichages: 3
Solution
Re,
Sur ma PJ ça marche, et le résultat est identique à la feuille B. Voir PJ.
Sur quel fichier travaillez vous ?

1735512673278.png

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Iliess,
Essayez cette macro :
VB:
Sub EssaiCopierColler()
    Dim L%
    Application.ScreenUpdating = False
    For L = 2 To 1000   ' A adapter
        If Not Cells(L, "A").EntireRow.Hidden And Not Cells(L, "A").EntireColumn.Hidden Then
            Cells(L, "A") = Cells(L, "C")
        End If
    Next L
End Sub
Sur 1000 lignes avec mon vieux XL2007 je passe de 89ms à 54ms (-40%).
A tester grandeur nature. ;)
 

Pièces jointes

  • Copier Coller uniquement les cellule visible.xlsm
    42 KB · Affichages: 0
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Ou encore avec :
VB:
Sub EssaiCopierColler()
    Dim T, L%
    T = [A1:C1000]
    If Not Columns(1).Hidden Then
        For L = 2 To 1000   ' A adapter
            If Not Rows(L).Hidden Then
                T(L, 1) = T(L, 3)
            End If
        Next L
    End If
    [A1].Resize(UBound(T, 1), 1) = T
End Sub
Pus rapide, on passe de 89ms à 31ms ( -65% )
 

Pièces jointes

  • Copier Coller uniquement les cellule visible V3.xlsm
    45.6 KB · Affichages: 2
Dernière édition:

Discussions similaires

Réponses
49
Affichages
1 K

Statistiques des forums

Discussions
315 222
Messages
2 117 501
Membres
113 174
dernier inscrit
Janssen kouassi