VBA, compter le nombre de ligne non masquée

Résolu/Fermé
rhalimi13 Messages postés 23 Date d'inscription vendredi 4 janvier 2008 Statut Membre Dernière intervention 3 mars 2008 - 4 janv. 2008 à 09:26
rhalimi13 Messages postés 23 Date d'inscription vendredi 4 janvier 2008 Statut Membre Dernière intervention 3 mars 2008 - 3 mars 2008 à 15:26
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

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 685
12 févr. 2008 à 15:15
bonjour

Il faut des guillemets si c'est une valeur que tu testes mais je pensais que c'était des variables ou des constantes définies et alors pas de guillemet.
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 685
24 févr. 2008 à 08:26
bonjour

Faudrait peut-être mettre ta zone index ligne en "long" sinon tu auras des souci avec les gros fichiers (>32000)

Faudrait aussi définir sur quelle feuille tu veux travailler, sauf si tu l'as fait en variables publiques.
Il faut aussi que tu fasse la boucle sur chaque fichier.
Private Sub CommandButton1_Click()
Dim i As long
Dim j As long
Dim Feuil as worksheet
Dim Feuil2 as worksheet
set Feuil = worsheets(....)
set Feuil2 = worsheets(....)
For i = 3 To 1500
  for j = 2 to Feuil.Cells(65536, 5).end(xlup).row
     If Feuil2.Cells(i, 2).Value = Feuil.Cells(j, 5).Value Then
        Feuil.Cells(i, 5).Interior.ColorIndex = 4
     End If
  next j
Next i
End Sub
0
rhalimi13 Messages postés 23 Date d'inscription vendredi 4 janvier 2008 Statut Membre Dernière intervention 3 mars 2008 1
24 févr. 2008 à 09:56
bonjour,

une question; le contenu qui se trouve entre parenthese est le nom de mes 2 fichiers excel comme ci-dessous?
car j'ai 2 fichiers et je compare colonne x du fichier1 / à la colonne y du fichier 2

Set Feuil = worsheets(encour_x007E_1.xls) ?
set Feuil2 = worsheets(1500_mode_op_meca.xls) ?


merci;

cordialement,
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 685
24 févr. 2008 à 10:45
bonjour

non en fait il faut faire un peu plus compliqué car il faut tenir compte des workbooks, c'est-à-dire des classeurs.

Tu n'as plus qu'à changer le nom de tes feuilles et la copie devrait fonctionner et elle rajoute à ce qui existe sur ta feuille.
Private Sub CommandButton1_Click()
Dim i As Long
Dim j As Long
Dim k As Long
Dim cla1 As Workbook
Dim cla2 As Workbook
Dim Feuil1 As Worksheet
Dim Feuil2 As Worksheet
Dim Feuil3 As Worksheet
Set cla1 = Workbooks("encour_x007E_1.xls")
Set cla2 = Workbooks("1500_mode_op_meca.xls")
Set Feuil1 = cla1.Worksheets("Feuil1")
Set Feuil2 = cla2.Worksheets("Feuil1")
Set Feuil3 = cla2.Worksheets("Feuil2")
k = Feuil3.Cells(65536, 5).End(xlUp).Row + 1
For i = 3 To Feuil2.Cells(65536, 2).End(xlUp).Row
  For j = 2 To Feuil1.Cells(65536, 5).End(xlUp).Row
     If Feuil1.Cells(i, 2).Value = Feuil2.Cells(j, 5).Value _
        And Feuil2.Cells(j, 5).Value <> "" Then
        Feuil1.Cells(i, 2).Interior.ColorIndex = 4
        Feuil2.Cells(j, 1).EntireRow.Copy _
            Destination:=Feuil3.Cells(k, 1)
        k = k + 1
     End If
  Next j
Next i
End Sub
0

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

Posez votre question
rhalimi13 Messages postés 23 Date d'inscription vendredi 4 janvier 2008 Statut Membre Dernière intervention 3 mars 2008 1
24 févr. 2008 à 21:02
Bonsoir,

j'ai essayé d'avancer sur ton code en l'adaptant à mes fichiers et feuilles, mais je bloque encore, il bug au niveau du nom des fichiers, alors j'ai essayé de mettre le chemein du fichier, mais non plus ca bloque,
merci de voir si tu as du temps;

bonne soirée



Private Sub CommandButton1_Click()

Dim i As Long
Dim j As Long
Dim k As Long

Dim cla1 As Workbook
Dim cla2 As Workbook

Dim Feuil1 As Worksheet
Dim Feuil2 As Worksheet
Dim Feuil3 As Worksheet

Set cla1 = Workbooks("C:\Documents and Settings\fr000172\Desktop\J-8\encour_x007E_1.xls")
Set cla2 = Workbooks("C:\Documents and Settings\fr000172\Desktop\J-8\1500_mode_op_meca.xls")

