Macro Recherche et Calcul de lignes

Résolu/Fermé
GTA54 Messages postés 414 Date d'inscription jeudi 23 février 2012 Statut Membre Dernière intervention 7 août 2019 - Modifié par GTA54 le 21/11/2012 à 14:33
Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 - 28 nov. 2012 à 14:44
Bonjour,

Je me tourne vers vous afin de demander votre aide. "HELP" !!!

J'ai créé un fichier Excel avec des macros, des formules etc et il ne me reste plus qu'une macro à faire (je ne pense pas que cela soit possible avec des formules) avant de terminer ce fichier sur lequel je travaille depuis pas mal de temps et où en ce moment je bloque complètement ...

Je vous explique le déroulement du fichier :

Il y a 4 onglets (A, B, C, D) qui sont remplis manuellement par une équipe.
Une autre équipe chargée d'exploiter le fichier va se servir de l'onglet "Synoptic" afin de choisir de quel(s) onglet(s) ils ont besoin. Ils vont donc remplir les colonnes de l'onglet "Synoptic" avec des numéros dans l'ordre où ils veulent que les onglets apparaissent ...
En cliquant sur "CREATE" (dans l'onglet Synoptic), l'onglet "Process analysis Synoptic" s'affiche avec le contenu des onglets (A, B, C ou D) l'un après l'autre.

En gros, on choisit ce qu'on veut sur Synoptic, la macro va rechercher ce qu'on veut et le colle dans l'onglet Process analysis Synoptic dans l'ordre désiré.

Maintenant (là où je bloque) :

Je voudrais que l'onglet "Balance" se remplisse automatiquement en fonction du contenu de l'onglet "Process Analysis Synoptic".

Je m'explique plus clairement :

L'onglet Process Analysis Synoptic est créé.

Dans cet onglet, il y a deux phases de cotations (les colonnes entre M et AD et les colonnes entre AH et AY). Je voudrais que la macro aille recherché le nombre de ligne présente sur cet onglet (une ligne = là où il y a un résultat compris entre 0 et 1000, le reste n'est que mise en page).

Donc je veux que la macro compte le nombre de lignes présentes et qu'elle calcule ensuite le nombre de ligne où le résultat est supérieur à 60 (toujours dans l'onglet Process Analysis Synoptic)
Ensuite, elle affichera le résultat du nombre de lignes total dans l'onglet Balance en D23 et le nombre de ligne supérieur à 60 dans l'onglet D24.


Voilà ce que je recherche ! Le reste je pense pouvoir m'en sortir tout seul, il me faut juste cette macro ...

En espérant que c'est possible ! Merci d'avance !

Fichier joint : http://cjoint.com/data3/3KvkyKDxKD2.htm

Si ce n'est pas possible, faites moi le savoir ! Merci





"Mais comment faire,
Comment lui dire,
Comment lui faire voir,
Ma planète,
Artificielle..."

-M-
A voir également:

5 réponses

Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
21 nov. 2012 à 16:17
je regarde à cela ce soir
a+
0
GTA54 Messages postés 414 Date d'inscription jeudi 23 février 2012 Statut Membre Dernière intervention 7 août 2019 27
21 nov. 2012 à 17:05
Merci beaucoup ! ;)
0
Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
21 nov. 2012 à 21:17
On ne peut pas dire que c'est très clair:
D'un côté, du dis: une ligne = là où il y a un résultat compris entre 0 et 1000, le reste n'est que mise en page
et plus bas, à deux reprises, tu parles de ligne où le résultat est supérieur à 60
En plus de cela, je pense que je perd mon temps alors que je pourrais aider une autre personne qui ne joue pas avec mes pieds, car tu parles de résultats, mais je ne vois pas où je vais bien pouvoir tiré des résultats. Si tu parles des résultat se trouvant dans l'encadré "D. BULB ASSEMBLY ON A TUBE / Assemblage..." entre la colonne "N" et "AC", je pense qu'on ne peut pas se fier à un numéero de lignes, car l'encadré juste avant contient beaucoup de lignes vides !!!

