If MsgBox et Then exit Sub : suivie d'une action
Bonjour à tous. Je rencontre un petit problème de syntaxe qui empêche mon code de fonctionner correctement à une étape bien précise.
Contexte : Dans une fiche de prospection (Feuille : Fiche ID) (que je réalise pour mon amie et non à des fins professionnelles), je récupère toutes les données d'une ligne d'un tableau présent sur une autre feuille (Feuille : Prospection) pour qu'elle puisse mettre à jour ces infos depuis la fiche en cours de consultation (sans avoir besoin de naviguer sur le tableau principal de la feuille Prospection.
Un des champs de cette fiche récupère le commentaire (note) clipsé sur la colonne P (dans la feuille Prospection) et à la ligne (Ligne)
Je récupère la note dans la cellule B5 et propose une cellule B14 pour la création d'une note de remplacement.
Une fois B14 renseigné avec un nouveau texte, il est possible de lancer la Macro AjoutCommentaire()
Tout fonctionne à l'exception d'un point de détail. Quand on lance la macro, l'idée est de rafraichir la cellule B5 pour afficher son nouveau contenu à jour. Ca marche
Ensuite, il faut vider la cellule B14 puisqu'on n'a plus besoin des infos qui viennent d'être envoyées dans la note.
Mon probleme se situe au niveau de la MsgBox qui s'ouvre quand rien n'est renseigné dans la cellule B14. Je préviens qu'il n'y a pas d'info et que par conséquent ça équivaut à une suppression du contenu de B5. Mais voila, si on valide cette Box, le contenu de B5 reste affiché (meme si la note d'origine est bien vidée).
Je ne parviens pas à intégrer correctement le code - Range("B5").calcultate - alors que pour les autres cas de figure tout fonctionne.
Voici mon code, j'ai mis des pointillés sur la zone qui pose probleme. Avez vous une idée ? Si toutefois vous avez eu le courage de me lire jusqu'au bout :)
Sub AjoutCommentaire()
'Rappel du numero de ligne sur laquelle la fiche ID doit pointer
Dim Ligne As Long
Ligne = Worksheets("Fiche ID").Range("I2").Value + 4
'------------------------------
'Demande de confirmation (C'EST ICI QUE J'AI UN PROBLEME)
If IsEmpty(Range("B14")) = True Then If MsgBox("Souhaites-tu vraiment vider le contenu de la note ?", vbOKCancel, "SUPPRESSION") = vbCancel Then Exit Sub
If MsgBox("Certaine de vouloir remplacer cette note ?", vbOKCancel, "Remplacement de la note") = vbCancel Then Exit Sub: Worksheets("Prospection").Range("P" & Ligne).AddComment: Worksheets("Fiche ID").Range("B5").Calculate: Exit Sub
'------------------------------
'Action d'envoi du nouveau commentaire dans la bonne cellule
Worksheets("Prospection").Range("P" & Ligne).ClearComments 'on vide d'abord le commentaire existant
Worksheets("Prospection").Range("P" & Ligne).AddComment 'on place le nouveau commentaire dans la colonne P et à la bonne ligne
Worksheets("Prospection").Range("P" & Ligne).Comment.Text Text:=Worksheets("Fiche ID").Range("B14").Value 'on récupère le texte de la celllule B14 de la fiche ID pour l'envoi
'Je recalcule (rafraichit) la cellule (B5) puis je vide la note en cours (B14) pour laisser un champ vide pour une nouvelle saisie éventuelle...
Worksheets("Fiche ID").Range("B5").Calculate
Worksheets("Fiche ID").Range("B14").Select
Worksheets("Fiche ID").Range("B14").Value = ""
' Je termine avec les propriétés de ma note (couleur, taille, police...)
End SubBonjour,
Si la feuille active est la feuille "Prospection", cela génèrera une erreur parce que suivante:
If IsEmpty(Range("B14")) = True Then If MsgBox("Souhaites-tu vraiment vider le contenu de la note ?", vbOKCancel, "SUPPRESSION") = vbCancel Then Exit Subil faut préciser à quelle feuille appartient la cellule B14, dans la macro modifiée ci-dessous , je l'ai affectée à la feuille "Fiche ID" (f1)
Votre code modifié:
Sub AjoutCommentaire()
'Rappel du numero de ligne sur laquelle la fiche ID doit pointer
Dim Ligne As Long
Dim f1 As Worksheet, f2 As Worksheet
Set f1 = Sheets("Fiche ID")
Set f2 = Sheets("Prospection")
Ligne = f1.Range("I2").Value + 4
'------------------------------
'Demande de confirmation (C'EST ICI QUE J'AI UN PROBLEME)
If IsEmpty(f1.Range("B14")) = True Then If MsgBox("Souhaites-tu vraiment vider le contenu de la note ?", vbOKCancel, "SUPPRESSION") = vbCancel Then Exit Sub
If MsgBox("Certaine de vouloir remplacer cette note ?", vbOKCancel, "Remplacement de la note") = vbCancel Then Exit Sub: Worksheets("Prospection").Range("P" & Ligne).AddComment: Worksheets("Fiche ID").Range("B5").Calculate: Exit Sub
'------------------------------
'Action d'envoi du nouveau commentaire dans la bonne cellule
Texte = f1.Range("B14").Value
With f2.Range("P" & Ligne)
.ClearComments 'on vide d'abord le commentaire existant
.AddComment 'on place le nouveau commentaire dans la colonne P et à la bonne ligne
.Comment.Text Text:=Texte 'on récupère le texte de la celllule B14 de la fiche ID pour l'envoi
End With
'Je recalcule (rafraichit) la cellule (B5) puis je vide la note en cours (B14) pour laisser un champ vide pour une nouvelle saisie éventuelle...
With f1
.Range("B5").Calculate
.Range("B14").Select
.Range("B14").Value = ""
End With
' Je termine avec les propriétés de ma note (couleur, taille, police...)
End SubCDlt
Merci beaucoup, j'ai corrigé aussi ce petit point de ciblage, même si je pensais que la feuille n'avait pas besoin d'être ciblée si on exécutait la macro en étant déjà dessus ?
Merci beaucoup en tous cas d'avoir pris le temps de restructurer mon code, au delà du fait que çà fonctionne, ça me fera vraiment progresser et prendre de bonne habitudes. Un grand merci, mon post n'était vraiment pas simple à lire :)
Belle soirée
J'ai trouvé le probleme ;)
sur la ligne qui définit la variable Texte avec Texte = f1.Range("B14").Value ---> c'est le ".value" que j'ai du remplacer par un ".text"
Merci en tous cas ;)
