Rendre ce code générique

Bonjour à tous,

Alors là c'est purement pour mon envie de monté en compétence sur VBA, j'ai rendu mon projet en le limitant à 10 colonnes, c'est assez frustrant j'ai copier des lignes de code du coup mais j'étais limité dans le temps, ce que j'aurais voulu faire si j'avais eu plus de temps c'est rendre cette partie générique. Tant que j'ai une colonne faire ceci et cela. Je m'explique :

Set Plg = Range("A2:A" & dligA)

With Application.WorksheetFunction

[S1] = .Count(Plg) ' NB

If [S1] = 0 Then

[U1] = 0

Else

[U1] = .Average(Plg) 'Average

End If

End With

Utiliser ce code où s'il y a mieux, pour faire toutes les colonnes de A à l'infini tant que la colonne est rempli, donc par exemple si c'est pour la colonne B je voudrais que ce soit sa :

Set Plg = Range("B2:B" & dligB)

With Application.WorksheetFunction

[S2] = .Count(Plg) ' NB

If [S2] = 0 Then

[U2] = 0

Else

[U2] = .Average(Plg) 'Average

End If

End With

Réfléchissons ensemble à un meilleur moyen de rendre tout sa plus optimal.

Merci pour votre aide

Bonjour Filou93 le forum

bah tu veux optimiser mais dans tous les cas tu seras limité à la colonne R, puisque tu mets ton résultat en S1 et U1

et la boucle suivante tu auras en S2 eu U2

c'est cela que tu souhaites??

a+

Papou

Bonjour a toi,

Non en fait les données seront dans une autre feuille mais j'ai enlever "sheets ("Feuil1")..." avant de le mettre sur le forum je sais même pas pourquoi mdrrr

Oui voila c'est sa et la boucle suivante en S3 et U3 pour la colonne C et ainsi de suite

Re Filou93 le forum

voilà avec les 18 colonnes autrement je modifie

a+

papou

'Macro Faite par Pascal RICHARD Paritec le 16/06/2018
Option Explicit

Sub filou93()
    Dim aa, i&, col, li&
    With Feuil1
        .Columns("S:U").Clear
        col = .Cells.Find("*", , xlValues, , 2, 2, 0).Column
        ReDim aa(1 To col, 1 To 3)
        For i = 1 To col
            li = .Cells(Rows.Count, i).End(3).Row
            aa(i, 1) = Application.WorksheetFunction.Count(.Range(.Cells(2, i), .Cells(li, i)))
            If aa(i, 1) = 0 Then
                aa(i, 3) = 0
            Else
                aa(i, 3) = Application.WorksheetFunction.Average(.Range(.Cells(2, i), .Cells(li, i)))
            End If
        Next i
        .Cells(1, 19).Resize(UBound(aa), UBound(aa, 2)) = aa
    End With
End Sub

Re Filou93 le forum

bon alors les données seront ou???? et le résultat on le met ou ???

nom de la feuille dans les deux cas et je te modifie la macro que je t'ai envoyé

a+

Papou

Merci je viens de voir, je vais le tester, je prend dans la feuil1 et je le met dans la feuil2

Bonsoir filou93 le forum

un fichier avec ce que tu veux tu l'ouvres et tu cliques et tu me redis

bon je sais que cela ne servira à rien mais bon

a+

papou

10filou93-v1.xlsm (28.90 Ko)

Bonjour Papou,

Sa ne marche pas, j'ai essayer de comprendre le code c'est un peu compliqué, tu as réussi à le faire marcher chez toi? Moi dès le début il me met erreur

Bonjour Filou93 le forum

J’aime beaucoup Le ça marche pas!!!

Tu penses que je passe des codes que je ne teste pas???

Non je pense qu’helas Pour toi tu n’as pas là competence de le faire fonctionner!!!

Et cela c’est une certitude

Je t’ai envoyé un fichier avec les codes et la feuille de résultat, il suffit d’ouvrir Le

Fichier et de cliquer sur le bouton traiter

Tu penses pouvoir faire cela ????

Sans modifier le fichier et c’est sur que cela marche

Maintenant si tu avais joint un fichier mais c’est trop difficile je pense

A plus

Papou

