Syntaxe Offset avec variables

Bonjour à tous,

Voici un extrait de mon code :

Dim Ecart As Integer

Ecart = -2

ActiveCell.Offset(0, " & Ecart & ").Select

Cela entraîne une erreur d'exécution '13' : Incompatibilité de type.

Je vous remercie pour votre aide.

Bonjour Dach2,

C'est comme ceci :

Dim Ecart As Integer
Ecart = -2
ActiveCell.Offset(0, Ecart).Select

dhany

Attention : 2 colonnes avant ➯ ça plantera si ta cellule active est en colonne A ou B !

1) si la cellule active est en colonne B : colonne n° 2, donc .Offset(0, -2) ➯ colonne 2 - 2 = colonne 0 ➯ plantage !

2) si la cellule active est en colonne A : colonne n° 1, donc .Offset(0, -2) ➯ colonne 1 - 2 = colonne -1 ➯ plantage !

si ça plante pas sur ton PC dans ces 2 cas, c'est que tu as une version d'Excel avec une colonne -1 et une colonne 0 !

en VBA, pour l'offset, le 0 est facultatif ; donc tu peux l'enlever (en laissant la virgule), et ajouter un test de sécurité :

Sub Essai()
  Dim Ecart%: Ecart = -2
  If ActiveCell.Column > 2 Then ActiveCell.Offset(, Ecart).Select
End Sub

OU plus directement :

Sub Essai()
  If ActiveCell.Column > 2 Then ActiveCell.Offset(, -2).Select
End Sub

dhany

Bonjour Dhany

La cellule active avant le Offset est AN2.

Ca n'est donc pas ça.

Merci quand même, parce que ça aurait pu

Bonjour,

Et une fois rectifiée l'erreur de syntaxe, que comptes-tu faire ?

Select étant une opération à éliminer pour obtenir un code efficace, et ActiveCell devant si possible être évité pour rendre le code utilisable quelle que soit la situation de départ...

Cordialement.

edit :

La cellule active avant le Offset est AN2.

Ca n'est donc pas ça.

Là, tu ne sembles pas avoir perçu et compris la correction de Dhany !

Dach2 a écrit :

La cellule active avant le Offset est AN2

oui, mais tu ne peux pas en être sûr à chaque fois !

il suffit d'aller en colonne A ou B avant exécution de la macro et ça va planter !

relis mon message précédent, car je l'ai modifié : j'ai ajouté un test de sécurité.

d'autre part, comme le souligne MFerrand (salut), c'est mieux d'éviter le Select ; je ne l'ai pas précisé car si sélectionner la cellule en question est le but-même de l'opération (pour que l'utilisateur puisse y saisir une donnée ou autre), alors là oui, faut bien utiliser un .Select.

dhany

Pour t'aider davantage, on doit savoir quel travail tu veux faire au juste, et tu devrais joindre ton fichier (sans données confidentielles) ; mais inutile si c'était seulement pour sélectionner la cellule.

dhany

Merci Pour vos réponses.

En fait c'est la première réponse de Dhany qui résout mon problème. La syntaxe est bien :

ActiveCell.Offset(0, Ecart).Select et non ActiveCell.Offset(0, " & Ecart & ").Select

Nouveau sur le forum, je n'avais pas vu cette première réponse.

Encore merci.

@Dach2

Si par exemple le but de l'opération est de mettre en gras la cellule en question (toujours avec l'Offset) :

Sub Essai()
  With ActiveCell
    If .Column > 2 Then .Offset(, -2).Font.Bold = True
  End With
End Sub

et le tour est joué ! (et sans Select ➯ exécution du code plus rapide)


Edit : on s'est croisés ; pour passer un sujet en résolu, il faut cliquer sur le bouton qui est près du bouton (regarde le coin haut droit d'un message) ; tu sauras que tu as réussi quand tu verras un petit rond vert avec une coche, comme ceci :

sujet

toi seul peut le faire, car c'est toi qui a créé ce sujet, et ça permet de clôturer le fil de la discussion ; note qu'afficher le joli petit panneau ne passe pas un sujet en résolu (y'a pas de coche) : le panneau sert juste à demander à ceux qui ont oublié de le faire !

dhany

OK Dhanny.

C'est fait.

Génial ce forum.

Merci, et bonne continuation ! si besoin, n'hésite pas à créer un nouveau sujet !

dhany

Rechercher des sujets similaires à "syntaxe offset variables"