VBA, compter le nombre de ligne non masquée

Résolu
rhalimi13 Messages postés 23 Statut Membre -  
rhalimi13 Messages postés 23 Statut Membre -
Bonjour,

Je voudrais compter le nombre de ligne non masquée et ensuite afficher le resultat

MERCIIIIIIIIIIIIIIIIIIIII

Private Sub CommandButton3_Click()

Dim R As Long
Dim c As Integer

With Application.WorksheetFunction
If c.EntireRow.hiden = False Then
R = .CountA(Range("A3:A100"))
MsgBox ("il y a " & R & " cellules non vides dans la colonne A")

End With

End Sub

27 réponses

  • 1
  • 2
  1. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    bonjour

    Comme ceci cela devrait mieux fonctionner
    Private Sub CommandButton3_Click() 
    Dim R As Double
    Dim l As Double
    For l = 1 To Cells(65536, 1).End(xlUp).Row
        If Not Rows(l).Hidden Then R = R + 1
    Next l
    MsgBox ("il y a " & R & " lignes visibles dans la colonne A")
    End Sub
    

    Ce sont les lignes visibles qui sont comptées et pas les cellules non vides..
    2
  2. rhalimi13 Messages postés 23 Statut Membre 1
     
    merci bcp de ta solution,

    je vais la travailler parceque je suis débutant en vba

    MERCIIIIIIIIIII ENCOREEEE
    0
  3. rhalimi13 Messages postés 23 Statut Membre 1
     
    Franchement ta solution marche mieux que le programme que m'a été remis sur un forum
    le tiens ne me compte que les visible, ca c excellent!!

    si j'ai un autre pb, tu pourras m'aider?

    thanks
    0
  4. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    bonjour

    Merci de ton message et c'est tout de même normal de fournir du code qui correspond au besoin ?

    si j'ai un autre pb, tu pourras m'aider?

    Pas de problème mais bientôt c'est toi qui va aider les autres !

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

    Posez votre question
  6. rhalimi13 Messages postés 23 Statut Membre 1
     
    Bonjour,

    je reviens vers toi, esperant ne pas trop t'en demander

    voila j'ai un souci avec inputBox, lorsque je click sur annuler ou si je ne saisi rien a inputbox, VBA active le debogueur,
    je souhaiterais qu'il ferme la inputbox si j'annule,

    tu peux voir, MEEEERCI

    Private Sub CommandButton2_Click()

    Range("a1:I30").Interior.ColorIndex = xlNone

    Dim msg As Double

    msg = InputBox("quelle est la moyenne glissante? ")

    'If msg = "" Then Exit Sub

    'Dim msg
    'msg = InputBox
    'If msg = vbCancel Then
    'Exit Sub
    'End If

    Dim c As Range

    For Each c In ActiveSheet.Range("a1:I30")

    If c < msg And c <> "" Then
    c.Interior.Color = RGB(168, 168, 168)
    End If

    Next

    End Sub
    0
  7. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    bonjour

    Je te propose de gérer ainsi l'annulation :
    On Error Resume Next        ' si erreur on passe à la ligne suivante
    msg = InputBox("quelle est la moyenne glissante? ")
    
    If msg = 0 Then Exit Sub    ' si "Annuler" est utilisé on sort de la macro
    On Error GoTo 0             ' le contrôle erreur est remis en fonction
    

    Tu peux aussi le faire en changeant ta réservation
    Dim msg As Variant
    
     msg = InputBox("quelle est la moyenne glissante? ")
    
    If msg = "" Then Exit Sub    ' si "Annuler" est utilisé on sort de la macro
    
    0
  8. rhalimi13 Messages postés 23 Statut Membre 1
     
    re

    j'ai testé ce que tu m'a donné, mais je rencontre tjs des soucis, soit il lance le débeugage ou il m'affiche 2 fois la inputbox

    mon exercice est de colorier des cellules inf a x%

    merci de ton aide
    0
  9. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    bonjour

    Je t'ai fourni 2 possibilités : tu choisis l'une ou l'autre, pas les deux.

    Le plus simple est de passer "msg" en variant.
    0
  10. rhalimi13 Messages postés 23 Statut Membre 1
     
    re bonjour

    j'ai mis msg comme variant, au niveau de la inputbox ca marche nickel, par contre il ne me respecte plus la condition et me colories toutes les cellules, il cherche pas a comprendre,

    merci
    0
  11. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    bonjour

    Avec ceci, cela devrait mieux fonctionner.
    For Each c In ActiveSheet.Range("a1:I30")
    
    If c < Val(msg) And c <> "" Then
            c.Interior.Color = RGB(168, 168, 168)
    Else
            c.Interior.Color = xlNone
    End If
    
    Next
    

    Lorsque tu saisis une valeur dans inputbox, c'est du texte et donc il faut le traduire en numérique pour comparer.
    Dans les formules excel le fait parfois mais pas en VBA.

    Il est plus prudent aussi de décolorer si l'on ne rempli pas la condition.
    0
  12. rhalimi13 Messages postés 23 Statut Membre 1
     
    Bonjour, je vien de faire le test avec

    Val( msg) et On Error Resume Next, CA MARCHE NICKEL !! PERFECT

    donc 'val', comme tu m'a expliqué, traduit le texte en numérique (vue que c de l'inputBox, c'est cela si je ne me trompe pas)

    et le 'On Error Resume Next', permet de passer à la ligne suivante si l'utilisateur se trompe et saisie du Texte ( par erreur de frappe)

    par contre pas besoin du else, sinon dans la boucle il me colorie toute la plage de travail apres avoir réalisé la condition

    autrement on m'a proposé ca;If ((CDec(c.Value) < CDec(msg)) And (CStr(c.Value) <> "")) Then, je ne sais commt ce que ca veut dire et en faisant du copie coller, ca ne marché pas

    Je n'ai plus qu'a te remercier et te dire à bientôt

    Bonne journée !
    0
  13. rhalimi13 Messages postés 23 Statut Membre 1
     
    bonjour, encore moi

    j'ai ce code qui fonctionne, mais je souhaiterais lui dire d'aller de 2 jusqu'a la fin du tableau, sans définir la dernierre cellule (ici=15)
    comment je fais?

    Private Sub CommandButton1_Click()
    Dim var As Integer
    var = 2
    For var = 2 To 15
    If Cells(var, 2) > 100 Then
    Range(Cells(var, 1), Cells(var, 2)).Font.Bold = True
    End If
    Next
    End Sub
    0
  14. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    bonjour

    Avec un autre type de boucle peut-être
    Private Sub CommandButton1_Click()
    Dim var As Integer
    var = 2
    Do While Cells(var, 1) <> ""
        If Cells(var, 2) > 100 Then
            Range(Cells(var, 1), Cells(var, 2)).Font.Bold = True
        End If
        var = var + 1
    Loop
    End Sub
    

    Tu fais progresser ton indice ligne et tu t'arrêtes si la cellule est vide : à adapter avec ton tableau !
    0
  15. rhalimi13 Messages postés 23 Statut Membre 1
     
    salut mon ami

    de retour

    je voudrais sil te plais

    convertir une date (jj/mm/année) en semaine correspondant

    merci
    0
  16. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    bonjour

    Avec l'année en A1, cette formule est plus efficace que la fonction NO.SEMAINE qui n'est pas fiable en Europe du moins.
    =ENT(MOD(ENT((A1-2)/7)+0,6;52+5/28))+1
    0
  17. rhalimi13 Messages postés 23 Statut Membre 1
     
    Bonjour,

    eh bien merci merci et Merci !!

    parceque j'ai passé toute la soirée hier , de 17h à 23h (bien sur pas en continue) et je n'ai rien trouvé ds google

    bien !!

    est ce que tu peux me dire comment tu l'as trouvé que je puisse améliorer mes connaissance en info;

    merci encore

    etr passe une bonne journée!

    a bientôt
    0
  18. rhalimi13
     
    bonjour,

    tu peux m'aider sil te plais

    j'aurais souhaiter colorier les cellules suivant le contenu de la cellule dans la colonne b

    ma plage de donnée est : "c2;l27", et mes condition sont sur la collone B

    j'ai realisé un code mais il ne marche pas

    voici:

    Private Sub CommandButton1_Click()

    Dim c As Range
    Dim var As Integer
    var = 2

    For Each c In ActiveSheet.Range("c2:l27")

    If c <> "" And Cells(var, 2) = mp Then
    c.Interior.ColorIndex = 4
    End If
    var = var + 1
    Next

    If c <> "" And Cells(var, 2) = mc Then
    c.Interior.ColorIndex = 3
    End If
    var = var + 1

    If c <> "" And Cells(var, 2) = df Then
    c.Interior.ColorIndex = 1
    End If
    var = var + 1

    End Sub
    0
  19. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    bonjour

    Si j'ai compris...
    Private Sub CommandButton1_Click()
    
    Dim c As Range
    Dim var As Integer
    var = 2
    
    For Each c In ActiveSheet.Range("c2:l27")
    
    If c <> "" And Cells(c.row, var) = mp Then
    c.Interior.ColorIndex = 4
    End If
    
    Next
    
    If c <> "" And Cells(c.row, var) = mc Then
    c.Interior.ColorIndex = 3
    End If
    
    
    If c <> "" And Cells(c.row, var) = df Then
    c.Interior.ColorIndex = 1
    End If
    
    
    End Sub
    0
    1. rhalimi71 Messages postés 6 Statut Membre
       
      re

      lorsque j'execute la macro;


      il m'affiche un message erreur: variable d'objet ou variable de bloc with non définie
      0
    2. rhalimi71 Messages postés 6 Statut Membre
       
      re

      je viens de tester ton code corrigé, eh bien ca marche qd je met des chiffres a la place de mp, mc et md, mais pourquoi il ne prnds pas du texte??

      merci
      0
    3. rhalimi71 Messages postés 6 Statut Membre
       
      de retour;

      ton code fonctionne parfaitement si a la place de "mp", "mc", et "df" je met du chiffre: 1,2...;

      mais moi c du texte malheuresement;

      si t'as une solution à mon probleme, merci d'avance;

      a bientôt
      0
    4. rhalimi71 Messages postés 6 Statut Membre
       
      salut

      Ouuuuf, Ouuuf Ouuuf j'ai enfin trouver !!!!!!!!


      Eh bien tout simplement DANS le code que tu m'a retouché, IL FALLAIT simplement que je METTE: mp, mc, df entre guillemets:

      If c <> "" And Cells(c.Row, var) = "mp" Then
      If c <> "" And Cells(c.Row, var) = "mc" Then
      If c <> "" And Cells(c.Row, var) = "df" Then



      A mon avis , tu les avais oublier, lol


      UNNNNN TRESSS GRAAAAN MERCCCI A TOI

      une tres bonne journée à toi et à bientôt
      0
    5. rhalimi71 Messages postés 6 Statut Membre
       
      bonjour,

      j'ai noté !
      mon savoir s'accroit avec toi en tt cas !

      mille fois merci de ton aide

      PS: si tu n'est pas connecté, est ce possible de joindre by mail?

      à bientôt
      0
  20. rhalimi13
     
    franchement, tu m'as repondus, je suis tt content!!

    oui c ca, en fait je veux colorier mes cellules dans la plage ( Range("c2:l27") ) suivant le contenu des cellules de la colonne b2

    j'ai recupéré ton code mais ca bloque,

    sil te plais aide moi, merrrrrrcciciiiiii

    comment je peux t'envoyer le fichier excel autrement
    0
  21. rhalimi71 Messages postés 6 Statut Membre
     
    si tu as besoin de plus d'explication je suis connecté, merrci
    parceque le code que m'as posté me semble tres correct, mais pourquoi il ne reponds pas?
    0
  • 1
  • 2