Bonsoir Filou, paritec,

j'ai regardé le fichier de paritec du message d'hier à 17:47 ; sur mon PC, ça marche très bien : sur "Feuil1", je clique sur le bouton « Traiter » ➯ sur "Feuil2", ça met en colonne A la liste de toutes les colonnes (celles utilisées en 1ère feuille), et à droite, ça met : en colonne B le nombe d'items ; en colonne D la moyenne des items.

ça marche impeccable ! y'a juste une petite anomalie : sur la 1ère feuille, en A12, y'a cette formule : =SOMME(A2:A11) ; donc ça met la somme correcte : 270 ; le problème est que cette somme est prise comme nombre supplémentaire par la macro et fausse donc les 2 résultats de la colonne A : total 10 au lieu de 9 ; moyenne : 54 au lieu de 30 ; aussi, le remède est très simple : supprimer la formule de A12, puis cliquer de nouveau sur le bouton « Traiter ».

si ça marche pas sur le PC de Filou, c'est p't'être pa'c'que les macros sont désactivées ? si c'est autre chose, alors à préciser !

Filou, quand tu écris « ça ne marche pas », c'est bien trop vague ! faut indiquer précisément ce qui ne va pas ! idem pour : « il me met erreur » : laquelle ? y'en a plein ! et une erreur d'exécution, j'suppose, car j'ai eu aucune erreur de compilation (si ça avait été le cas : pas d'exécution possible !).

dhany

Bonjour,

Papou c'était pas un reproche, sa marche pas chez moi parce que je pense que j'ai pas la bonne version d'Excel sa bug dès le depart sa me le met en lecture seule, du coup pour la suite sa bug et sa me fait rien. Je te presente mes excuses si j'ai été insultant, j'attendais de rentrer pour réfléchir au code parce que grâce a toi je vais monter en compétence.

Merci Dhany je vais retester

« ça me le met en lecture seule » : tu veux dire qu'à l'ouverture du fichier, c'est le fichier qui est en lecture seule ? même si c'est le cas, le clic sur le bouton doit lancer la macro, qui fera son travail ; seulement, on pourra plus sauvegarder le fichier sous le même nom : faudra en choisir un autre.

si t'as pas la bonne version d'Excel : erreur de compilation, alors ? si oui : quelle ligne de code VBA est mise en jaune ?

dhany

Je viens de trouver c'est le bouton "Traiter" qui me posais problème j'ai creer un nouveau bouton, et la sa marche nickel, mais du coup toute a l'heure quand je pensais que ça ne marchais pas j'ai pris le code et je l'ai mis dans un nouveau fichier et la sa m'a fais une erreur sur la ligne : Feuil2.Cells.Clear pourtant j'avais bien nommé les feuilles

Je viens de trouver c'est le bouton "Traiter" qui me posais problème j'ai creer un nouveau bouton, et la sa marche nickel, mais du coup toute a l'heure quand je pensais que ça ne marchais pas j'ai pris le code et je l'ai mis dans un nouveau fichier et la sa m'a fais une erreur sur la ligne : Feuil2.Cells.Clear pourtant j'avais bien nommé les feuilles

bonne nouvelle, si maintenant ça marche nickel ! pour Feuil2.Cells.Clear le Feuil2 est le CodeName de la feuille, pas son nom ; et plus bas dans le code, il y a aussi : With Feuil2 ; dans les 2 cas, faut que le CodeName soit celui de la 2ème feuille (celle qui contiendra les résultats de la macro) ; ou alors, mets :

Worksheets("Feuil2").Cells.Clear et With Worksheets("Feuil2")

dhany

@Filou93

Je te propose ce fichier Excel (autre code VBA) :

6filou93-v2.xlsm (18.48 Ko)

Regarde "Feuil2", puis va sur "Feuil1" ; fais Ctrl e ➯ travail effectué

Alt F11 pour voir le code VBA, puis revenir sur Excel

Si besoin, tu peux demander une adaptation.

Merci de me dire si ça te convient.

dhany

Re bonjour Tous,

Aucun problème Filou ton message me fait plaisir, mais la macro tourne bien c'est l'essentiel.

a+

Papou

Rechercher des sujets similaires à "rendre code generique"