Afficher un commentaire sur des cellules de différentes colonnes

Ecureuil31

XLDnaute Nouveau
Bonjour à tous,

Je suis un nouvel arrivant sur votre forum et après avoir lu pas mal de vos discussions, je me suis décidé à m'inscrire.
Je débute dans le VBA et j’ai besoin de votre précieuse aide. Je travaille sur un fichier où je dois afficher le libellé d’un code quand le curseur est sur la cellule.

Pour le moment j’ai créé une macro me permettant d’afficher le libellé de codes se trouvant sur la même colonne.
Le problème est que dans mon fichier je dois répartir ces codes sur plusieurs colonnes. A l'heure actuelle, je n’ai trouvé comme seul moyen, de réutiliser cette macro pour chaque colonne...
Je me doute qu’il doit y avoir une possibilité de créer une boucle permettant d’éviter cette redondance. J’ai essayé avec For…Next mais cela n’a rien donné…

Je vous joins un fichier simplifié résumant la situation :

Je vous remercie par avance pour votre aide:D
 

Pièces jointes

  • Exemple.xlsm
    17.9 KB · Affichages: 35
  • Exemple.xlsm
    17.9 KB · Affichages: 47

Dranreb

XLDnaute Barbatruc
Re : Afficher un commentaire sur des cellules de différentes colonnes

Bonsoir.

Comme ça je dirais :
VB:
Public Sub majCommentaires()
Dim Cel As Range, TE(), TR(1 To 500), N As Long
TE = Feuil1.UsedRange.Value
For N = 2 To UBound(TE, 1)
   TR(TE(N, 1)) = TE(N, 2)
   Next N
Feuil2.[B2:D4].ClearComments
For Each Cel In Feuil2.[B2:D4]
   N = Cel.Value
   If Not IsEmpty(TR(N)) Then Cel.AddComment TR(N)
   Next Cel
End Sub
 

Ecureuil31

XLDnaute Nouveau
Re : Afficher un commentaire sur des cellules de différentes colonnes

Merci beaucoup Dranreb pour votre réponse qui fonctionne parfaitement. Étant novice, je ne suis pas certain d'avoir compris tout le code (malgré quelques recherches) et j'aimerais comprendre certains points...


Bonsoir.

Comme ça je dirais :
VB:
Public Sub majCommentaires()
Dim Cel As Range, TE(), TR(1 To 500), N As Long 'TE et TR sont les deux tableaux ? TR va de 1 à 500 colonnes ?

TE = Feuil1.UsedRange.Value 'Peut-on remplacer usedrange par currentregion si plusieurs tableaux figurent sur la même feuille ?
For N = 2 To UBound(TE, 1) 'Ubound permet de connaître la dimension de TE c a d 9 lignes ?

   TR(TE(N, 1)) = TE(N, 2) ' Je dois avouer que je ne comprends pas cette partie...
   Next N

Feuil2.[B2:D4].ClearComments
For Each Cel In Feuil2.[B2:D4]
   N = Cel.Value
   If Not IsEmpty(TR(N)) Then Cel.AddComment TR(N)' Si j'ai bien compris cette condition vérifie que la cellule n'est pas vide, et on y insère un commentaire ?
   Next Cel
End Sub

Désolé d'être un peu "poussif" dans la compréhension..
 

Dranreb

XLDnaute Barbatruc
Re : Afficher un commentaire sur des cellules de différentes colonnes

Oui, TE et TR sont deux tableaux. TR n'a qu'une dimension qui va de 1 à 500 postes.
CurrentRegion est une propriété de Range, non de Worksheet. À cette restriction près toute expression Range convenable peut faire l'affaire.
Oui, UBound(T, d) permet de connaître l'indice maxi de la dimension d d'un tableau T.
Alors… TE(N, 1) c'est bien un numéro, n'est-ce pas. Alors il peut être utilisé comme indice pour le tableau TR afin de retrouver instantanément le texte TE(N, 2) qu'on lui attribue d'après ce numéro ensuite récupéré d'ailleurs.
Oui, la méthode AddComment ne supporte pas la valeur Empty comme argument. Donc je teste pour éviter le plantage pour le numéro 5 auquel aucun texte n'a été attribué.

Je ne vous trouve pas poussif du tout: vous avez bien compris plus des 3/4 tout seul !
 
Dernière édition:

Ecureuil31

