-Je clique sur une cellule
-Je clique sur le bouton de la macro
-La macro écrit alors le chiffre 1 a partir de 2 cases vers la droite de ma cellule active, et sur 95 cases de long
J'arrive presque à le faire mais c'est pas encore sa, je suis sur que sa se fait en 2-3 lignes maxi, voir 1 ^^'
Dim pcs as long
For pcs = ActiveCell.Column + 2 to ActiveCell.Column + 97 (le +2 de base, majoré du 95)
ActiveSheet.cells(activecell.row, pcs).value = ......
next pcs
pour Orodreth
l'instruction offset est simple
tu décales la selection (ici, cellule active) d'un nombre de ligne et d'un nombre de colonnes
ex: cells(1,1).offset(2,5).select
ca sélectionne la cellule située à +2lignes et +5colonnes de A1: donc ici: F3 (si je ne dis pas de betises)
non pas obligé de sélectionner.. l'objet doit etre un range..après. tu en fais ce que tu veux
je ne suis pas allé voir l'aidre VBA, mais je suppose qu'elle décrit assez bien l'offset
Je reviens vers vous!!! J'aurais aussi aimé que la macro ne marche que si certaines cellules sont sélectionnées,
B12;B15;B17;B19;B21;B23;B25;B27;B29;B31;B33;B35
J'ai essayé sa:
Sub saisie_journée_complète()
' Petite macro qui permet de saisir des journées complètes automatiquement
If ActiveCell.Index = ("B12;B15;B17;B19;B21;B23;B25;B27;B29;B31;B33;B35") Then
Range(ActiveCell.Offset(0, 2), ActiveCell.Offset(0, 97)) = 1
Run ("envoi_au_tableauxbdd")
Else: MsgBox ("Vous ne cliquez pas sur une cellule valide")
Désolé de faire remonter le sujet mais j'ai beau essayé plusieurs technique je n'y arrive pas... Encore une fois je suis sur que sa tiens en 2-3 lignes mais je dois pas avoir la bonne syntaxe =\
En faites je ne veux pas que la macro puisse se déclencher à tout moment mais uniquement si la cellule sélectionné se trouve dans cette liste:
B12;B15;B17;B19;B21;B23;B25;B27;B29;B31;B33;B35
Non, pas 2/3 lignes là, c'est une suite de validation. Enfin ... Dans l'état actuel de mes connaissances. (Bref, si quelqu'un a mieux ...)
Une idée:
Code:
Dim b_Cellule_Valid as Boolean
b_Cellule_Valid = false
Dim ListeValide as string
ListeValide = "B12;B15;B17;B19;B21;B23;B25;B27;B29;B31;B33;B35"
Dim lesCellules() as string
lesCellules = split(ListeValide, ";")
Dim pcs_Valid as integer
for pcs_Valid = 0 to uBound(lesCellules)
Dim adresseCell as string
adresseCell = Replace(ActiveCell.address, "$", "")
if adresseCell = lesCellules(pcs_Valid) then
b_Cellule_Valid = True
Exit For
end if
next pcs_Valid
If b_Cellule_Valid Then
....TON CODE ICI ....
End if
C'est un peu plus complexe, mais ça me parait le plus simple à mettre en place
Sinon (après réflexion de ma part ... je suis con des fois), plus simple, en beaucoup moins de ligne:
Code:
Dim ListeValide as string
ListeValide = "B12;B15;B17;B19;B21;B23;B25;B27;B29;B31;B33;B35"
Dim adresseCell as string
adresseCell = Replace(ActiveCell.address, "$", "")
If InStr(1, ListeValide, adresseCell) > 0 Then
...TON CODE ICI ...
End If