Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Sirberthoult

XLDnaute Occasionnel
quand j'utilise ActiveCell.Offset(1,0) dans une boucle, je décale ma cellule active d'une ligne.

ma question est si il y a des lignes masquées ,est quelles sont prise en considération dans ma boucle ?

P.S:désolé si la réponse à ma question semble évidente...
 
Re : juste une question

Au fait, Bonsoir,...

Effectivement je m'en doutais mais n'étais pas sur...

alors maintenant, il y à t'il un moyen de faire comprendre à ma boucle qu'il faut quelle exclu les lignes masquées en sachant que ce ne sont pas toujours les mêmes qui sont masques?

voici mon code pour ceux que cela intéresse : ce sont en fait deux codes mis bout à bout que j'ai trouvé sur un site perso génial ...
comme je suis novice j'ai essayer de traduire un peu ce que je comprenais dans le deuxième code, n’hésitez pas a me corriger si besoin...
ma question porte sur le deuxième code...

Sub Imprimer()

Unprotect Password:=""

Set champ = Range("$A$1:$K$126")
champ.Find("*", , , , xlByRows, xlPrevious).Offset(1, 0).Select
n = champ.Columns.Count
champ.Cells(250, 1).End(xlUp).Offset(1, 0).Select
For i = 1 To champ.Rows.Count
k = 0
For Each c In champ.Cells(i, 1).Resize(1, n)
If c <> 0 And c <> "" Then k = k + 1
Next c
If k = 0 Then Union(Selection, champ.Cells(i, 1)).Select
Next i
Selection.EntireRow.Hidden = True




ActiveSheet.ResetAllPageBreaks ' raz
h = 41 ' hauteur de page
[A1].Select
Do While ActiveCell.Row < [A250].End(xlUp).Row 'On fait tant que la ligne de la cellule active est plus petite que chaque ligne, (de la derniere ligne à la premiere)
ActiveCell.Offset(h, 0).Select 'on selectionne la cellule décalée de h lignes et 0 colones par rapport à la cellule active.
tém = True ' tém est vrai
d = -1
Do While tém ' tant que tém est vérifié
If ActiveCell.Offset(d, 0) <> ActiveCell Then 'si la cellule sur la ligne d'avant est différente de la cellule active
tém = False 'alors tém est faux on sort de la boucle
Else
d = d - 1 'sinon
End If
Loop 'on recommence
If (-d) < h Then ActiveCell.Offset(d + 1, 0).Select 'si -d est plus petit que h, alors on selectionne la cellule en dessous de la cellule active
ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell ' on insere un saut de page
Loop
[A1].Select 'on recommence au premier If

ActiveSheet.PageSetup.PrintArea = champ.Address
'Application.ActivePrinter = "Canon MP250 series Printer sur Ne03:"
ActiveWindow.SelectedSheets.PrintPreview
'ActiveWindow.SelectedSheets.PrintOut

Cells.EntireRow.Hidden = False

Protect Password:=""
End Sub


merci d'avance,
 
Re : juste une question

Re-bonsoir Silberthoult,

Tu as de la chance, je suis passé à coté de ceci :
Sirberthoult juste une question
quand j'utilise ActiveCell.Offset(1,0) dans une boucle, je décale ma cellule active d'une ligne.

ma question est si il y a des lignes masquées ,est quelles sont prise en considération dans ma boucle ?

P.S:désolé si la réponse à ma question semble évidente...
Si j'avais vu, je n'aurais pas répondu...

