savoir se servir de offset

  • Initiateur de la discussion franck
  • Date de début
F

franck

Guest
bonsoir, j'ai essayé de me faire une petite macro avec un userform. La voici
private sub ok click()
worksheets(feuil1').select
range('a1').select
range('a2')= dte
range('b2')=prod
range('c2')=fourn
end sub

donc avec ceci je remplis un tableau et je voudrais mettre sur la ligne suivante de nouvelles informations. On m'a dit d'utiliser offset mais je débute dans les macros et je ne sais pas comment faire.

Merci de votre compréhension
 

pat1545.

XLDnaute Accro
Bonsoir;


offset = decaler en vBA, alors à partir de la cellule active, par exemple A1, offset(0,1).value, sera la valeur de B1, offset(4,3).value sera la valeur de la cellule située 4 lignes plus bas et 3 colonnes vers la droite.
Tu peux aussi avoir des offset négatif sauf, si bien sur tu est 'en bord' du tableau:
cells('B1').offset(-1,0) est incorrect car on parle alors de la cellule situé 1 ligne plus haut que 1, donc n'existe pas.
Voilà, attention offset est dans l'aide et tu y trouveras des infos intéressantes; autre remarque, offset ne déplace pas le curseur ou la cellule active mais va chercher l'info à partir de la cellule active, c'est différent.
Je passe le relais à qui le veux à présent

Patrick
 
M

Michou

Guest
bonsoir,
Voici la formule intégrée:

Private Sub ok_Click()
Sheets('feuil1').Activate
Range('a1').Select
Range('a1').Offset(1, 0).Value = 'fourn'
'se décaler sur la cellule A2
Range('a2').Offset(0, 1).Value = 'prod'
'se décaler sur la colonne B2
Range('B2').Offset(0, 1).Value = 'fourn'
'et ainsi de suite

End Sub
Bon courage
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonsoir Franck, Patrick, bonsoir le forum,

Bon alors je prends le relai Patrick, après tes excellentes explications.

Franck, il suffit d'indiquer à ton code de commencer sur la première cellule vide de la colonne A. Tu peux pour cela utiliser une variable et ensuite placer tes données dans le tableau en fonction de cette variable. Par exemple, en reprenant ton code de base :
(t'affole pas, si tu effaces tous les commentaires la macro fait à peine quelques lignes...)


Sub Macro2()
Dim li As Integer 'déclare la variable li
Sheets('Feuil1').Select 'sélectionne l'onglet 'Feuil1'

li = Range('A65536').End(xlUp).Row + 1 'définit la variable li

'li est le numéro de la première cellule vide de la colonne A
'pour le déterminer, on part de la dernière cellule de la colonne A : A65536
'et on atteint la dernière cellule éditée en remontant : .End(xlup)
'on obtient le numéro de ligne : .Row
'et on ajoute 1 pour avoir la cellule juste en dessous (la première vide)
'si toute la colonne A est vide, li renvoit 2 car on considère que
'A1 va contenir la désignation de la donnée

'si tu tiens absolument à commencer la la ligne 1 tu peux aussi faire :
'If Range('A1') = '' Then'si la cellule A1 est vide
' li = 1
'Else'sinon
' li = Range('A65536').End(xlUp).Row + 1 'définit la variable li
'End If


'place les donnéees dans le tableau en fonction de la variable li
Range('A' & li) = dte 'ou Cells(li, 1) = dte (qui revient au même)
Range('B' & li) = prod 'ou Cells(li, 2) = prod (qui revient au même)
Range('C' & li) = fourn 'ou Cells(li, 3) = fourn (qui revient au même)

'comme tu vois je n'utilise pas Offset dans cet exemple
'car pour l'utiliser il faut sélectionner une cellule de base
'et le fait de selectionner en VBA est a bannir au maximum car il ralentit
'considérablement le code (merci @+Thierry)

End Sub

Avec ce système tes données sont toujours placées sur la première ligne vide rencontrée.

Édition :
Ooops, bonsoir Michou on s'est croisés. Mais je crois que tu ne répondais pas excatement aux attentes de Franck...

Message édité par: Robert, à: 09/03/2006 00:07
 

Discussions similaires