XLDnaute Nouveau
Re : Afficher un commentaire sur des cellules de différentes colonnes

Merci pour vos explications ! Mais on dirait que le quart manquant, me fait défaut...

J'ai essayé d'appliquer ce code à mon fichier réel mais je rencontre un message d'erreur : "L'indice n'appartient pas à la sélection"
Tout d'abord j'ai réalisé que dans mon exemples mes codes n'étaient pas en format texte alors que c'est le cas dans mon vrai fichier (je souhaite qu'ils restent en format texte) Du coup j'ai utilisé le current region et cela à l'air de fonctionner car dans la fenêtre variables locales TE contient bien les données du tableau liste code.

Je suppose donc que le problème se pose sur la définition de TR...


PS : en fonds jaune, ce sont les dimensions exactes des tableaux de mon fichier réel. En vert, l'exemple de base.
 

Pièces jointes

  • Exemple V2.xlsm
    19.5 KB · Affichages: 39
  • Exemple V2.xlsm
    19.5 KB · Affichages: 42

Dranreb

XLDnaute Barbatruc
Re : Afficher un commentaire sur des cellules de différentes colonnes

Bonjour.
Mêmes s'ils sont en String mais toujours composés de moins de 6 chiffres environ, il serait toujours possible de les utiliser comme indice pour un tableau qui doit être dimensionné en conséquence.
VB:
Public Sub majCommentairesboucle()
Dim Cel As Range, TE(), TR(5200 To 5975), N As Long
 TE = Feuil1.[A2].CurrentRegion
For N = 2 To UBound(TE, 1)
    TR(TE(N, 1)) = TE(N, 2)
    Next N
 Feuil2.[B2:D4].ClearComments
For Each Cel In Feuil2.[B2:D4]
    N = Cel.Value
    If Not IsEmpty(TR(N)) Then Cel.AddComment TR(N)
    Next Cel
End Sub
Si ce n'est pas applicable if faut utiliser un Dictionary.
VB:
Public Sub MàJCommentairesDico()
Dim Cel As Range, TE(), TR As Dictionary, Code
TE = Feuil1.[A2].CurrentRegion
Set TR = New Dictionary
For N = 2 To UBound(TE, 1)
    TR(TE(N, 1)) = TE(N, 2)
    Next N
Feuil2.[B2:D4].ClearComments
For Each Cel In Feuil2.[B2:D4]
    Code = Cel.Value
    If TR.Exists(Code) Then Cel.AddComment TR(Code)
    Next Cel
End Sub
C'est un type d'objet dont il faut demander à VBA d'aller chercher la définition dans le fichier scrun.dll
Sa désignation de référence est "Microsoft Scripting Runtime"
 
Dernière édition:

Ecureuil31

XLDnaute Nouveau
Re : Afficher un commentaire sur des cellules de différentes colonnes

Je n'avais pas compris que TR( 5 to 500) faisait référence aux codes. Voila pourquoi je n'y arrivais pas...

Je vais maintenant traduire le code dans mon fichier réel et voir si tout fonctionne bien.

En tout cas merci beaucoup pour votre aide, j'ai bien appris.
 

Ecureuil31

XLDnaute Nouveau
Re : Afficher un commentaire sur des cellules de différentes colonnes

Voici le code de mon fichier réel :


VB:
Public Sub AffichageCommentaires()
Application.ScreenUpdating = False

Dim Cel As Range, TE(), TR(1 To 6000), N As Long
  TE = CodePresta.Range("A2").CurrentRegion
For N = 2 To UBound(TE, 1)
     TR(TE(N, 1)) = TE(N, 2)
     Next N
  AnalysePresta.[O3:U18].ClearComments
For Each Cel In AnalysePresta.[O3:T18,U3:U8]
     N = Cel.Value
     If Not IsEmpty(TR(N)) Then Cel.AddComment TR(N)
    Next Cel
End Sub

Tout fonctionne bien quand je sélectionne tous les codes (à s'avoir 103 au total) mais si l'utilisateur ne sélectionne que 16 codes par exemple s'affichant sur le champs [O3:O18], le reste des colonnes devront afficher du vide ou bien un tiret. Le problème c'est que N = Cel.value ne fonctionne plus car la cellule contient un tiret ou du vide... Comment peut-on contourner cette erreur qui est normal finalement ? Utilisation de Go To ?
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
311 725
Messages
2 081 943
Membres
101 849
dernier inscrit
florentMIG