Set Feuil1 = cla1.Worksheets("Feuil1")
Set Feuil2 = cla2.Worksheets("Feuil1")
Set Feuil3 = cla2.Worksheets("Feuil2")

k = Feuil3.Cells(65536, 5).End(xlUp).Row + 1

For i = 3 To Feuil2.Cells(65536, 5).End(xlUp).Row
For j = 2 To Feuil1.Cells(65536, 18).End(xlUp).Row

If Feuil1.Cells(i, 5).Value = Feuil2.Cells(j, 18).Value _
And Feuil2.Cells(j, 18).Value <> "" Then

Feuil1.Cells(i, 5).Interior.ColorIndex = 4
Feuil2.Cells(j, 1).EntireRow.Copy _
Destination:=Feuil3.Cells(k, 1)
k = k + 1
End If
Next j
Next i

End Sub
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 685
24 févr. 2008 à 21:34
bonjour

en l'adaptant à mes fichiers et feuilles,

C'est vraiment étonnant que le nom des feuilles n'ai pas changé ?

Un "Workbooks" est un classeur sur lequel tu travailles (work) et donc qui est ouvert et donc excel n'a vraiment rien à faire du chemin sauf si tu veux l'ouvrir ou le sauvegarder.

Donc la macro va très bien fonctionner si elle est lancée par un de tes classeurs et qu'ils sont tous les deux ouverts, avec seulement le nom du classeur pour savoir où travailler.

Si tu veux aller chercher des données dans un classeur sans l'ouvrir, la technique est plus complexe et surtout pas du tout adaptée à ce que tu veux faire : une macro qui compare les données de deux classeurs va prendre du temps pour le faire en mémoire mais si tu veux le faire directement sur le disque, tu vas pouvoir aller faire un bon repas avec le temps qu'il te faudra !
0
rhalimi13 Messages postés 23 Date d'inscription vendredi 4 janvier 2008 Statut Membre Dernière intervention 3 mars 2008 1
3 mars 2008 à 15:26
Bonjour,

j'ai enfin réussi à faire tourner ton code; merci de ton aide; j'ai dû changer qques trucs pour l'adapter à mes fichiers excels

origine:

Dim i As Long
Dim j As Long
Dim k As Long

Dim cla1 As Workbook
Dim cla2 As Workbook

Dim Feuil1 As Worksheet
Dim Feuil2 As Worksheet
Dim Feuil3 As Worksheet

Set cla1 = Workbooks("encour_x007E_1.xls")
Set cla2 = Workbooks("1500_mode_op_meca.xls")

Set Feuil1 = cla1.Worksheets("Feuil1")
Set Feuil2 = cla2.Worksheets("Feuil1")
Set Feuil3 = cla2.Worksheets("Feuil2")

k = Feuil3.Cells(65536, 5).End(xlUp).Row + 1

For i = 3 To Feuil2.Cells(65536, 2).End(xlUp).Row
For j = 2 To Feuil1.Cells(65536, 5).End(xlUp).Row

If Feuil1.Cells(i, 2).Value = Feuil2.Cells(j, 5).Value _
And Feuil2.Cells(j, 5).Value <> "" Then

Feuil1.Cells(i, 2).Interior.ColorIndex = 4
Feuil2.Cells(j, 1).EntireRow.Copy _
Destination:=Feuil3.Cells(k, 1)

k = k + 1

End If
Next j
Next i
End Sub


aprés retouche:

Private Sub CommandButton1_Click()

Dim i As Long
Dim j As Long
Dim k As Long

Dim Feuil1 As Worksheet
Dim Feuil2 As Worksheet
Dim Feuil3 As Worksheet

Set RencoursXls = Workbooks("Rencours.xls")
Set Rmode_opXls = Workbooks("Rmode_op.xls")

Set encoursF1 = RencoursXls.Worksheets("Feuil1")
Set mode_opF1 = Rmode_opXls.Worksheets("Feuil1")
Set mode_opF2 = Rmode_opXls.Worksheets("Feuil2")

k = 1


For j = 1 To encoursF1.Range("A1").End(xlDown).Row
For i = 3 To mode_opF1.Range("E4").End(xlDown).Row

If encoursF1.Cells(j, 4).Value = mode_opF1.Cells(i, 5).Value _
And mode_opF1.Cells(i, 4).Value <> "" Then

mode_opF1.Cells(i, 5).Interior.ColorIndex = 5
encoursF1.Cells(j, 4).Interior.ColorIndex = 4
mode_opF1.Cells(i, 1).EntireRow.Copy Destination:=mode_opF2.Cells(k, 1)

k = k + 1

Exit For

End If

Next i
Next j

End Sub


Je te remercie beaucoup de ton aide !!
Heuresement qu'il y'a des gens comme toi;

je te dis à bientôt
0