besoin d'aide sur vba pour une condition

besoin d'aide sur vba pour une condition - VB/VBA/VBS - Programmation

Marsh Posté le 10-05-2005 à 17:15:16    

Re tout le monde,
 
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  :cry: (d'où mon alias)
 
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  :ange: SVP
 
Merci d'avance,

Reply

Marsh Posté le 10-05-2005 à 17:15:16   

Reply

Marsh Posté le 10-05-2005 à 17:54:46    

If Not Range("E" & lignesel + 5).Comment.Text = "" Then
 
Ce serai bon ?


---------------
now : do nothing
Reply

Marsh Posté le 11-05-2005 à 08:42:03    

Oui, c'est bon! un grand merci ;-)

Reply

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

Reply

Marsh Posté le 11-05-2005 à 10:19:10    

Le_rameur a écrit :

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


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.

Reply

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

Reply

Marsh Posté le 11-05-2005 à 10:49:53    

au hasard: essayes avec null au lieu de ""

Reply

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...

Reply

Marsh Posté le 11-05-2005 à 12:28:02    

Le_rameur a écrit :

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...


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+

Reply

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.


Message édité par knakes le 11-05-2005 à 13:37:44

---------------
now : do nothing
Reply

Marsh Posté le 11-05-2005 à 13:37:18   

Reply

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

Reply

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

Reply

Marsh Posté le 11-05-2005 à 14:17:22    

Corrige avec cela :
 
If Not IsEmpty(Range("E" & lignesel + 5).Comment) Then
...


---------------
now : do nothing
Reply

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 :


Dim Cmt as Variant
 
For Each Cmt in thisworkbook.sheets(TaFeuil).comments
    ...
next


 
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
 :hello:

Reply

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...

Reply

Marsh Posté le 11-05-2005 à 14:39:34    

Fusion_Sadam je vais essayé ton idée ;-)

Reply

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
'...

Reply

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+

Reply

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.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed