fonction "ne rien faire" (debutante)

  • Initiateur de la discussion charlotte
  • Date de début
C

charlotte

Guest
Bonjour,
Je voudrais pouvoir changer la valeur d'une case seulement si une condition est remplie : j'avais pense a la fonction
IF(condition;changement de valeur;'ne rien faire'), mais comment justement demander a excel de ne rien faire (de garder la valeur qui etait precedemment dans cette case en fait) ?
Peut etre que IF n'est pas la bonne fonction a utiliser ?
Merci de votre aide,
Charlotte
 

Dan

XLDnaute Barbatruc
Bonsoir,

revoici ton fichier avec ce que tu demandes je crois.

1. tu remplis A1, A2 et A3 et sheet 1
2. clique sur le bouton ou appuie sur CTRL + A sur ton clavier. La macro se charge du reste.

Condition : il faut absolument que A1 de la sheet 1 corresponde aux cellule de la ligne 1 de la sheet 2.

Le code macro se trouve dans VBA (Via ALT + F11, puis cliquer sur module dans la fenetre de gauche)

Je remercie au passage Hervé pour l'aide dans ce post.

;) [file name=ifConditionDoChangement_v02_20050803002715.zip size=8858]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/ifConditionDoChangement_v02_20050803002715.zip[/file]
 

Pièces jointes

  • ifConditionDoChangement_v02_20050803002715.zip
    8.7 KB · Affichages: 88
C

charlotte

Guest
Merci Dan, c'est exactement ca !!!
si ca t embete pas trop, est-ce que tu pourrais juste m expliquer vite fait a quoi correspond ce que tu as ecrit car je n'ai jamais fait de macro, je ne sais pas ce que c est VBA, et comme je vais utiliser ce que tu as fait pour quelquechose de plus complique (pas plus complique mais avec beaucoup plus de cases), j'aimerais comprendre un peu plus...

Mes questions :
- 'dim i as byte'
- comment sait on de quelle feuille on parle qund tu ecris juste A1 : comment excel sait si c est A1 de la sheet1 ou de la sheet2
- ca correspond a quoi le i
- toute la formule pour le i...

merci beaucoup !!
charlotte
 

Dan

XLDnaute Barbatruc
Bonjour,

- Dim : instruction pour déclarer une variable - ici la variable est 'i'
- Byte : déclaration pour les nombres de 0 à 255
- A1 : Juste ta réflexion, il faut que tu sois positionnée sur la feuil1 pour que la macro tourne. Modifie le code comme décrit ci-dessous.
- i : il faut le définir puisque c'est une variable. Il est définit avec i = = .Cells(65536, c.Column).End(xlUp).Row + 1 (avec 65536 le nombre maxi de ligne dans une feuille)

Voici ce que tu dois rajouter à la macro :

Juste après Dim i as byte, tu ajoutes :

1. Dim c as Range : cette instruction a été omise mais doit être dans ta macro - elle définit la variable 'c' comme faisant partie d'une plage de cellule
2. Sheets('sheet1').Activate : instruction pour activer la feuille Sheet1

Attention que si tu modifies le nom des feuilles, tu devras également modifier le nom des feuilles dans ta macro.

;)
 
C

charlotte

Guest
Tu me sauves la vie, merci beaucoup...
Juste quelques questions encore :
1- quand il y a un point avec le nom de la fonction c'est qu on parle de la sheet2 (celle qui est dans with sheets ('...')), et quand il n y a pas de point, ca correspond a la sheet 1 (celle de sheet('...').Activate) ?
2- le .cell(i, c.column) = Range ('A2')
. cell(i+1, c.column) = Range ('A3')
n est pas dans la definition de i ?
on peut en mettre autant qu on veut (si il y a 30 cases a remplir au lieu de 2 on arrive a .cell(i+49, c.column) = Range ('A50') ?
3- a quoi correspond exactement i 0 .cells(65536, c.column).end(xlup).row + 1 ? c'est juste pour dire qu il y a 65536 lignes maximum dans une feuille ?
4- et enfin... a partir d une feuille excel, comment fait on et ou va t on pour ecrire ce genre de programmes et comment on le met en route ?

Merci mille fois,
Charlotte
 

Dan

XLDnaute Barbatruc
Réponse à tes demandes :

1. Oui

2. 'i' est défini par la première instruction 'i = .cells(65536....)'. Ensuite cette valeur est reprise dans les instructions suivantes pour pouvoir passer à la ligne suivante dans la sheet 2

3. i = .cells(65536, c.column).end(xlup).row + 1, comme je te l'ai dit avant, le 65536 est le nombre de lignes maximum d'une feuille. Là l'instruction demande de partir du bas de la feuille pour aller trouver la dernière ligne remplie en haut (xlup);soit la ligne 1). Le '+ 1' indique qu'il faut aller à la ligne suivante pour compléter.

4. tu peux utiliser l'enregistreur de macro automatique pour des choses simples (menu / outils / macro / nouvelle macro). Pour des choses comme celles-ci, il faut connaitre un peu de programmation et / ou se servir de l'aide VBA. Mais bon, là tu peux toujours trouver quelqu'un ici pour t'aider.

Espérant t'avoir aidé sinon pb n'hésite pas

;)
 

chris

XLDnaute Barbatruc
Bonjour
Je répond partiellement. Je n'ai pas regardé la code.

3 : cela trouve le numero de la dernière ligne utilisée dans ta feuille.
Si tu as 3 lignes la macro s'occupera automatiquement de tes 3 lignes.
Sans rien changer à ce code, elle traitera 1000 lignes s'il y en a 1000.

2 : je suppose qu'il y a une boucle dans le code :
en fonction de ce qui précède i vaut au départ 50 s'il y a cinquante lignes, puis 49, puis 48 etc afin de répéter l'action à chaque ligne.
Les adresses des cellules évoluent donc de ligne en ligne en fonction de i

1 : ta question est floue : en vba il y a des points partout !
Si c'est en début de ligne c'est pour éviter de répéter à chaque ligne la mention qui suit with

4 : il faut aller dans outils, macro, visual basic editeur.
Là on sélectionne le classeur concerné à gauche (si plusieurs sont ouverts) et soit on insère un module (clic droit) pour y mettre le code, soit on l'associe à un évènement de la feuille concernée (cela ne semble pas être ton cas).
Si tu veux te lancer dans VBA, regardes les didacticiels en ligne ou achètes un livre, sinon tu vas te perdre.

Bonne continuation
 

Dan

XLDnaute Barbatruc
Charlotte,

D'abord excuses pour la question 4 à la quelle je n'ai répondu que partiellement. Vois ce que Chris dit à ce sujet.

Pour ce qui est du bouton que tu n'as pas, je te rappelle que j'ai mis dans le fichier un raccourci CTRL + R qui déclenche la macro; de sorte qu'il te suffit d'utiliser ce raccourci plutôt que de faire tout le chemin que tu décris.

Pour placer un raccourci voici la procédure :

1. Menu / outils / macro / macro
2. dans la fenetre sélectionne la macro pour laquelle tu veux un raccourci
3. Clique sur Option
4. ajoute une lettre de ton choix

Rem : attention que cela ne fonctionne que si tu vois ta macro dans cette fenetre.

;)
 
C

charlotte

Guest
Bonjour,
La macro utilise des feuilles 1 et 2 qui sont dans le meme classeur. est-ce que c est possible que les feuilles ne soient pas dans le meme classeur ? j imagine qu alors il faut modifier
With Sheets ('Sheet2')
pour donner l adresse precise de la sheet2, mais je ne sais pas comment faire...
Merci,
Charlotte
 

Dan

XLDnaute Barbatruc
Bonjour Charlotte,

Là cela se corse un peu. Car de fait il va falloir changer le code.
Mais avant il faut savoir :

1. Uniquement la sheet 2 qui se trouve dans un autre classeur ?
2. Les classeurs sont-ils dans le même répertoire ?

;)
 
C

charlotte

Guest
Bonjour,
Sheet1 et Sheet2 sont dans deux classeurs differents, et pas vraiment dans le meme repertoire... Il y a un grand repertoire qui contient sheet1 et un sous-repertoire. Ce sous repertoire contient sheet2.
Si c est trop complique, je peux les mettre dans le meme repertoire... Par contre j aimerai bien qu ils soient dans 2 classeurs differents.
Merci beaucoup !
Charlotte
 
C

Calimero

Guest
Salut

je suis débutant dans vba et je me demandais s'il était possible d'ajouter à la macro ci-dessus une fonction 'index(....,equiv();equiv())
car j'ai le meme probleme que Charlotte avec les dates et que j'ai plusieurs lignes à remplir, mais aussi plusieurs feuilles à partir d'un onglet source qui contient toutes les données pour chaque feuille.

je vous remercie par avance

Calimero
 

Statistiques des forums

Discussions
312 493
Messages
2 088 950
Membres
103 989
dernier inscrit
jralonso