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
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
A voir également:
- Vba compter le nombre de ligne
- Site de vente en ligne particulier - Guide
- Partage de photos en ligne - Guide
- Aller à la ligne excel - Guide
- Apparaitre hors ligne instagram - Guide
- Excel compter cellule couleur sans vba - Guide
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
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.
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.
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
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.
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
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
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,
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,
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
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.
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
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
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
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
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
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 !
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 !
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
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
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