Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Macro

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

Famu

Guest
Comment faire pour qu'une macro prenne en considération la valeur d'une cellule et non son adresse comme si après ?

Range("B4").Select
 
B

Bulis

Guest
Bonjour Famu

Tu lances ton enregistreur de macro, nouvelle macro, tu donnes un nom à ta macro et tu va te possitionner sur la cellule B4 aprés tu ferme ta macro et voilà .

linda
 
U

utilsfr

Guest
Bonjour

Range("B4").Select 'Sélection de la cellule

Range("B4").value 'Valeur de la cellule

Range("B4").Address 'Adresse de la cellule


ROBERT rené
 
@

@+Thierry

Guest
Bonjour Famu, Linda, le Forum

En premier lieu Famu, je te conseille un petit tour vers le lien ci-dessous, qui te permettra de prendre en considération notre Charte...



Ensuite, je pense que Linda n'a pas bien saisi ta question, puisque l'enregistreur écrira la même chose que ce que tu proposé "Range("B4").Select"

Non pour retourner la valeur d'un cellule il suffit de faire ceci :

Sub Famu1()
MsgBox ActiveCell.Value
End Sub

Ou encore...
Sub Famu2()
MsgBox Range("B4").Value
End Sub

Ou Encore...
Sub Famu3()
Range("B10") = Range("B4")
MsgBox Range("B10") & " " & Range("B4")
End Sub


On notera qu'il n'est pas forcément obligatoire d'indiquer "Value" puisque c'est la propriété par défaut d'un "Object Range", mais je conseille tout de même de l'écrire pour les débutants, ça permets de se familiariser avec les différentes propriétés de chaque objet.

Bon Appétit
 
F

Famu

Guest
C'est OK, ça marche !
Voici une partie de ma macro où "val" est la valeur de la cellule active.

Dim val As String
val = ActiveCell.Value
Windows(val).Activate
Sheets("OPERAT.").Select

etc...

Merci encore,
Famu.
 
@

@+Thierry

Guest
Re Bonjour Famu

Et dans le cas où tu voudrais faire quelque chose de plus abouti....

Sub Testing()
Dim WB As Workbook
Dim WS As Worksheet
Dim TheBookName As String, TheSheetName As String

TheBookName = ActiveCell.Value
TheSheetName = ActiveCell.Offset(0, 1)

If Right(TheBookName, 4) <> ".xls" Then TheBookName = TheBookName & ".xls"

On Error GoTo ErrorHandler1
Set WB = Workbooks(TheBookName)

On Error GoTo ErrorHandler2
Set WS = WB.Worksheets(TheSheetName)
WS.Activate

Exit Sub

ErrorHandler1:
If Err = 9 Then
MsgBox ("le Fichier " & TheBookName & " n'est pas ouvert")
End If
Exit Sub

ErrorHandler2:
If Err = 9 Then
MsgBox "La feuille " & TheSheetName & " n'existe pas dans le classeur " & TheBookName
End If

End Sub

Explication :
Ce code va tenter d'activer le Classeur dont le nom se trouve dans la cellule active, si ce nom ne contient pas l'extention ".xls", il sera automatiquement ajouté.
Ce code par ailleurs va également tenter d'activer la feuille dont le nom se trouve dans la cellule à droite de la cellule active.

Si ces deux cellules ne retournent pas de valeur la procédure est stoppée.

En plus j'ai ajouté deux gestions d'erreurs :
1) si le nom en cellule active ne retourne pas un nom de classeur ouvert.
2) si le nom à droite de la cellule active ne retourne pas un nom de feuille valide dans le dit classeur.

En espérant t'éclairer, car le "Windows(val).Activate" n'est pas vraiment interressant pour travailler en multi-classeurs ouverts.

Bon Aprèm
@+Thierry
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…