Tu m'as mis la puce à l'oreille dans ton 2° post :
Au fait, Bonsoir,...
Maintenant, que tu t'es rattrappé comme tu as pu, voici une réponse technique.Tu rajoutes cette condition dans ton code :
VB:
And Not ActiveCell.Offset(d, 0).Hidden
Ce qui donne :
VB:
Sub Imprimer()
    Unprotect Password:=""
    Set champ = Range("$A$1:$K$126")
    champ.Find("*", , , , xlByRows, xlPrevious).Offset(1, 0).Select
    n = champ.Columns.Count
    champ.Cells(250, 1).End(xlUp).Offset(1, 0).Select
    For i = 1 To champ.Rows.Count
        k = 0
        For Each c In champ.Cells(i, 1).Resize(1, n)
            If c <> 0 And c <> "" Then k = k + 1
        Next c
        If k = 0 Then Union(Selection, champ.Cells(i, 1)).Select
    Next i
    Selection.EntireRow.Hidden = True

    ActiveSheet.ResetAllPageBreaks ' raz
    h = 41 ' hauteur de page
    [A1].Select
    Do While ActiveCell.Row < [A250].End(xlUp).Row 'On fait tant que la ligne de la cellule active est plus petite que chaque ligne, (de la derniere ligne à la premiere)
        ActiveCell.Offset(h, 0).Select 'on selectionne la cellule décalée de h lignes et 0 colones par rapport à la cellule active.
        tém = True ' tém est vrai
        d = -1
        Do While tém ' tant que tém est vérifié
            If ActiveCell.Offset(d, 0) <> ActiveCell And Not ActiveCell.Offset(d, 0).Hidden Then 'si la cellule sur la ligne d'avant est différente de la cellule active
                tém = False 'alors tém est faux on sort de la boucle
            Else
                d = d - 1 'sinon
            End If
        Loop 'on recommence
        If (-d) < h Then ActiveCell.Offset(d + 1, 0).Select 'si -d est plus petit que h, alors on selectionne la cellule en dessous de la cellule active
        ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell ' on insere un saut de page
    Loop
    [A1].Select 'on recommence au premier If
    ActiveSheet.PageSetup.PrintArea = champ.Address
    'Application.ActivePrinter = "Canon MP250 series Printer sur Ne03:"
    ActiveWindow.SelectedSheets.PrintPreview
    'ActiveWindow.SelectedSheets.PrintOut
    Cells.EntireRow.Hidden = False
    Protect Password:=""
End Sub

A+
 
Re : juste une question

Re-bonsoir, et merci encore pour vos réponses et je re-merci encore de m'avoir quand même répondu la première fois ...

et effectivement les codes proviennent du site que tu as lié... il est super et j'apprend beaucoup avec...

sinon merci pour le "And Not ActiveCell.Offset(d, 0).Hidden"

mais cela me donne erreur 400...🙁

si on traduit la phrase cela veut'il dire:

si condition 1 et pas condition 2
ou que condition1 (avec and not dedans)soit:

"si la cellule sur la ligne d'avant est différente de la cellule active et n'est pas une celulle masquée..."
ou
"si la cellule sur la ligne d'avant est différente de la cellule active ou d'une cellule masques"
ou
ma question est débile et j'ai rien compris et je sais pas traduire...😱

merci de m’éclairer je cherche à comprendre l'erreur car je pense que ce que je cherche à faire est proche...
 
Re : juste une question

Bonjour le forum,

voila je reviens avec mon problème

effectivement, maintenant j'ai plus d'erreur...mais j'ai toujours mon problème de ligne blanche, il me semble que la deuxiéme partie du code n'ignore toujours pas les lignes vides qui se font masquer par la premiére partie du code ...

en faite il faudrait qu'il ignore les cellules avec valeur nulle qui ce font masquer ...

pour mieux comprendre je joint un exemple qui illustre bien mon problème :
quand j'imprime cela ne me met pas 40 lignes par page au maximum comme je le demande au code en h (je pense qu'il continu de comptabiliser les ligne masquées)
alors qu'il y a assez de place sur la page pour accueillir le bloc suivant ...

voila merci encore pour votre aide
Regarde la pièce jointe impression.zip
 

Pièces jointes

Re : juste une question

Re bonjours le forum,

Oups, mon exemple été mauvais, j'ai corrigé pour mieux comprendre...

je ne comprend pas alors qu'il y a de la place sur la page( h=40), il met un saut de page...
je pense qu'il prend en compte encore les cellules masquées... qui ne sont pas vide puisqu'elle on une formule qui donne "" en résultat...

merci d'avance pour votre aide...

Regarde la pièce jointe impression.zip
 

Pièces jointes

Re : juste une question

Bonsoir le forum,

merci Staple 1600 de ton intérêt à mon problème...

je ne sais pas si cela fonctionne chez toi mes chez moi j'ai placé ta ligne juste après la déprotection de la feuille dans le code ... mais ca ne change rien ...
je pense qu'il doit manquer plus un truc du genre : And Not ActiveCell.Offset(d ,0).Hidden = "" mais ma syntaxe est nulle...

pour comprendre si tu change h = 63 il arrive à placer plusieurs bloc sur la page (mais je suis sur que le code compte les lignes masquées de valeur ""...

merci encore pour vos réponses...
 
Re : juste une question

Bonjour le forum,

merci staple 1600 pour cette precision ...

j'aimerai savoir si il y a un moyen d'ignorer des lignes specifiques, type chaque lignes dont la valeur de la case en colonne A est égale à ""... dans la résolution d'une boucle...

merci d'avance
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
104
Retour