Macro de "compter ligne avec critère" qu
grovallat
-
grovallat -
grovallat -
Boujour à tous,
Voilà, je suis débutant en matière de VB excel et j'essai en vain de creer 3 macros qui commencent à me taper sur le système.
Voilà mes soucis:
1) J'ai un fcihier contenant plusieurs onglets contenant eux-meme des données sur des commandes éffectuées (par exemble Nom du responsable, réference du produitou encore prix du produit et quantités de produits commandés.
J'aimerais dans un premier temps compter le nombre de lignes contenues dans un onglet en fonction d'un critère (par exemple C1: "ligne contenant une donnée" ou C2: "valeur XXX dans colonne A"). Et écrire le résutat dans une celluyle d'un nouvel onglet.
EX:
Feuil1 Feuil2
A B C A B
1 XXX 1 tata 1 pour C1 4
2 Y 2 toto ==> 2 pour C2 2
3 Z 3 tete 3
4 XXX 4 tutu 4
5
Car 4 lignes contenant des données et 2 contennant XXX dans la colonne A, et résultats écrit dans les cellules B1 et B2 de la feuille 2.
2)Mon deuxième soucis:
J'essai de creer une macro qui sommera toutes les valeurs contenues dans les colonnes de lignes répondant à un crtère donné et qui écrira le résutats dans une cellule de la meme feuille que précédemment.
Je m'explique: en admettant que la colonne B représente un nombre d'articles commandés.
EX:
Feuil1 Feuil2
A B C A B
1 XXX 1 tata 1 pour C1 4
2 Y 2 toto ==> 2 pour C2 2
3 Z 3 tete 3 CompteC2 5
4 XXX 4 tutu 4
5
Car pour le critère C2 (XXX dans la colonne A) il y a 1+4=5 articles commandé et copie du résultat dans la cellule B3 de la feuille 2 .
Voilà, j'espère avoir été clair et j'espère que quelqu'un pourra m'aider, ce problème commance serieusement à me... nan! restons polit.
J'ai pas encore fini de bosser sur la troisième macro, je vous dirai ce qu'il en est plus tard.
Merci d'avance à tous et n'hésitez pas à me demander des précisions si besoin est.
Voilà, je suis débutant en matière de VB excel et j'essai en vain de creer 3 macros qui commencent à me taper sur le système.
Voilà mes soucis:
1) J'ai un fcihier contenant plusieurs onglets contenant eux-meme des données sur des commandes éffectuées (par exemble Nom du responsable, réference du produitou encore prix du produit et quantités de produits commandés.
J'aimerais dans un premier temps compter le nombre de lignes contenues dans un onglet en fonction d'un critère (par exemple C1: "ligne contenant une donnée" ou C2: "valeur XXX dans colonne A"). Et écrire le résutat dans une celluyle d'un nouvel onglet.
EX:
Feuil1 Feuil2
A B C A B
1 XXX 1 tata 1 pour C1 4
2 Y 2 toto ==> 2 pour C2 2
3 Z 3 tete 3
4 XXX 4 tutu 4
5
Car 4 lignes contenant des données et 2 contennant XXX dans la colonne A, et résultats écrit dans les cellules B1 et B2 de la feuille 2.
2)Mon deuxième soucis:
J'essai de creer une macro qui sommera toutes les valeurs contenues dans les colonnes de lignes répondant à un crtère donné et qui écrira le résutats dans une cellule de la meme feuille que précédemment.
Je m'explique: en admettant que la colonne B représente un nombre d'articles commandés.
EX:
Feuil1 Feuil2
A B C A B
1 XXX 1 tata 1 pour C1 4
2 Y 2 toto ==> 2 pour C2 2
3 Z 3 tete 3 CompteC2 5
4 XXX 4 tutu 4
5
Car pour le critère C2 (XXX dans la colonne A) il y a 1+4=5 articles commandé et copie du résultat dans la cellule B3 de la feuille 2 .
Voilà, j'espère avoir été clair et j'espère que quelqu'un pourra m'aider, ce problème commance serieusement à me... nan! restons polit.
J'ai pas encore fini de bosser sur la troisième macro, je vous dirai ce qu'il en est plus tard.
Merci d'avance à tous et n'hésitez pas à me demander des précisions si besoin est.
A voir également:
- Macro de "compter ligne avec critère" qu
- Partage de photos en ligne - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Formulaire en ligne de meta - Guide
- Mètre en ligne - Guide
- Apparaitre hors ligne instagram - Guide
8 réponses
Salut,
On va tenter de t'aider...
1) nombre de lignes "non vides" :
Sheets("Feuil2").Range("B1").Value = Cells.SpecialCells(xlCellTypeLastCell).Row ' "mot à mot" : Feuille2!CelluleB1 valeur = nombre de lignes "non vides"
2) nombre de lignes contenant xxx dans la colonne A :
Dim cpt as integer, derlig as integer, i as integer 'déclaration des variables
derlig = Sheets("Feuil1").Range("A65536").End(xlUp).Row ' stocke dans la variable derlig le n° de la dernière ligne "non vide"
For i = 1 To derlig
If Cells(i, 1).Value = "xxx" Then 'Si la cellule (ième ligne, 1ère colonne) contient xxx alors
cpt = cpt + 1 ' on ajoute 1 au compteur
End If ' sinon on fait rien et on continue
Next ' i suivant...
Sheets("Feuil2").Range("B2").Value = cpt ' une fois qu'il a fait toutes les lignes, nous renvoie le nbre de fois ou excel a "croisé" xxx dans la colonne A et l'inscrit dans la feuille2 B2
3) on verra après... Essaye déjà d'intégrer et d'adapter ces 2 codes et reviens nous...
On va tenter de t'aider...
1) nombre de lignes "non vides" :
Sheets("Feuil2").Range("B1").Value = Cells.SpecialCells(xlCellTypeLastCell).Row ' "mot à mot" : Feuille2!CelluleB1 valeur = nombre de lignes "non vides"
2) nombre de lignes contenant xxx dans la colonne A :
Dim cpt as integer, derlig as integer, i as integer 'déclaration des variables
derlig = Sheets("Feuil1").Range("A65536").End(xlUp).Row ' stocke dans la variable derlig le n° de la dernière ligne "non vide"
For i = 1 To derlig
If Cells(i, 1).Value = "xxx" Then 'Si la cellule (ième ligne, 1ère colonne) contient xxx alors
cpt = cpt + 1 ' on ajoute 1 au compteur
End If ' sinon on fait rien et on continue
Next ' i suivant...
Sheets("Feuil2").Range("B2").Value = cpt ' une fois qu'il a fait toutes les lignes, nous renvoie le nbre de fois ou excel a "croisé" xxx dans la colonne A et l'inscrit dans la feuille2 B2
3) on verra après... Essaye déjà d'intégrer et d'adapter ces 2 codes et reviens nous...
Excuse moi mais la première macro n'a pas l'air de marcher, tu veux bien l'expliquer un peu stp.
Dsl je suis débutant.
Dsl je suis débutant.
Autant pour moi la première marche bien, j'avai du mal à saisir mais c'est bon j'avai juste zapper un truc à modif, je vais test la deuxième. MERCI beaucoup
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Wahhhhou merci un max, ca marche et meme très bien!!!
Je me doute que l'autre macro est plus dur, dit moi si tu veux plus d'explication je vais essayer deux ou trois truc avec comee base ta deuxième macro.
Merci infiniment
Je me doute que l'autre macro est plus dur, dit moi si tu veux plus d'explication je vais essayer deux ou trois truc avec comee base ta deuxième macro.
Merci infiniment
Tu peux effectivement partir de la macro donnée ci dessus. Un peu comme ceci :
For i = 1 To derlig
If Cells(i, 1).Value = "xxx" Then
cpt = cpt + Cells(i, 1).Offset(0, 2).Value ' tu ajoutes au compteur la valeur contenue dans la cellule se trouvant 2 colonnes à droite de la cellule (i, 1)
End If
Next
Sheets("Feuil2").Range("B2").Value = cpt
Explication sur Cells(i, 1).Offset(0, 1) :
Cells(i, 1) pas de souci??? = cellule ligne i colonne 1 (A)
Offset(0, 1) [ligne, colonne] renvoie à la cellule située 0 ligne en dessous et 1 colonne à droite
Offset(2, 3) : renvoie à la cellule située 2 lignes en dessous et 3 colonnes à droite
Offset(-12, -30) : renvoie à la cellule située 12 lignes au dessus et 30 colonnes à gauche
For i = 1 To derlig
If Cells(i, 1).Value = "xxx" Then
cpt = cpt + Cells(i, 1).Offset(0, 2).Value ' tu ajoutes au compteur la valeur contenue dans la cellule se trouvant 2 colonnes à droite de la cellule (i, 1)
End If
Next
Sheets("Feuil2").Range("B2").Value = cpt
Explication sur Cells(i, 1).Offset(0, 1) :
Cells(i, 1) pas de souci??? = cellule ligne i colonne 1 (A)
Offset(0, 1) [ligne, colonne] renvoie à la cellule située 0 ligne en dessous et 1 colonne à droite
Offset(2, 3) : renvoie à la cellule située 2 lignes en dessous et 3 colonnes à droite
Offset(-12, -30) : renvoie à la cellule située 12 lignes au dessus et 30 colonnes à gauche
Wahoooo tu m'épates il me faut plus de temps pour tester et comprendre ta macro que toi pour la réaliser. Je suis épaté.
Maintenant on atteint le niveau le plus dur (ca va encore etre un jeu d'enfant pour toi à tout les coup mais bon....)
Je voudrai encore une adaptation de ta dernière macro. Je m'explique je voudrai que cette macro me calcul pour chaque ligne i, le produit des cellules Oi et Vi (je vais appeler la valeur OV ce sera plus facile à expliquer ) et que pour les y lignes non vides de mon tableau les valeurs soient sommées et là encore le résultats ira dans une cellule de la feuille 2 (on dira C1).
En gros OV ligne 0+ OV ligne 1+ OV ligne 2+....+OV dernière ligne non vide.
Merci encore de ton aide je vais pouvoir maintenant avancer et bosser sur ce que tu m'as donner.
Maintenant on atteint le niveau le plus dur (ca va encore etre un jeu d'enfant pour toi à tout les coup mais bon....)
Je voudrai encore une adaptation de ta dernière macro. Je m'explique je voudrai que cette macro me calcul pour chaque ligne i, le produit des cellules Oi et Vi (je vais appeler la valeur OV ce sera plus facile à expliquer ) et que pour les y lignes non vides de mon tableau les valeurs soient sommées et là encore le résultats ira dans une cellule de la feuille 2 (on dira C1).
En gros OV ligne 0+ OV ligne 1+ OV ligne 2+....+OV dernière ligne non vide.
Merci encore de ton aide je vais pouvoir maintenant avancer et bosser sur ce que tu m'as donner.
En fait je cherche à faire une macro qui va balayer toutes les lignes de mon tableauet qui fera:
-pour chaque chaque ligne "i" elle multiplira la valeur de la cellule "Oi" par la valeur de la cellule "Vi"
(pour plus de clarté j'appelerai le résultats de ce produit "OVi")
-et elle sommera les toutes les valeurs OVi des lignes non vides de mon tableau et écrira le résultat dans la cellule C1 de la feuille 2.
En gros une formule du style: SOMME de j=1 à j=dernière ligne non vide,[ des PRODUITs des valeurs contenues dans les cellules Oi et Vi] (i étant le numéro de la ligne balayée)
-pour chaque chaque ligne "i" elle multiplira la valeur de la cellule "Oi" par la valeur de la cellule "Vi"
(pour plus de clarté j'appelerai le résultats de ce produit "OVi")
-et elle sommera les toutes les valeurs OVi des lignes non vides de mon tableau et écrira le résultat dans la cellule C1 de la feuille 2.
En gros une formule du style: SOMME de j=1 à j=dernière ligne non vide,[ des PRODUITs des valeurs contenues dans les cellules Oi et Vi] (i étant le numéro de la ligne balayée)
Je vais tester ca sous toutes les coutures et je te dirai si tout va bien....mais d'après ce que je viens de voir tout devrais aller.
J'ai encore un leger soucis, il y a sur ma feuille 1 des filtres automatiques, existe t'il une possibilté pour les macros s'appliquent sur la feuille filtrées.
Ce que je dire par la:
imaginons que j'ai une feuille avec 1000 lignes non vides, si j'applique la toute première macro elle me dira que j'ai mille lignes non vides, mais si par exemple en utilisant un de mes filtres automatiques je n'ai plus que 100 lignes, comment faire pour qu'elle medise que je n'ai que 100 lignes?
J'ai encore un leger soucis, il y a sur ma feuille 1 des filtres automatiques, existe t'il une possibilté pour les macros s'appliquent sur la feuille filtrées.
Ce que je dire par la:
imaginons que j'ai une feuille avec 1000 lignes non vides, si j'applique la toute première macro elle me dira que j'ai mille lignes non vides, mais si par exemple en utilisant un de mes filtres automatiques je n'ai plus que 100 lignes, comment faire pour qu'elle medise que je n'ai que 100 lignes?