besoin d'aide sur vba pour une condition - VB/VBA/VBS - Programmation
Marsh Posté le 10-05-2005 à 17:54:46
If Not Range("E" & lignesel + 5).Comment.Text = "" Then 
 
Ce serai bon ?
Marsh Posté le 11-05-2005 à 09:16:01
J'ai peut-être répondu trop vite (matin diffffiiicccciiiiillleeeeee) 
 
J'ai un magnifique message d'erreur: 
Erreur d'éxécution '91' variable objet ou variable de bloc with non définie pour 
 
Dim lignesel As Long 
 
lignesel = ScrollBar1.Value 
        With Sheets("feuille1" ) 
        Range("E" & lignesel + 5).Select 
        If Not Range("E" & lignesel + 5).Comment.Text = "" Then 
        TextBox4.Text = Range("E" & lignesel + 5).Comment.Text 
        End If 
        End With 
 
 
Dans le cas si le prgm à la tête suivante, il affiche le même message d'erreur (la cellule 6 n'a pas de commentaire) 
 
        If Not Range("E" & 6).Comment.Text = "" Then 
        TextBox4.Text = Range("E" & 6).Comment.Text 
        End If 
 
ps: la variable lignesel me sert pour relier une multitude de textbox à une scrollbar 
 
une idée de génie pourrait me sortir d'affaire, 
merci d'avance
Marsh Posté le 11-05-2005 à 10:19:10
| Le_rameur a écrit : J'ai peut-être répondu trop vite (matin diffffiiicccciiiiillleeeeee)  | 
 
Salut, 
 
J'ai regardé très rapidement mais je me demande si ton Range a une syntaxe correct en fait... 
 
Mais un msgbox pour voir quel tête à ton Range. La syntaxe n'est peut-être pas correct pour Excel. 
Marsh Posté le 11-05-2005 à 10:36:42
Salut gfa, 
 
Excel accepte si j'introduis un commentaire dans cette cellule, 
le truc ce qu'il faut que excel arrive à faire la différence entre une cellule qui a un commentaire et une cellule qui n'a pas de commentaire. 
 
J'avais pensé que le problème vient de la définition de ma variable, puisque dès que j'introduis &lignesel même si mes cellules ont un commentaire, ça marche plus, snife... 
 
        If Not Range("E" & lignesel + 5).Comment.Text = "" Then  
        TextBox4.Text = Range("E" & lignesel + 5).Comment.Text 
 
Est-ce que le truc ne viendrait pas de la différence entre value et text? 
Mais je ne sais pas comment contourné ce pb
Marsh Posté le 11-05-2005 à 10:55:18
ton idée est bonne mais g tjrs ce message d'erreur 
 
je suis bloqué de chez bloqué 
 
bonne journée est perspective...
Marsh Posté le 11-05-2005 à 12:28:02
| Le_rameur a écrit : Salut gfa,  | 
 
Ben c'est bien ce que je disais... Si ton code fonctionne avec un Range défini "en dur" et plus lorsque tu ajoute ta variable lignesel, c'est que le problème vient de là! Regarde quelle tête à ton Range ("E" & lignesel + 5). Je pense que l'erreur vient de là... 
 
Essaie peut-être "E" & lignesel & "5" qui me paraît plus correct au niveau de la syntaxe. Je ne sais pas comment VB réagit si tu utilises l'opérateur d'addition avec un string (lignesel) et un integer (5). Je pense que si ta variable lignesel contient aussi un integer, il va bêtement faire l'addition. Par contre si elle contient de l'alphanumérique je sais pas trop ce que ça va donner... Et comme je ne sais pas ce que tu cherches à obtenir  
 
 
En tous les cas, met un MsgBox("E" & lignesel + 5) pour voir quelle gueule à ton Range. Tu seras peut-être surpris  
 
 
A+
Marsh Posté le 11-05-2005 à 13:37:18
Attention : Il n'additionnera rien du tout. Au contraitre, si lignesel vaut 20, il ira chercher la ligne 205.
Marsh Posté le 11-05-2005 à 13:53:39
en effet comme le dit Knakes si je marque ("E" & lignesel + 5) le msgbox m'indique plus du tout la bonne ligne. 
 
En revanche avec,  
        If Not Range("E" & 6).Comment.Text = "" Then  
        TextBox4.Text = Range("E" & 6).Comment.Text  
        End If  
le msgbox m'indique la bonne ligne. 
 
mais j'ai toujours l'erreur d'exécution '91' (variable objet ou variable de bloc with non définie) avec la ligne 
If Not Range("E" & 6).Comment.Text = "" Then en jaune. 
 
Et c grave le bordel qd je redefinis les variables avec la scrollbar
Marsh Posté le 11-05-2005 à 13:55:01
OUPS, trompé de ligne excusez-moi 
 
