Ligne afficher et caché

Résolu
etoumat Messages postés 54 Date d'inscription vendredi 2 février 2007 Statut Membre Dernière intervention 5 juillet 2007 - 8 mars 2007 à 15:23
etoumat Messages postés 54 Date d'inscription vendredi 2 février 2007 Statut Membre Dernière intervention 5 juillet 2007 - 9 mars 2007 à 09:01
Bonjour.
Existe il un code sous vba pour excel pour copier uniquement les lignes afficher et pas les lignes masqués?

11 réponses

drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
8 mars 2007 à 16:13
Do Until Sheets("72").Cells(a, 1) = ""
    Sheets("72").Select

If ActiveSheet.Rows(a).Hidden = False Then

    If Cells(a, 8) = Cells(1, 8) Then
    Range("A" & a, "J" & a).Select
    Selection.Copy
    Sheets("Ent. Sup.").Select
    Cells(b, 1).Select
    ActiveSheet.Paste
    Sheets("72").Select
    Range("A" & a, "J" & a).Select
    Selection.Delete shift:=xlUp
    a = a - 1
    b = b + 1
    Else
    Sheets("72").Cells(1, 2) = b
    Exit Function
    End If

End If

    a = a + 1
Loop

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
3
etoumat Messages postés 54 Date d'inscription vendredi 2 février 2007 Statut Membre Dernière intervention 5 juillet 2007
8 mars 2007 à 16:34
Merci beaucoup de te pencher sur mon problème Drikce06 mais j'ai déja essayé sa. C'est vrai que sa marche je vai d'ailleur accepté ta réponse mais c trop lent quand ta plein de ligne ( j'en ai 16000 et c interminable)

Merci quand meme et dsl de t'avoir pris la tête avant. Bon fin de journée tchao
0
etoumat Messages postés 54 Date d'inscription vendredi 2 février 2007 Statut Membre Dernière intervention 5 juillet 2007
8 mars 2007 à 16:37
en fait ce qui aurait été bien c'est un code qui reconnai directement les ligne masqués sans passer par un " if  " car c'est trop long. PS : au lieu de rajouter : " If ActiveSheet.Rows(a).Hidden = False Then " il suffit d'enlever : " Else Sheets("72").Cells(1, 2) = b Exit Function". Sa revien meme
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
8 mars 2007 à 16:38
Oui mais je ne vois d'autre solution, la lenteur est due à la boucle sur les 16000 cellules, tu auras du mal à faire plus rapide.

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
8 mars 2007 à 16:43
If Cells(a, 8) = Cells(1, 8) AndActiveSheet.Rows(a).Hidden = False Then

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
0
etoumat Messages postés 54 Date d'inscription vendredi 2 février 2007 Statut Membre Dernière intervention 5 juillet 2007
9 mars 2007 à 08:21
Serait-il possible de faire un code de la forme :

"For each Rows.Hidden = False in activesheet"

afinque vba prenne directement les lignes non masquées ? J'ai essayer de cette facon et sa ne marche pas car il faut normalement une variable de type variant entre each et in. Du coup je ne sait pas comment faire. Est - ce possible ?
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
9 mars 2007 à 08:27
Peut être dans ce sens "For each Rows.Visible in activesheet"

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
0
etoumat Messages postés 54 Date d'inscription vendredi 2 février 2007 Statut Membre Dernière intervention 5 juillet 2007
9 mars 2007 à 08:34
Rows.visible n'existe pas ..... JE SUIS PERDU BOUOUOU
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
9 mars 2007 à 08:45
Mais de toute façon même si tu y parvient il te fera les quelques 65000 lignes visibles, donc le traitement sera encore plus long. La seule façon de le raccourcir serai de désactiver la mise à jour de l'écran et de traiter les 16000 lignes.

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
9 mars 2007 à 08:48
Regarde de ce côté: (aide VBA)



VisibleRange, propriété







[mk:@MSITStore:C:\Program%20Files\Microsoft%20Office\OFFICE11\1036\VBAXL10.CHM::/html/xlproVisibleRange1.htm#example


]




Cette propriété renvoie un objet [mk:@MSITStore:C:\Program%20Files\Microsoft%20Office\OFFICE11\1036\VBAXL10.CHM::/html/xlobjRange1.htm Range] qui représente la plage de cellules affichées dans la fenêtre ou le volet. Si une colonne ou une ligne est partiellement affichée, elle est incluse dans la plage. En lecture seule.



Exemple


Cet exemple montre comment afficher le nombre de cellules visibles sur la feuille Sheet1.



Worksheets("Sheet1").Activate
MsgBox "There are " & Windows(1).VisibleRange.Cells.Count _
    & " cells visible"





 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
0
etoumat Messages postés 54 Date d'inscription vendredi 2 février 2007 Statut Membre Dernière intervention 5 juillet 2007
9 mars 2007 à 09:01
Ca yai j'ai trouver !!!!!! J'ai complètement changer de facon o lieu de faire une boucle je fait une recherche. Voila le code : ( Sa marche super et en plus c rapide)

Dim a, b, c, d As Integer
Dim aa As String


a = Sheets("72").Cells(1, 1)
b = Sheets("72").Cells(1, 2)
aa = Sheets("72").Cells(1, 8)
c = 1
d = 8


On Error GoTo erreur1
Do Until Sheets("72").Cells(a, 1) = ""
    If Not g = 1 Then
    Sheets("72").Select
    Cells(c, d).Activate
    Cells.Find(what:=aa, after:=ActiveCell, LookIn:=xlValues, lookat:= _
    xlPart, searchorder:=xlByColumns, searchdirection:=xlDown).Activate
    c = ActiveCell.Row
    d = ActiveCell.Column
   
    Range("A" & c, "J" & c).Select
    Selection.Cut
    Sheets("Ent. Sup.").Select
    Cells(b, 1).Select
    ActiveSheet.Paste
    'Sheets("72").Select
    'Range("A" & c, "J" & c).Select
    'Selection.Delete shift:=xlUp
    b = b + 1
    Sheets("72").Cells(1, 2) = b
    If c = 1 Then
    g = 1
    End If
    Else
    Exit Function
    End If
Loop


Sheets("72").Select
Cells(1, 8).Select
erreur1:
Exit Function

Merci encore de ton aide. Bon wkd tchao
0
Rejoignez-nous