Pour résumé, tu me fait un topo plus précis avec des données se trouvant toujours à la même place ou au moins des données se trouvant à des endroits dont on peux expliquer avec certitude pourquoi elles à ces places.
Actuellement, je ne voit pas comment résoudre ton problème.

Si on a des données situées dans une colonne "x", on peut faire un compteur de ligne + un compteur de ligne répondant à tel ou tel critère avec ou sans macro
0
Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
22 nov. 2012 à 07:27
La seule chose dont je suis certain, c'est que, dans l'onglet "Balance", tu veux:
en "D23", le nombre total de ligne (inclus les lignes vident ?)
en "D24", le nombre de ligne correspondant au nombre de ligne:
- soit : dont le total est compris entre 0 et 1000
- soit : dont le total est supérieur à 60
0
GTA54 Messages postés 414 Date d'inscription jeudi 23 février 2012 Statut Membre Dernière intervention 7 août 2019 27
22 nov. 2012 à 08:57
Je me suis mal exprimé je vais faire un exemple détaillé :

Admettons que je sois un utilisateur du fichier.

Je veux avoir dans l'onglet "Process Analysis Synoptic" les données de l'onglet A et du D l'un après l'autre.
J'ouvre donc l'onglet Synoptic, je met un 1 devant ADHESIVE ASSEMBLY et un 2 devant BULB ASSEMBLY. Je clique sur CREATE. L'onglet Process Analysis Synoptic s'ouvre avec les données de l'onglet A suivies des données de l'onglet D (vous pouvez vous même faire un exemple, cela doit fonctionner).

Maintenant que j'ai l'onglet Process analysis Synoptic avec ce que je veux dedans, je souhaite que l'onglet BALANCE se remplisse tout seul en fonction de l'onglet Process Analysis Synoptic que je viens de créer.

La macro doit :

1) _ Compter le nombre de lignes totale présente dans l'onglet Process analysis Synoptic.
1 ligne = 1 opération (j'ai du supprimer les infos pour secret pro) mais pour être plus clair pour vous 1 ligne = lorsque en colonne Q on a un résultat compris entre 1 et 1000 (colonne Risk Priority Index) on compte 1 (ensuite c'est une addition)
Dans l'exemple du dessus (onglets A et D), je compte 11 lignes (ce que la macro doit trouver).

2) _ Une fois que l'on a compter le nombre de lignes, on inscrit ce résultat dans l'onglet Balance en D23. (c'est le nombre total de lignes présentes)

3) _ Ensuite il faut que je sache combien de lignes (dans les 11 lignes précédentes) ont un résultats supérieurs à 60. La macro va donc faire pareil qu'au point 1 ci avant sauf que le résultat ne devra pas être compris entre 1 et 1000 mais entre 61 et 1000.
Toujours dans l'exemple, je compte 6 lignes avec un résultat supérieurs à 60 dans la colonne Q.

4) _ Pareil que l'étape 2, on inscrit ce résultats (6 lignes) dans l'onglet Balance en D24.

Donc en récapitulatif.

Pour un exemple avec les onglets A et D.
Je créé ma page avec l'onglet Synoptic en mettant 1 devant Adhesive Assembly, je mets un 2 devant Bulb assembly. Click sur CREATE. L'onglet Process analysis s'affiche avec le contenu mis bout a bout des onglets A et D.

Jusqu'ici ca fonctionne, maintenant je veux exploiter Process analysis synoptic et remplir Balance. La macro va compter le nombre de ligne d'info sur Process analysis synoptic

Compter 1 ligne lorsqu'il y a 1 valeur comprise entre 1 et 1000 dans la colonne Q. Ce qui fait donc 11 lignes pour notre exemple. Afficher 11 dans l'onglet Balance en D23.

Faire pareil pour le 2ème comptage avec comme critère non pas une valeur entre 1 et 1000 mais une valeur comprise entre 61 et 1000.
Afficher (pour notre exemple) 6 dans l'onglet Balance en D24.