If Not Range("E" & lignesel + 5).Comment.Text = "" Then 
        TextBox4.Text = Range("E" & lignesel + 5).Comment.Text 
        End If
Marsh Posté le 11-05-2005 à 14:17:22
Corrige avec cela : 
 
If Not IsEmpty(Range("E" & lignesel + 5).Comment) Then 
... 
Marsh Posté le 11-05-2005 à 14:35:22
Ca plante car l'objet comment n'existe pas lorsqu'il ya pas de commentaire 
Je pense que tu peux faire plus simple, il ya moyen de recuperer directement tout les objets comment d'une feuil 
 
| Citation :   | 
 
 
si tu veux récuperer le contenu du commentaire : 
> CMT.comment.text 
 
si tu veux récuperer le contenu de la cellule : 
> CMT.parent.value 
 
si tu veux récuperer la ligne et la colonne de la cellule : 
> CMT.parent.row ou . column 
 
have fun 
  
 
Marsh Posté le 11-05-2005 à 14:38:09
tu vas me trouvé trop mauvais, mais je n'ai fais que décaler l'erreur 91 sur la 2° ligne. 
 
J'ai tenté plusieurs truc sans succés 
le prgm marche qd: 
        If Not IsEmpty(Range("E" & lignesel + 5).Comment) Then 
        TextBox4.Text = (Range("E" & 5).Comment.Text) 
        End If 
mais il n'affiche la valeur de la cellule E5 qui comporte un commentaire. 
 
Le prgm ne marche plus lorsque que je remplace 5 par 6 (la cellule 6 ne comporte pas de commentaire) 
 
le prgm ne marche plus qd 
        If Not IsEmpty(Range("E" & lignesel + 5).Comment) Then 
        TextBox4.Text = (Range("E" & lignesel + 5).Comment.Text) 
        End If 
 
Je ne sais pas ce que tu en pense mais je trouve ce lignesel +tot chiant ;-( 
Je sais pas j'ai épuisé le peu que je connaissais si tu as une idée n'hésite pas... 
Marsh Posté le 11-05-2005 à 19:14:36
Confirme le fait que: Ca plante car l'objet comment n'existe pas lorsqu'il ya pas de commentaire  
Outre l'idée, de traiter la collection, que propose Fusion_Sadam; essaie ceci: 
 
Dim YaComment As Boolean 
Dim LeComment As String 
Dim lignesel As Long 
 
lignesel = ScrollBar1.Value 
'... 
    On Error Resume Next 
    With Cells(lignesel + 5, 5) 
        LeComment = .Comment.Text 
        YaComment = .Comment.Parent.Address = .Address 
    End With 
    If YaComment Then 
        TextBox4.Text = LeComment 
        Else 
        MsgBox "Circulez..." 
    End If 
    On Error GoTo 0 
'... 
Marsh Posté le 12-05-2005 à 09:36:14
Merci beaucoup Dahlo, je viens de découvrir ta réponse (hier soir j'étais trop dépité pour retenter ce que je n'avais pas réussi en une journée, prise de tête totale). 
 
ça marche parfaitement après insertion dans mon prgm, tu me sors d'une grosse galère ;-) 
Merci encore 
 
A+
Marsh Posté le 12-05-2005 à 17:04:03
Sinon ca y'a aussi je crois qui marche très bien :  
 
TextBox4.Text = Range("E" & lignesel + 5).Comment.Text & " " 
 
C'est un peu du bidouillage mais au moins c pas prise de tete... et pas besoin de if ... ni de rien d'autre.
Marsh Posté le 10-05-2005 à 17:15:16
Re tout le monde,
 (d'où mon alias)
 (d'où mon alias) 
 SVP
 SVP 
Etant débutant en programmation ce qui vous paraît simpliste me semble bien compliqué.
J'ai une condition a réaliser et je ne suis pas arrivé au bout d'1 apm
Enfin je vous expose le truc prise de t^te en espérant qu'1 ame charitable veut bien m'aider
J'ai établi un userform permettant de visualiser les données contenu dans une base de données; Certaines données possèdent un commentaire (mais pas toutes!)
l'idée est de faire apparître le commentaire dans 1 textbox;
jusque là pas de pb
Mais si g une cellule qui n'a pas de commentaire alors g un message d'erreur
Donc la condition à traduire en VBA est
Si la cellule possède un commentaire alors
on affiche ce dernier dans le textbox
sinon le textbox reste vide
soit
if la cellule possède un commentaire then
TextBox4.Text = Range("E" & lignesel + 5).Comment.Text
else
TextBox4.Text=""
End if
est-ce qlq'1 arriverait à développer la petite condition en rouge
Merci d'avance,