Calcul de variable, selection dynamique et commentaire

Bonjour,

Je suis débutante en VBA et j'essaye d'ajouter dans le commentaire d'une cellule le résultat de cette cellule divisée par une autre cellule

J'arrive à le faire avec des valeurs fixes,:

Range("L1").Formula = "=O14/h14"
Dim valeur As String
valeur = Range("L1")
ActiveCell.AddComment
ActiveCell.Comment.Visible = False
ActiveCell.Comment.Text Text:=valeur

Par contre, ma cellule active et la cellule qui sera le quotient varie dans le Excel. J'ai pensé à la formule suivante:

ActiveCell.Comment.Delete

Dim tonnage As Integer
tonnage = ActiveCell.Value

Dim hectare As Integer
hectare = Range("h14")

Dim calcul As Double
calcul = tonnage / hectare

ActiveCell.AddComment
ActiveCell.Comment.Visible = False
ActiveCell.Comment.Text Text:=calcul

Je rencontre deux soucis:

1) la cellule H14 est fixe, je ne sais pas comment faire pour lui dire de prendre la cellule de la colonne H mais la ligne de la valeur active cell. Une sorte de index/equiv mais dans VBA

2) Même en mettant une valeur fixe ca affiche un blanc dans le commentaire, je suppose que ma déclaration de variable n'est pas bonne

Pourriez-vous m'aider svp ?

Cdt,

Marine

Bonsoir,

ActiveCell représente la cellule active s'il y en a qu'une de sélectionnée, sinon c'est la cellule active de la plage de cellule sélectionnée (dans ce cas elle est d'une couleur de sélection légèrement différente des autres). C'est un objet Range, on peut donc connaitre son numéro de ligne par ActiveCell.Row et la colonne par .Column : hectare = Range("h" & ActiveCell.Row)

Pour le point 2) peut-être que le "Text" du Comment attend un objet String alors que vous lui transmettez un Double : ajoutez un &"" au Double pour le transformer en String : ActiveCell.Comment.Text Text:=calcul&""

En espérant avoir compris et répondu à vos questions. Tout ceci sans avoir testé...

@ bientôt

LouReeD

Bonjour et bienvenue,

Essayez ceci :

' 1) calcul
Dim tonnage As Double
tonnage = ActiveCell.Value

Dim hectare As Double
hectare = Cells(ActiveCell.Row, Column("H:H"))    ' meme numéro de ligne, dans la colonne H

Dim calcul As Double
calcul = tonnage / hectare

' 2) écriture du commentaire
ActiveCell.Comment.Delete
ActiveCell.AddComment CStr(calcul)
ActiveCell.Comment.Visible = False

Voyez que dans AddComment on peut directement indiquer le texte à ajouter après un espace, c'est plus simple Range.AddComment method (Excel) | Microsoft Learn

Par ailleurs, pour convertir un nombre en chaine de caractères, il existe des fonctions/opérateurs un peu plus précis Fonctions de conversion de types (VBA) | Microsoft Learn. En l'occurence pour convertir "quelque chose", comme un nombre, en texte, on peut utiliser CStr(nombre).

J'ai également mis toutes vos valeurs dans la meme unité de nombre VBA (Double). Vous avez de la chance VBA est "intelligent" et vous renvoie une division complète meme en utilisant des entiers (Integer) comme diviseur et dividende, mais c'est une exception. Tous les autres langages de programmation vous feront une division entière/euclidienne, ainsi 3/2 = 1 et non 1,5. Je vous informe donc de la "bonne" pratique qui est d'utiliser les memes unités (Double = nombres à virgules) pour les divisions afin d'éviter ces erreurs.

Enfin, au niveau structurel, il est intéressant de séparer la partie calculatoire du code de la partie écriture dans Excel. Vous voyez ainsi on a 1) les calculs, 2) on s'occupe d'écrire le résultat dans le commentaire. Dans votre petit exemple ce n'est pas très important bien entendu, mais si par exemple il y a 50 lignes entre la suppression de l'ancien commentaire et l'écriture du nouveau… On s'y perd vite !

Bonjour,

Merci pour ces infos, j'ai réussi à rendre mon code actif en mixant vos deux idées. Ton code est parfait Saboh mais le débuggeur s'arrêtait sur Cells(ActiveCell.Row, Column("H:H")).

Du coup, j'ai fait :

Sub Nb_Ha()

' Nb_Ha Macro
' Touche de raccourci du clavier: Ctrl+i
'
On Error Resume Next
ActiveCell.Comment.Delete

' 1) calcul
Dim tonnage As Double
tonnage = ActiveCell.Value

Dim hectare As Double
hectare = Range("h" & ActiveCell.Row) ' meme numéro de ligne, dans la colonne H

Dim calcul As Double
calcul = tonnage / hectare

' 2) écriture du commentaire
ActiveCell.Comment.Delete
ActiveCell.AddComment CStr(calcul)
ActiveCell.Comment.Visible = False
End Sub

Ca marche très bien, tellement qu'on aimerait rendre l'excel disponible par plusieurs personnes et faire passer la macro sous googlesheet

Est-ce que vous connaissez un convertisseur en ligne pour passer de vba excel à vba googlesheet svp ? Ca n'a pas l'air d'être exactement le même langage

Rebonjour, félicitations si vous avez résolu votre problème.

N'oubliez pas de passer le fil en résolu (choisissez votre message comprenant le code fonctionnel et cochez le V en haut à droite).

Pour GoogleSheets, bien sur c'est adaptable. Je vous conseille de poser une nouvelle discussion sur le forum GoogleSheets. Si j'ai un peu de temps je regarderai, mais d'autres personnes pourront aussi vous aider.

La partie du forum dédiée à GoogleSheets : Google Sheets

Merci pour votre retour, je vais aller voir sur ce forum dédié.

Je ne peux malheureusement pas sélectionner mon propre message en tant que résolution, je vais donc mettre vos deux messages en "résolu" !

Bonne fin de journée :-)

Rechercher des sujets similaires à "calcul variable selection dynamique commentaire"