J'espère avoir été clair. N'hésitez pas à me soumettre vos interrogations. J'ai vraiment besoin de cet outil....

Merci d'avance.
0
Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
22 nov. 2012 à 09:25
toutes les macros doivent avoir accès à l'onglet "Sheets("presentation")"
or cet onglet (peut-être d'un autre classeur ne s'y trouve pas
moralité .. macros impossible à exécuter sans modifier le code .. d'où l'impossibilité de voir comment ça marche !
Je comprend bien qu'il ne doit pas y avoir de données confidentielles dans les documents émis en dehors du boulot, mais je ne peux pas tester.
Ce qu'il me reste à faire, c'est vous faire part de mes idées. Ce sera à vous de les mettre en oeuvre et de les tester.
0
GTA54 Messages postés 414 Date d'inscription jeudi 23 février 2012 Statut Membre Dernière intervention 7 août 2019 27
22 nov. 2012 à 09:49
Je suis d'accord.

Je vais vider le fichier excel complètement et vous le transmettre. Il y aura l'onglet présentation comme ça.

Merci !
0
GTA54 Messages postés 414 Date d'inscription jeudi 23 février 2012 Statut Membre Dernière intervention 7 août 2019 27
22 nov. 2012 à 09:55
http://cjoint.com/data3/3Kwj3xU4ZRk.htm

Voici le lien !
0
GTA54 Messages postés 414 Date d'inscription jeudi 23 février 2012 Statut Membre Dernière intervention 7 août 2019 27
22 nov. 2012 à 14:55
J'ai encore une question Heliotte.

J'ai bien compris votre macro et j'aimerais savoir comment je pourrais insérer des conditions.

Par exemple, ne compter que les lignes >60 qui n'ont pas de "X" dans la colonne BA.

CAD que je compte toute les lignes et les reporte dans l'onglet balance. Ensuite je compte toutes les lignes >60 puis je compte le nombre de lignes >60 mais avec un "X" dans la colonne BA. Enfin, je reporte le résultat de la soustraction Nombre de lignes >60 - Nombre de ligne >60 et avec un "X".

Redites moi si c'est possible. Merci ! =)
0
Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
22 nov. 2012 à 23:23
Oui, c'est tout à fait possible.
Dans le code que je vous ai donné, il y a deux conditions imbriquées.
Il suffit d'imbriquer une troisième conditions.
La première, plus grand que "0" = ok .. on passe à la deuxième.
La deuxième, plus grand que "60" = ok .. on passe à la troisième.
Et la troisième condition devra vérifier que la cellule de cette même ligne mais à la colonne "JeMetsDesX" contient un "x". Si oui, on incrément une variable ; si non, on passe à la ligne suivante:
Le code:
If (Worksheets("Process Analysis Synoptic").Cells(i, 53).Value = "x") Then
                NbTotalLigneSup60 = NbTotalLigneSup60 + 1
End If
Cells(i, 53) : la cellule de la ligne "i" et de la colonne "AB"
"x" : le caractère x
Voilà
Pensez à mettre "résolu", merci
Cordialement
0
GTA54 Messages postés 414 Date d'inscription jeudi 23 février 2012 Statut Membre Dernière intervention 7 août 2019 27
23 nov. 2012 à 08:40
Merci beaucoup !

Je le mettrai en résolu ce soir dès fois que j'ai encore quelque chose à vous demandez dans la journée ... ^^

En tout cas merci beaucoup, vos réponses sont claires, nettes et précises !
0
Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
23 nov. 2012 à 09:19
Pas de problème
Bonne journée
0
GTA54 Messages postés 414 Date d'inscription jeudi 23 février 2012 Statut Membre Dernière intervention 7 août 2019 27
23 nov. 2012 à 09:55
Re Bonjour Helliote,

J'ai voulu refaire la même démarche mais pas avec la cotation en colonne 17 ! Je choisi la colonne 38 maintenant.
La macro s'exécute mais rien ne s'affiche. :/

Vous savez ce qui se passe ?

Je me demande si ce n'est pas à cause de la ligne :

DerniereLigne = Worksheets("Process Analysis Synoptic").Range(Chr(81) & "65536").End(xlUp).Row ' Q=81

Mais je n'arrive pas à l'interpréter.
0
Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
23 nov. 2012 à 10:11
Bonjour GTA54,
Pouvez-vous déposer le fichier (après avoir supprimer les données sensibles) ici "cjoint.com" et me laisser le lien dans votre prochain message, merci.
0

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

Posez votre question
GTA54 Messages postés 414 Date d'inscription jeudi 23 février 2012 Statut Membre Dernière intervention 7 août 2019 27
27 nov. 2012 à 10:48
Bonjour Helliote,

J'ai un soucis avec une nouvelle macro.

Elle s'exécute parfaitement bien pour la partie 10 >= S >= 8 mais en ce qui concerne la partie 4 >= S >= 1 ce n'est pas bon...

Voici la macro :

Sub BalanceRSA()
Dim NbTotalLignes As Long, NbTotalLigneSup60 As Long, NbTotalLigneInf36 As Long
Dim NbTotalLignesSeverity As Long, NbTotalLignesSeverity1 As Integer
Dim DerniereLigne As Long
Dim i As Long
'
' repères
NbTotalLignes = 0
NbTotalLigneSup36 = 0
NbTotalLignesSeverity = 0
NbTotalLigneInf36 = 0
NbTotalLigneSup100 = 0
NbTotalLigneInf100 = 0

NbTotalLignesSeverity3 = 0
NbTotalLignesSeverity2 = 0


DerniereLigne = Worksheets("Process Analysis Synoptic").Range(Chr(89) & "65536").End(xlUp).Row ' Y=89
'


' calcul pour 10 >= Severity > 8
For i = 1 To DerniereLigne
If (Val(Worksheets("Process Analysis Synoptic").Cells(i, 25).Value) > 0) Then
NbTotalLignes = NbTotalLignes + 1
End If
Next i

For i = 1 To DerniereLigne
If (Val(Worksheets("Process Analysis Synoptic").Cells(i, 25).Value) > 36) Then
NbTotalLignesSeverity = NbTotalLignesSeverity + 1
If (Val(Worksheets("Process Analysis Synoptic").Cells(i, 22).Value) > 8) Then
NbTotalLigneSup36 = NbTotalLigneSup36 + 1
End If
End If
Next i

For i = 1 To DerniereLigne
If (Val(Worksheets("Process Analysis Synoptic").Cells(i, 25).Value) < 36) Then
NbTotalLignesSeverity1 = NbTotalLignesSeverity1 + 1
If (Val(Worksheets("Process Analysis Synoptic").Cells(i, 22).Value) > 8) Then
NbTotalLigneInf36 = NbTotalLigneInf36 + 1
End If
End If
Next i

' calcul pour 1 >= Severity >= 4

For i = 1 To DerniereLigne
If (Val(Worksheets("Process Analysis Synoptic").Cells(i, 25).Value) > 100) Then
NbTotalLignesSeverity2 = NbTotalLignesSeverity2 + 1
If (Val(Worksheets("Process Analysis Synoptic").Cells(i, 22).Value) < 5) Then
NbTotalLigneSup100 = NbTotalLigneSup100 + 1
End If
End If
Next i

For i = 1 To DerniereLigne
If (Val(Worksheets("Process Analysis Synoptic").Cells(i, 25).Value) > 36) Then
NbTotalLignesSeverity3 = NbTotalLignesSeverity3 + 1
If (Val(Worksheets("Process Analysis Synoptic").Cells(i, 22).Value) < 5) Then
NbTotalLigneInf100 = NbTotalLigneInf100 + 1
End If
End If
Next i
'

' écrire les résultats
Worksheets("balance").Cells(22, 24).Value = NbTotalLignes

' 10 >= S >= 4
Worksheets("balance").Cells(26, 25).Value = NbTotalLigneSup36
Worksheets("balance").Cells(27, 25).Value = NbTotalLigneInf36

Worksheets("balance").Cells(30, 25).Value = NbTotalLigneSup100
Worksheets("balance").Cells(31, 25).Value = NbTotalLigneInf100
'Worksheets("balance").Cells(34, 25).Value = NbTotalLignesSeverity

End Sub



En espérant que tu arrives à comprendre. Merci !
0
Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
27 nov. 2012 à 11:37
Bonjour GTA54,
Vous le placez à quel endroit ce code, dans une feuille (quel nom) ou dans un module ?
Qu'est-il censé faire ?
0
GTA54 Messages postés 414 Date d'inscription jeudi 23 février 2012 Statut Membre Dernière intervention 7 août 2019 27
27 nov. 2012 à 12:08
Alors dans un module. Il se lance avec un bouton.

Son déroulement :

Dans l'onglet Process Analsysis Synoptic, la macro recherche le nombre de ligne supérieures à 0 en colonne "Y".
Elle inscrit le résultat dans l'onglet Balance.

Ensuite elle recherche le nombre de lignes supérieures à 36 en colonne "Y" ET comprises entre 8 et 10 en "V". Elle inscrit le résultat dans l'onglet Balance.

Maintenant même tâche que la ligne précédente avec valeur comprises entre 8 et 10 en "V" MAIS cette fois avec les valeurs inférieures à 36 en "Y". Résultat dans balance.

Ainsi de suite avec :

Valeurs comprises entre 4 et 8 en "V". Et valeurs supérieures à 50 en "Y". Puis valeurs inférieures à 50 en "Y". Résultats dans Balance

Enfin, Valeurs comprises entre 1 et 4 en "V". Et valeurs supérieures à 100 en "Y". Puis valeurs inférieures à 100 en "Y". Résultats dans Balance.

En espérant avoir été clair. =)

