|
Publicité | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Yuri Sakarov Inscription : mars 2010 Messages : 16 ![]() |
Bonjour,
Je souhaiterai faire un petit code VBA me permettant ceci : (considérons qu'en ligne 1 j'ai mes en-têtes) si la valeur dans la cellule A3 est identique à la cellule A2, alors vois la cellule A4, si celle ci est identique à la cellule A3, alors va a la cellule 5, etc etc, jusqu'à ce que "NON", la valeur dans la cellule A32 (par exemple) est différente de la cellule A31 --> ALORS dans ce cas : Code :
=SOMMEPROD(J2:J31;E2:E31)/SOMMEPROD(K2:K31;E2:E31) Ensuite, mettre cette cellule en format Pourcentage. Ensuite, dire au code de revenir à la cellule ou la valeur avait été indiquée comme "différente" ---> donc, dans notre exemple, la cellule A32, et là, recommencer la manoeuvre (boucler, donc) jusqu'à ce qu'une cellule soit vide. c'est à dire, à la fin de mon tableau général, qui fait 30 000 lignes ^^ je précise que la "longueur" des tableaux (dans notre exemple, le premier serait de A2 à K31 (A2:K31) ) est toujours (souvent) différente. Autrement dis, dans la deuxième "boucle" de recherche de valeur dans la colonne A, celle ci peut s'avérer "fausse" (le chiffre est différent) au bout de 15 lignes, ou de 300 lignes. A noter qu'il y en a 450 ("tableaux", diras-t-on) sur un total de 30.000 lignes... A noter aussi que j'ai coloré chacun de ces 450 tableaux afin de les différencier (c'est plus lisible) donc il est possible de les reconnaitre non pas que par la valeur dans la colonne A (qui se répète tout le long du tableau) mais aussi par la couleur, qui change. Enfin, c'est le même principe quand même quoi. Bref. Je sais que ça va sûrement vous paraitre facile, enfin je pense.. Mais pour moi là, je galèèèère et ce depuis 3 jours à m'arracher les cheveux et à lire des trucs sur les forums... Quelqu'un à une idée ? Merci à vous Dernière modification par Philippe JOCHMANS ; 08/03/2010 à 10h12. Motif: Ajout des balises codes : Sélection du code + # dans la barre d'outils de la fenêtre de rédaction des messages |
|
|
00
|
|
|
#2 |
|
Futur Membre du Club
![]() Inscription : juin 2009 Messages : 20 ![]() |
Bonjour
Tout d'abord je ne pense pas me tromper en disant que les test sur les couleur de cellule ne sont pas possible sur excel 2003. J'ai 2 questions : - Dans quelle cellule faut il afficher le resultat? - Faut il toujours se referencer aux lignes E,J et K pour la formule? (ou faut il prendre 4, 9 et 10 lignes plus bas?) Dernière modification par Galatane ; 08/03/2010 à 08h51. |
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Yuri Sakarov Inscription : mars 2010 Messages : 16 ![]() |
Dans la colonne L, juste à droite du "tableau". Pour le tableau 1 qui se fini en ligne 31 et commence en ligne 2, ce serait en L2. Et comme le Tableau 1 fini en ligne 31, le tableau 2 commence en ligne 32, donc automatiquement le resultat du tableau 2 sera en cellule L32.
Il faut donc effectuer la formule suivante : Code :
=SOMMEPROD(J2:J31;E2:E31)/SOMMEPROD(K2:K31;E2:E31) Code :
=SOMMEPROD(J32:J100;E32:E100)/SOMMEPROD(K32:K100;E32:E100) Dernière modification par Philippe JOCHMANS ; 08/03/2010 à 10h13. Motif: Ajout des balises codes : Sélection du code + # dans la barre d'outils de la fenêtre de rédaction des messages |
|
|
00
|
|
|
#4 | |
|
Candidat au titre de Membre du Club
![]() Étudiant Inscription : mai 2009 Messages : 51 ![]() |
Citation:
Avec un If Range("C" & ind).Interior.ColorIndex = "Le numéro de la couleur(exemple: 3 pour rouge)" Liste code couleurs. |
|
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Yuri Sakarov Inscription : mars 2010 Messages : 16 ![]() |
Auriez-vous une idée de boucle pour ça ??
Merci PS: merci pour la couleur. Faut soit passer par la couleur soit par la valeur contenue en colonne A (celle-ci se répète tout le long, et lorsqu'elle change, c'est la qu'on stoppe le tableau). Passer par la valeur me parait plus simple. Quelqu'un aurait une idée je vous prie ? Je récapitule ma demande brièvement : Faire un code qui, tout d'abord, incrémente chaque cellule contenue en colonne A tant que la valeur est la même. Une fois une valeur différente, on reconnait ainsi jusqu'où va le premier tableau. Ainsi, appliquer la formule précisée en haut (en prenant donc le contenu des colonnes SITUEES DANS LE TABLEAU défini juste auparavant) ; une fois le calcul fait, le résultat va dans la colonne L dans la première ligne du tableau ; PUIS, faire une BOUCLE pour que l'opération se répète JUSQU'A ce que une cellule vide soit rencontrée en colonne A. Si je suis pas clair, hésitez pas à poster un com, je surveille toute les demi heures !! Vu que c'est assez urgent, (très urgent en vérité), et que je galère sévère... j'ai des pistes, mais j'suis trop débutant... |
|
|
00
|
|
|
#6 | ||
|
Futur Membre du Club
![]() Inscription : juin 2009 Messages : 20 ![]() |
J'ai bien une idée, mais je n'arrive pas a trouver le bon code. Je debute aussi le vb en fait.
Code :
-le NB.si (Dcount, mais je n'ai pas réussi a le paramétrer correctement) -le sommeprod (Pour le moment, je n'ai pas encore eu le temps de chercher) |
||
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Yuri Sakarov Inscription : mars 2010 Messages : 16 ![]() |
MERCI C EST UN DEBUT.
PEUT ETRE QUELQU'UN POURRAIT COMPLETER ? Pour ce qui est du SOMMEPROD, la fonction je l'ai déjà écrite en haut, y'a pas à la changer.faut juste changer les "CHIFFRES" à l'intérieur correspondants aux lignes du tableau concerné. Code :
=SOMMEPROD(J2:J31;E2:E31)/SOMMEPROD(K2:K31;E2:E31) Code :
=SOMMEPROD(J32:J318;E32:E318)/SOMMEPROD(K32:K318;E32:E318) etc.. la taille des tableaux change tout le temps, le souci est là !! du coup, faut utiliser un repère (donc, le contenu de la cellule A) pour "délimiter" le tableau. Ensuite, une fois le tableau repéré, bah suffit de mettre le SOMMEPROD qui va avec quoi :p Tu vois ? Dernière modification par Philippe JOCHMANS ; 09/03/2010 à 06h53. Motif: Ajout des balises codes : Sélection du code + # dans la barre d'outils de la fenêtre de rédaction des messages |
|
|
00
|
|
|
#8 |
|
Futur Membre du Club
![]() Inscription : juin 2009 Messages : 20 ![]() |
C'est a cela que sert le Nb.si (sur excel).
Ca compte le nombre de cellule répondant au critère : Plage : colonne A Critère : A2 (pour le 1 er cycle) Et la boucle tourne jusqu'à trouver une cellule vide Dernière modification par Philippe JOCHMANS ; 09/03/2010 à 06h54. Motif: Ajout des balises codes : Sélection du code + # dans la barre d'outils de la fenêtre de rédaction des messages |
|
|
00
|
|
|
#9 |
|
Invité de passage
![]() Yuri Sakarov Inscription : mars 2010 Messages : 16 ![]() |
Tout à fait.
Mais du coup, que manque-t-il à ton code ??? |
|
|
00
|
|
|
#10 |
|
Futur Membre du Club
![]() Inscription : juin 2009 Messages : 20 ![]() |
La bonne façon d'écrire le nb.si en langage vba.
en effet, la formule s'appelle Dcount, mais je n'arrive pas à l'utiliser. |
|
|
00
|
|
|
#11 |
|
Invité de passage
![]() Yuri Sakarov Inscription : mars 2010 Messages : 16 ![]() |
mais ça me dit "erreur de syntaxe"
là : Code :
ligneb = Nb.si ( "A:A"; "A" & lignea) + ligneb + 2 Bon bon bon ... Dernière modification par AlainTech ; 07/05/2010 à 07h53. Motif: Fusion de 2 messages |
|
|
00
|
|
|
#12 | ||
|
Expert Confirmé Sénior
![]() |
Salut
Un petit truc, lorsque vous voulez utiliser une fonction interne d'Excel dans du code vba, il faut passer par l'objet worksheetfunction suivi du nom de la fonction en anglais Sinon pour ton probleme essai ce code Code :
Qwaz
__________________
MagicQwaz := Harry Potter la baguette en moins ![]() Le monde dans lequel on vit HammerFest Score PowerBall Gyroscope Green : 11847 |
||
|
|
00
|
|
|
#13 |
|
Futur Membre du Club
![]() Inscription : juin 2009 Messages : 20 ![]() |
Je l'avais bien vu ce truc la, mais il me manquait une info importante : les fonctions en anglais
|
|
|
00
|
|
|
#14 |
|
Candidat au titre de Membre du Club
![]() Étudiant Inscription : mai 2009 Messages : 51 ![]() |
Petite astuce pour avoir le code de tes formules compilé 'par Excel' ;
Tu fais Outils\Macro\Nouvelle Macro , la tu rentres dans la céllule de ton choix ta formule, tu arrête l'enregistrement en retournant dans le même menu. Et tu peux ensuite voir les formules de tes cellules qui sont en anglais, dans le code de ta macro. Si je trouve du temps je me pencherai sur ton problème. Cordialement, - Kahoèrre |
|
|
00
|
|
|
#15 | ||
|
Expert Confirmé Sénior
![]() |
Je vient de relire les posts précédents.
J'ai mis directement la valeur issue du calcul dans la cellule de la colonne L, je n'ai pas mis la formule dans la cellule. Si vous voulez placer un formule dans une cellule, il faut utiliser la propriété Formula de la cellule (+nom de fonction en anglais et des "," a la place des ";"), voila le code modifié pour faire cela en colonne M Code :
a++ Qwaz
__________________
MagicQwaz := Harry Potter la baguette en moins ![]() Le monde dans lequel on vit HammerFest Score PowerBall Gyroscope Green : 11847 |
||
|
|
00
|
|
|
#16 | |
|
Expert Confirmé Sénior
![]() |
Citation:
C'est vrai sauf si les couleurs sont issues d'une Mise En Forme Conditionnelle. A++ Qwaz
__________________
MagicQwaz := Harry Potter la baguette en moins ![]() Le monde dans lequel on vit HammerFest Score PowerBall Gyroscope Green : 11847 |
|
|
|
00
|
|
|
#17 | ||
|
Futur Membre du Club
![]() Inscription : juin 2009 Messages : 20 ![]() |
Autre solution (en fait, celle que je t'avais proposé au debut, mais correctement ecrite et corrigé)
Code :
Dernière modification par Galatane ; 09/03/2010 à 08h29. Motif: modification de la position de la cellule resultat |
||
|
|
00
|
|
|
#18 | ||
|
Expert Confirmé Sénior
![]() |
Salut
Par contre ton code oblige a ne jamais avoir 2 tableaux repérés avec la meme valeur si en colonne A tu te retrouves avec Code :
A++ Qwaz
__________________
MagicQwaz := Harry Potter la baguette en moins ![]() Le monde dans lequel on vit HammerFest Score PowerBall Gyroscope Green : 11847 |
||
|
|
00
|
|
|
#19 |
|
Futur Membre du Club
![]() Inscription : juin 2009 Messages : 20 ![]() |
Oui, mais n'ayant pas plus de précision, j'ai fais un truc simple. A voir donc si on peut retrouver plusieurs fois la même entrée.
|
|
|
00
|
|
|
#20 |
|
Invité de passage
![]() Yuri Sakarov Inscription : mars 2010 Messages : 16 ![]() |
Messieurs, bonsoir.
Tout d'abord, je tiens à vous remercier pour vous être penchés sur mon problème. Je vais essayer ces codes demain matin et vous en dire des nouvelles, vers 10h. Si il y a un souci, j'écrirai un nouveau post. Apparemment ça a l'air correct (enfin, le code de Qzerty... je comprend pas tout ! L'autre, +) ; j'essaierai les DEUX CODES dans tous les cas, pour vous dire. Par contre, deux choses : La première, qui s'adresse a Qzerty, comment ça la valeur arrive en colonne M ? dans le code d'avant ça allais en L c'étais ce que je voulais... un truc à dû m'échapper. Je re-précise, que le résultat doit s'afficher dans la première cellule du tableau, en colonne L. C'est-à-dire que si mes cellules identiques en colonne A vont de A378 à A429 et qu'ainsi mon "tableau" sur lequel doit s'effectuer ma fonction SOMMEPROD sera : A378:K429 ET le résultat sera placé en cellule ..... L378. Pour info, je répète aussi que mes cellules en colonne A se répètent plusieurs fois, par exemple : A278, A279, A280, A281 ... A307, A308. et à A309 par exemple ça change, et donc mon tableau du dessus commencera en A278 et finira en A308 ce qui veut dire A278:K308. il est vrai que sans le fichier sous les yeux c'est pas forcément forcément très évident :p Là je crois pas pouvoir faire plus clair :p Mais les codes m'ont l'air bien, enfin je pense, je suis loin d'être un confirmé, comme vous aurez pu le constater ! Moi, avec mon niveau, j'aurai pu le faire mais si les "tableaux" faisaient TOUS LA MEME TAILLE ! Là... j'en savais strictement rien. J'essaie vos codes demain. Je vous dis les réponses vers 10h donc. Merci à vous (j'espère seulement avoir été clair dans mon énoncé initial ! ) |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com