Compter nombre de lignes, condition et lors de l'enregistrement

Résolu/Fermé
Fleur 99 - 13 nov. 2013 à 19:15
 fleur 99 - 24 nov. 2013 à 22:22
Bonjour,

J'essaye mais sans succes d'écrire un code excel 2007 qui :
- compte le nombre de lignes, colonne A de la "Feuil1", avec mention " Mag X"
- affiche une boite de dialogue donnant le nombre de lignes avec cette mention
- ce code devant être exécuté lors de l'enregistrement du fichier.

Je n'arrive pas à compter le nb de lignes avec la valeur. J'ai tenté des filtres, des Count, CountIf.
Quant à l'exécution de ce code lors de l'enregistrement je ne sais pas faire.

Sub NBLignes()

'Compter le nombre de lignes. Il ne faut pas dépasser 600 lignes
Dim NbLig As Integer
NbLig = Cells.SpecialCells(xlCellTypeLastCell).Row
If NbLig > 600 Then
MsgBox "Nombre de lignes authorisées : 600. Il y a : " & NbLig & " lignes"
End If
End Sub

A voir également:

9 réponses

Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
Modifié par Polux31 le 13/11/2013 à 19:57
Bonjour,

Dans l'éditeur VB d'Excel, faire un double click sur "Thisworkbook" dans la fenêtre de gauche (en-dessous de "feuil1", "feuil2" ...) et coller le code suivant :

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)


compteLigne

End Sub



Sub compteLigne()

Dim ws As Worksheet

Dim DerniereLigne As Integer

Dim cpt As Long

Dim i As Long



DerniereLigne = Range("A" & Rows.Count).End(xlUp).Row

Set ws = ThisWorkbook.Sheets("Feuil1")



cpt = 0

For i = 1 To DerniereLigne

If ws.Range("A" & i).Value = "Mag X" Then cpt = cpt + 1

Next i



MsgBox cpt



End Sub

;0)

«Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
Nicolas Boileau
0
Bonsoir,
Le code fonctionne, génial, ça correspond à ma demande (loin de mon code !) et quel soulagement d'avoir de l'aide lorsque l'on peine.
Un grand merci pour votre aide et réactivité.
Cordialement
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
13 nov. 2013 à 23:45
De rien, ce site est fait pour ça.

Merci de passer le thread en résolu.
0
Bonjour,

Désolée, j'ai un souci avec ce code car il s'applique à toutes les feuilles de mon fichier. De plus, lorsque j'ai 45000 lignes dans la feuille ("Feuil1") il ne fonctionne pas.
Dés que j'enregistre un autre feuille, la boite de dialogue s'affiche.
J'ai essayé d'ajouter une condition au code "Private Sub Workbook_BeforeSave", mais sans succes.
Est-il possible de l'appliquer qu'à la feuille Sheets("Feuil1") ?

Cordialement
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
14 nov. 2013 à 11:24
Bonjour,

Il faut remplacer la ligne

Dim DerniereLigne As Integer

par

Dim DerniereLigne As Long

Le code est-il bien placer dans l'éditeur VB de "ThisWorkbook" ?
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
14 nov. 2013 à 11:35
Bonjour,

En attendant Polux31 que je salue

peut-^tre une méthode sans boucle:

sub compter_nbre_magX()
Dim Nbre as long
with sheets(1)
Nbre=application.countif(.columns("A"),"magX")
End if
msgbox "nbre de MagX: " & Nbre

end sub
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
14 nov. 2013 à 11:39
pour la macro de Polux

tu as 45000 lignes
donc il faut passer derniereligne en Long. integer allant "seulement" jusqu'à 32767
Dim derniereligne as Long
0

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

Posez votre question
Bonjour,
Merci pour vos retours.
Test pas conluant avec le code de michel_m.

J'ai passé derniereligne en Long. Plus de problème sur le nombre de ligne.

Par contre le code s'applique toujours à toutes les feuilles de mon fichier. J'ai bien noté tout le code dans l'éditeur VB de "ThisWorkbook".
Cordialement
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
15 nov. 2013 à 12:16
Bonjour Fleur 99,

Que veux-tu dire exactement par "le code s'applique à toutes les feuilles" ?

La boucle se lance au moment de l'enregistrement du fichier et uniquement sur la feuille 1 est traitée.

Ca répond au 3 exigeances du 1er post.

Salut Michel_m

Effectivement, on peut utiliser une fonction intégrée Excel, mais la boucle se fait quand même.

:0)
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
15 nov. 2013 à 09:44
bonjour

une étourderie de ma part

par contre, il aurait été sympa d'indiquer où ça bugue (réciprocité dans le temps passé par solidarité)

Sub compter_nbre_magX()
Dim Nbre As Long
With Sheets(1)
Nbre = Application.CountIf(.Columns("A"), "magX")
End With
MsgBox "nbre de MagX: " & Nbre

End Sub

maquette:
https://www.cjoint.com/?3KpjRMntjWO

0
Bonsoir,
je n'ai pas été très explicite.
le code s'applique à toutes les feuilles" ? veut dire que sur la feuille "feuil1" c'est correct mais dans mon fichier j'ai plusieurs feuilles et dés que je travaille et que j'enregistre une autre feuille, autre que la "feuil1" la boite de dialogue s'affiche. Il ne faut pas car le contenu est totalement différent.
Même si la "feuil1" est mentionné dans le code, le code s'applique lors de l'enregistrement des autres feuilles, feuille sur laquelle on est positionné.

Michel-m : le code fonctionne à partir d'un bouton de commande. merci, j'avais modifié le code pour mon test.
Le test n'est pas concluant veut dire que le contrôle du nombre de ligne ne s'effectue pas lorsque l'on active la sauvegarde de la feuille en question et seulement ladite feuille du fichier mais s'exécute via un bouton.
C'est une solution de contournement au risque de ne pas activer le contrôle.
J'espère que ces compléments vous aiderons à la compréhension de mes problèmes.
Cordialement
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
16 nov. 2013 à 15:45
Bonjour,

Pour que le calcul se fasse uniquement sur la feuille 1, il faut différencier la sauvegarde générale du fichier et le compte de ligne sur la feuille 1. Pour ce faire, il faut un déclencheur (un bouton de commande) sur la feuille 1 pour effectuer le calcul et la sauvegarde lorsque l'on est sur cette feuille.
0
J'ai opté pour le bouton de commande pour le contrôle sur la feuille.
Merci à vous deux pour votre aide.
0