Merci d'avance.
0
Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
27 nov. 2012 à 16:27
Bonsoir GTA54,
J'ai modifié complètement le code, car, par rapport à la semaine passée, mon analyse à changer. Principalement à cause des données élémentaires et des calculs à effectuer.
J'ai mis le fichier (texte) ici : http://cjoint.com/data/0KBqwBvzFFR.htm .. à coller dans un module. La seule chose que je n'ai pas changer est le nom de la procédure.
Veuillez vérifier que les données 'résultats' sont copiées au bon endroit .. A cet égard, j'ai ajouté tous les commentaires nécessaire à cette vérification.
Cordialement
0
GTA54 Messages postés 414 Date d'inscription jeudi 23 février 2012 Statut Membre Dernière intervention 7 août 2019 27
28 nov. 2012 à 09:13
Bonjour Heliotte !

Merci pour la macro mais cela ne fonctionne pas... Je vous laisse le fichier ici http://cjoint.com/12nv/BKCjlpb7pA5.htm

Ce sera plus simple à comprendre ce que je recherche et vous pourrez vérifier par vous même ce qui ne va pas.. Parce que personnellement je bloque car votre macro avait l'air de coller parfaitement avec ce que je cherchais.

J'espère que cela va pouvoir se faire !

En attendant merci !

Cordialement
0
GTA54 Messages postés 414 Date d'inscription jeudi 23 février 2012 Statut Membre Dernière intervention 7 août 2019 27
28 nov. 2012 à 09:28
Le but étant de remplir le tableau qui se trouve dans l'onglet "Balance".

La colonne "Initial" est traitée par rapport aux données en colonnes V et Y.
La colonne "Revision after action" est quant à elle remplie grâce aux données en colonnes AQ et AT.

Je ne vous avais pas demandé cela puisque ça aurait été un copier-coller de la macro en V et Y, mais puisque vous avez le fichier, je préfère que ce soit vous qui vous penchiez dessus tout de suite. Cela évitera de vous redéranger encore et encore .... =S

Cordialement.
0