Je souhaite faire une synthèse de résulat avec exel. (je débute dans l'utilisation de macro !!)
Je m'explique : j'ai un onglet qui renseigne une personne et son nombre de jour travaillé
j'ai un autre onglet qui calcul son salaire (brut et net) avec le detail des retenus.
Faire un bouton pour que, une fois qu'on a remplis le nombre de jour, le salaire brut et net s'affiche dans les case voisine des lors qu'on appuis sur le bouton. l'avantage est ne pas surcharger une feuille.
Mon problème, est que je voudrais généralisé... si j'ai plusieurs personnes....
Donc j'ai mis une boucle if. La cellule Bn represente le nombre de jour travaillé par l'opérateur en ligne n.
mais voila...cela ne marche pas !
Beurk. Quel code horrible. Heureusement que tu précises que tu es novice.
Si je ne l'ai pas dit 100 fois sur ce site, je ne l'ai jamais dit :
PAS DE SELECT/SELECTION
(Au lieu de Truc.Select / Selection.Machin, écrire directement Truc.Machin)
PAS DE COPY/PASTE/CUTCOPYMODE=OFF
(Utiliser Copy Destination:=...)
Il n'y a pas de clause ALORS dans ton SI mais il y a une clause SINON. Donc inverse la clause de test. (L3)
Range et Cells renvoient tous deux un objet Range. Pas besoin de les imbriquer (L3)
Tu changes la page courante (L6, 12, 16, 20). Bref, au début, faut pas se tromper de feuille au départ. De toute façon, ce n'est pas beau. Au lieu de ça, indique pour chaque Range ou chaque Cells la feuille d'appartenance.
Je réécris ton code sans les SELECT/SELECTION/ACTIVETRUC et en précisant quelles cellules de quelles feuilles je considère :
Code :
Sub Macro()
n = 2
If Sheets("feuille indéterminée" ).Cells(B, n).Values <> 0 Then
Lignes 5 et 6, je me dis qu'il y a un problème d'inversion des feuilles. Où est définie la variable B ? Que contient-elle ? Pourquoi la ligne 16 ?
Je réécris ton code sans les COPY/PASTE, en faisant l'inversion pour les lignes 5 et 6 précédentes et en considérant que la feuille de départ est le sommaire :
Code :
Sub Macro()
n = 2
If Sheets("sommaire" ).Cells(B, n).Value <> 0 Then
J'ai modifié les nom de cellule et j'ai rajouté des ".Value" pour les cellules ou je voulais avoir que la valeur et non la formule. J'ai toujours (je l'avais aussi avant) une "erreur 1004" qui serais dans la 3ème ligne
Code :
Sub Macro9()
n = 2
If Sheets("sommaire" ).Cells(B, n).Value s /*<-- parasite!*/ <> 0 Then
dans chacune des cellules, il y a un chiffre. Disons que je prends une information dans la case BN du sommaire, je l'envoie dans la cellule B4 du "detail paye", puis je reprends les informations des cellules du "detail paye" pour les ramener dans le sommaire.
pour moi, une boucle if est en fait "if..then...endif"
Cells(B,n), c'est la cellule Bn de mon tableau... Cette case de mon tableau est déjà remplie. Elle contient déjà un chiffre...
La ligne 7, c'est pour dire qu'une fois les opérations fini, on recommence l'operation... l'opération faites sur la cellule B2, on la recommence avec B3 jusqu'à avoir une valeur Bn=0 (ou neant ?).. c'est dailleur peut etre la mon problème...
mais je ne sais pas....
mais même en enlevant la ligne 7, mon programme ne marche pas.
pour moi, une boucle if est en fait "if..then...endif"
Spa une boucle, c'est une "condition de branchement"
Citation :
Cells(B,n), c'est la cellule Bn
Ben non. Non, et re-non. Relis l'aide de Cells. Attention à l'ordre des paramètres (Ligne, Colonne) et B n'est pas un nom de colonne mais une variable que tu n'as pas initialisée. Je suppose que tu as oublié de mettre l'option explicit. C'est mal. (Voir l'aide d'excel sur le mot Option).
La line 4, tu es sûr de ne pas avoir inversé les noms de feuilles !
La ligne 7 ! Mais où vois-tu la boucle pour faire remonter ton programme à la ligne 2 ? C'est sans doute ça ton problème.
En français, tu veux faire :
n = 2 Tant Que la cellule (n, 2) n'est pas vide Faire La cellule (n, 2) de la feuille "sommaire" reçoit la valeur de la cellule B4 de la feuille "detail" La cellule (n, 3) de la feuille "sommaire" reçoit la valeur de la cellule B6 de la feuille "detail" La cellule (n, 4) de la feuille "sommaire" reçoit la valeur de la cellule B10 de la feuille "detail" Incrémenter n de 1 Fin Tant Que
pour moi, une boucle if est en fait "if..then...endif"
Spa une boucle, c'est une "condition de branchement"
Citation :
Cells(B,n), c'est la cellule Bn
Ben non. Non, et re-non. Relis l'aide de Cells. Attention à l'ordre des paramètres (Ligne, Colonne) et B n'est pas un nom de colonne mais une variable que tu n'as pas initialisée. Je suppose que tu as oublié de mettre l'option explicit. C'est mal. (Voir l'aide d'excel sur le mot Option).
La line 4, tu es sûr de ne pas avoir inversé les noms de feuilles !
La ligne 7 !
Mais où vois-tu la boucle pour faire remonter ton programme à la ligne 2 ? C'est sans doute ça ton problème.
En français, tu veux faire :
n = 2
Tant Que la cellule (n, 2) n'est pas vide Faire La cellule (n, 2) de la feuille "sommaire" reçoit la valeur de la cellule B4 de la feuille "detail"
La cellule (n, 3) de la feuille "sommaire" reçoit la valeur de la cellule B6 de la feuille "detail"
La cellule (n, 4) de la feuille "sommaire" reçoit la valeur de la cellule B10 de la feuille "detail"
Incrémenter n de 1
Fin Tant Que
YAPLUKA traduire ça en VB
Code :
n = 2
Do While Sheets("sommaire" ).Cells(B, n).Values <> 0
EDIT: Bordel je suis rouillé en VBA / Macro... j'ai mis next
Message édité par magellan le 16-10-2007 à 16:44:31
---------------
Le destin a voulu que Magellan périsse sous les coups de JeFaisPeurALaFoule...
Puis tel Jésus il revint plus fringuant que jamais http://jefaispeuralafoule.blogspot.com JE SUIS CONTRE LE 85*85
pour reprendre ce que je veux faire en français :
n = 2
Tant Que la cellule (n, 2) n'est pas vide Faire
La cellule B4 de la feuille "detail" reçoit la valeur de la cellule (n, 2) de la feuille "sommaire"
La cellule (n, 3) de la feuille "sommaire" reçoit la valeur de la cellule B6 de la feuille "detail"
La cellule (n, 4) de la feuille "sommaire" reçoit la valeur de la cellule B10 de la feuille "detail"
Incrémenter n de 1
Fin Tant Que
je définis mes objets : cellule (n,2) signifie la cellule B n
cellule (n, 2) de la feuille "sommaire" = chiffre
cellule B6 de la feuille "detail" = formule (donc je veux que le chiffre resultant, d'ou le ".Values" )
cellule B10 de la feuille "detail" = (donc je veux que le chiffre resultant, d'ou le ".Values" )
Réponds à toutes les questions s'il te plaît ! J'insiste : A la ligne 4, es-tu sûr de ne pas avoir inversé les noms des feuilles ?
Bon, alors. Un S parasite s'est glissé quelque part. (Et le pire, c'est que c'est moi qui l'ai mis ) En fait, c'est LA valeur, donc il faut écrire VALUE sans s à la fin.
Cells renvoie une seule cellule dont on précise les coordonnées avec des entiers. C'est ce dont tu avais besoin.
Range renvoie une plage de cellules dont on précise les coordonnées avec une chaîne de caractère plus facile à comprendre. Mais une plage de cellules peut se réduire à une seule cellule. Un singleton en langage ensembliste (aimes-tu les maths ? )
Cells (n, 2) c'est la cellule Bn. Pour construire cette chaîne, on peut écrire :
Par ailleurs, Sheets est la collection de tous les onglets d'un classeur. Par principe, tu ne considères que les feuilles de calcul, un sous-ensemble des onglets. La collection des feuille de calcul est Worksheets.
tout ca va vraiment finir par ressembler à du MAPLE !! lol
oui j'aime bien les maths....
j'ai du mal a trouver des tutoriaux pour excel, car l'aide qu'il propose dans excel est pas top !
avant de vous submerger de question, tu as peux etre des suggestions de tuto à lire ?