Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Mon code pour masquer certaines cellules ne fonctionne pas


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Mon code pour masquer certaines cellules ne fonctionne pas
    Bonsoir le forum

    Je sollicite de l'aide pour parfaire l'impression de mon ticket de caisse.
    Je souhaite que lorsqu'il y'a des cellules vides dans la plage B10:B20, que toutes les lignes correspondantes soient masquées.
    Le code ci-dessous a été conçu a cet effet mais je constate qu'il ne fonctionne pas totalement.
    En effet, il y'a impression mais pas de masque de ligne quand bien même les cellules de la condition sont vides.

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    With Feuil8
        .Visible = True
        .Range("B10:B20").Cells.SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
        .PrintOut
        .Range("B10:B20").EntireRow.Hidden = False
        .Visible = xlSheetVeryHidden
    End With

  2. #2
    Membre émérite
    Bonjour Capi, bonjour le forum,

    Parfois des cellules qui semblent vides ne le sont pas... Elles contiennent un espace ou autre.

    Teste :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    Feuil8.Range("B10:B20").Cells.SpecialCells(xlCellTypeBlanks).Select

    Ça donne quoi ?
    À plus,

    Thauthème

    Je suis Charlie

  3. #3
    Membre régulier
    Bonsoir Thautheme et le forum

    Je viens de tester et c'est l ligne 20 seulement qui est sélectionnée.
    Parfois des cellules qui semblent vides ne le sont pas... Elles contiennent un espace ou autre
    Je suis d'avis avec vous.
    Comment faire maintenant pour satisfaire mon besoin?
    merci

  4. #4
    Membre expérimenté
    Bonjour, j'ai testé ce code, si les cellules sont réellement vides cela marche correctement.
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Test()
    With Worksheets("Feuil1")  'a remplacer "Feuil1" par votre nom de feuille
        .Visible = True
        .Range("B10:B20").Cells.SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
        .PrintOut
        .Range("B10:B20").EntireRow.Hidden = False
    End With
    End Sub


    Cordialement
    On a deux vies, la deuxième commence quand on se rend compte qu'on n'en a qu'une.
    Confucius

  5. #5
    Membre régulier
    Bonjour Transitoire , Thautheme et le forum

    Merci pour vos contributions.
    Il faut noter que la plage B10:E20 est alimenté par les données d'un usf dans l'ordre suivant
    Combobox (pour le choix du produit), Textbox_Qte, Textbox_Prix et Textbox_Montant
    IL y'a 10 combobox, 10 Textbox_Qte, 10 Textbox_prix et 10 Textbox_Montant
    Lors de la facturation, certains controls de mon usf peuvent ne pas comporter des données, donc à la validation, la plage B10:E20 est alimenté par les données des controls.
    Est-ce que le fait que certeins controls soient vides peut impacter la plage (absence de vide réellement)?
    Au lieu de considerer toutes la plage B10:E20, je me suis dis que si B10:B20 comporte du vide ca permettra d'atteindre l'objectif visé c'est à dire masquer les lignes vides de la plage considérée.
    Comment faire pour pouvoir masquer les lignes de la plage B10:B20 qui ne contiennent uniquement que des produits facturés?
    Autrement dit comment arriver à faire masquer les lignes fictives (contenant des données invisible à l'oeil nu sauf par test)?

    Cordialement

  6. #6
    Membre averti
    Bonjour...

    En feuil8(Feuil8), le ‘ticket’ est un Tableau (LitObjects), n’imprimer que ses lignes totalement remplies :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub ip()
      With Feuil8
        .Visible = 1
        [Ticket].Item(1, 5).FormulaR1C1 = "=COUNTIF(Ticket[@[Titre1]:[Titre4]],"""")"
        [Ticket].AutoFilter 5, 0
        [Ticket].Item(-1, 1).Resize([Ticket].Rows.Count + 1, 4).PrintPreview '.PrintOut
        [Ticket].Columns(5).Delete
        .Visible = 2
      End With
    End Sub

  7. #7
    Membre expérimenté
    Bonjour, au lieu de travailler sur B10:B20, essayez donc sur C10:C20. il est possible que le problème vienne des Combobox . sinon, il nous faudrait les codes des Combo et TextBox ?
    Cordialement
    On a deux vies, la deuxième commence quand on se rend compte qu'on n'en a qu'une.
    Confucius

  8. #8
    Membre régulier
    Bonjour Transitoire et le forum

    En supposant que la plage B10:B20 pourrait ou contient des informations (espaces et autres) et le nombre de caractère possible ne depasserait pas 3, est ce qu'il ne serait pas possible de tester le nombre de caractères. Si le nombre de caractère de chaque cellule de la plage B10:B20 est inférieur à 3, que les lignes soient masquées.

    Je vous partage un code contenu dans le 1er combobox intitulé combobox_Bois:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Dim derlig As Long
    Dim i As Integer
     
    On Error Resume Next
    Ligne = Application.Match(Me.ComboBox_Bois1, Sheets("BASE_ARTICLES").Range("A:A"), 0)
     
    Me.TextBox_PV1 = Sheets("BASE_ARTICLES").Range("E" & Ligne)
    If ComboBox_Bois1.Value = "" Then Exit Sub
        ComboBox_Bois2.Clear
    'TextBox_Qte1.SetFocus
     
        For i = 0 To ComboBox_Bois1.ListCount - 1 'To 0 Step -1
             If ComboBox_Bois1.List(i) <> ComboBox_Bois1.Value Then ComboBox_Bois2.AddItem ComboBox_Bois1.List(i) 'ComboBox_Bois1.RemoveItem (i)
        Next i
     
        ComboBox_Bois3.Clear
        ComboBox_Bois4.Clear
        ComboBox_Bois5.Clear
        ComboBox_Bois6.Clear
        ComboBox_Bois7.Clear
        ComboBox_Bois8.Clear
        ComboBox_Bois9.Clear
        ComboBox_Bois10.Clear

  9. #9
    Membre expérimenté
    bonjour, avez vous testé le remplacement que je vous avais demandé de tester?
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    With Feuil8
        .Visible = True
        .Range("B10:B20").Cells.SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
        .PrintOut
        .Range("B10:B20").EntireRow.Hidden = False
        .Visible = xlSheetVeryHidden
    End With


    a remplacer par :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    With Feuil8
        .Visible = True
        .Range("C10:C20").Cells.SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
        .PrintOut
        .Range("C10:C20").EntireRow.Hidden = False
        .Visible = xlSheetVeryHidden
    End With


    Si vous ne l'avez pas fait, faites le SVP
    par ailleurs sur quelle colonne, se trouvent les valeurs reçues des ComboBox?

    Cordialement
    On a deux vies, la deuxième commence quand on se rend compte qu'on n'en a qu'une.
    Confucius

  10. #10
    Membre régulier
    Bonsoir Transitoire

    Merci pour votre feedback.
    Si vous ne l'avez pas fait, faites le SVP
    Je viens de tester et ca marche pour le moment.
    Je vais approfondir les tests et vous revenir avec le resultat final.
    par ailleurs sur quelle colonne, se trouvent les valeurs reçues des ComboBox?
    La colonne B et plus precisement B10:B20.
    Cordialement

###raw>template_hook.ano_emploi###