rendre applicable à toute cellule une macro enregistrée sur une cellule

DOMIMARE

XLDnaute Nouveau
Je veux récupérer le contenu (texte) d’une cellule pour le mettre dans le commentaire de cette cellule. J’ai enregistré une macro que je nomme « verscomm”. Elle marche bien pour la cellule F8 (don’t le contenu est “Montaigne” et, pour laquelle j’ai créé, au paravant, un commentaire vide. Que faire pour la transformer en macro fonctionnant dans n’importe quelle cellule ? Il doit s’agir d’une astuce très simple de programmation.
Merci de toute aide
Domi
********************************
Sub verscomm()
'
' verscomm Macro
'
' Touche de raccourci du clavier: Ctrl+n
'
ActiveSheet.PasteSpecial Format:="Texte Unicode", Link:=False, _
DisplayAsIcon:=False, NoHTMLFormatting:=True
Range("F8").Comment.Text Text:="Montaigne"
Range("G9").Select
End Sub
***************************************************
 

jecherche

XLDnaute Occasionnel
Re : rendre applicable à toute cellule une macro enregistrée sur une cellule

Bonjour,

À tester :

Code:
Sub verscomm()
'
Dim X As String
On Error Resume Next
 X = ActiveCell.FormulaR1C1
  ActiveCell.AddComment
  ActiveCell.Comment.Visible = False
  ActiveCell.Comment.Text Text:=X
  ActiveCell.Value = ""
  
End Sub

Jecherche
 

DOMIMARE

XLDnaute Nouveau
Re : rendre applicable à toute cellule une macro enregistrée sur une cellule

Merci beaucoup de votre aide,
Je débute et j'ai donc besoin de quelques conseils basiques.
La macro semble marcher dans toute cellule. C'est ce que je voulais!
Mais:

---> Comment faire pour que votre macro marche pour un ensemble de cellules sélectionnés. Ce serait exactement ce dont j'ai besoin! Est-ce beaucoup plus compliqué?

--> Elle ne fait pas tout à fait ce que je voulais puisqu'elle enlève le contenu de la cellule pour le mettre dans le commentaire. Comment faire pour qu'elle ne vide pas la cellule.? (question purement théorique mais importante pour mes progrès)
--> Enfin si vous avez le temps, pouvez-vous m'expliquer ce que vous avez fait.
En tout cas un grand merci déjà pour votre aide.
DOMIMARE
 

DOMIMARE

XLDnaute Nouveau
Re : rendre applicable à toute cellule une macro enregistrée sur une cellule

Surtout ne répondez pas à la deuxième question tout à fait stupide: il suffit bien évidemment de supprimer la ligne:
ActiveCell.Value = ""
Mais les deux autres m'intéressent beaucoup
Bonne journée
DOMIMARE
 

jecherche

XLDnaute Occasionnel
Re : rendre applicable à toute cellule une macro enregistrée sur une cellule

Bonjour,

Espérant le tout conforme...
Code:
Sub verscomm()
  
   'ne pas oublier l'indentation qui facilite la lecture du code.
 
  ' définir les variables
Dim X As String
Dim MaPlage1 As Range
Dim MaPlage2 As Range

    ' déterminer la/les plages où les actions seront possibles
Set MaPlage1 = Range("A1:G15,A22:G35")
Set MaPlage2 = Range("B11:B85,B33:H85")
 
    ' active le traitement dans la/les plages déterminées
If Not Intersect(Union(MaPlage1, MaPlage2), Selection) Is Nothing Then
 
    ' place le contenu de la cellule dans la variable X
  X = ActiveCell.FormulaR1C1
  ActiveCell.AddComment  'ajoute l'objet commentaire à la cellule
  ActiveCell.Comment.Visible = False  'le commentaire sera masqué
  ActiveCell.Comment.Text Text:=X   'place le contenu de X dans l'objet commentaire
    
  ActiveCell.Value = ""  ' ceci vide la cellule
'  ActiveCell.Value = ""  ' ceci ne vide pas la cellule car la ligne est en commentaire
 
End If
 
End Sub


Jecherche
 

DOMIMARE

XLDnaute Nouveau
Re : rendre applicable à toute cellule une macro enregistrée sur une cellule

Merci infiniment du temps que vous m'avez déjà accordé.
En fait, il y a peut-être une petite erreur dans cette dernière version car elle ne "traite" réellement que la 1ère cellule sélectionnée et elle-seule.
D'autre part serait-il possible de choisir la zone en la sélectionnant avec la souris avant de lancer la macro
Merci de votre patience
DOMIMARE
 

jecherche

XLDnaute Occasionnel
Re : rendre applicable à toute cellule une macro enregistrée sur une cellule

Bonjour,

Je cite : "Je veux récupérer le contenu (texte) d’une cellule pour le mettre dans le commentaire de cette cellule"

Si je comprends bien le post #6, tu aimerais sélectionner une plage de cellule et le contenu de chacune des cellules de la plage sélectionnée passera en commentaire ... que ce soit une cellule ou 100 cellules. Est-ce bien cela ?


Je cherche
 

DOMIMARE

XLDnaute Nouveau
Re : rendre applicable à toute cellule une macro enregistrée sur une cellule

Oui c'est cela. Ce qui marche parfaitement pour une cellule (macro de 23h09 hier soir) j'aimerais le faire pour plusieurs cellules sélectionnées sans doute avant de lancer la macro. Chaque cellule de la plage sélectionnée verrait son contenu placé dans son commentaire.
Merci de ton aide
Domimare
 

jecherche

XLDnaute Occasionnel
Re : rendre applicable à toute cellule une macro enregistrée sur une cellule

Bonjour,

Voilà, la macro utilisera la sélection ... ou même la sélection multiple (non contiguë).
Espérant le tout conforme.

Code:
Sub versComm()
  
   'ne pas oublier l'indentation qui facilite la lecture du code.
 
  ' définir les variables
Dim X As String
Dim Cell As Range
    
    
For Each Cell In Selection
    
    
  X = Cell.FormulaR1C1          ' place le contenu de la cellule dans la variable X
  Cell.AddComment               ' ajoute l'objet commenaire
  Cell.Comment.Visible = False  'le commentaire sera masqué
  Cell.Comment.Text Text:=X     ' place le contenu de X dans l'objet commentaire
    
  Cell.Value = ""  ' ceci vide la cellule
'  Cell.Value = ""  ' ceci ne vide pas la cellue car la ligne est en commentaire

Next
End Sub


Jecherche
 

DOMIMARE

XLDnaute Nouveau
Re : rendre applicable à toute cellule une macro enregistrée sur une cellule

C'est vraiment super. C'est exactement ce que je voulais et en plus je comprends ce que tu as fait. Il y a bien longtemps sur mon Apple2c je programmais en basic Apple...
Je n'imaginais pas pouvoir utiliser aussi simplement une boucle (For Each Cell In Selection)
Pourrais-tu me conseiller un bouquin de base apprenant la programmation VBA? (disons les bases)
En tout cas je te remercie de tout le temps que vous m'avez consacré.
Bonne fin de journée
DOMIMARE
 

jecherche

XLDnaute Occasionnel
Re : rendre applicable à toute cellule une macro enregistrée sur une cellule

Bonjour,

Un bouquin ... malheureusement pas ... je n'en connais aucun ... Mais j'achale constamment mon ami Google 8- ))))

Perso, je suis au autodidacte ... sans mon ami Google, je serais ignare dans bien des domaines ... je lis un peu l'anglais ... ça me sauve dans bien des situations.

Je me suis construis ma propre maxime : " Si des gens le font, il n'y a plus de raison que je ne puisse le faire! "

Bonne continuité...

Jecherche
 

DOMIMARE

XLDnaute Nouveau
Re : rendre applicable à toute cellule une macro enregistrée sur une cellule

Bonjour,
Je croyais en savoir assez pour continuer seul mais je tourne en rond.
Je veux maintenant insérer dans toutes les cellules d'une zone sélectionnée un fichier .jpg dont le nom correspond au nom présent dans la cellule (dans la phase précédente je voulais insérer un commentaire correspond au contenu de la cellule).
J'ai donc deux pbms:
1)Faire une boucle comme vous l'avez faite pour les commentaires. La mienne ne marche pas
Dans l'exemple ci-dessous je demande d'insérer le fichier qui se nomme "A partyr.JPG". Il devrait être mis dans toutes les cellules choisies. Mais il n'est mis que dans une seule cellule. La boucle ne marche donc pas.
2) Mais le but n'est pas de recopier partout le fichier nommé "A partyr.JPG". Il faudrait remplacer ce nom dans le chemin par une variable dans laquelle j'aurais mis la chaîne de caractères se trouvant dans la cellule.
3) Il me restera ensuite à essayer de dimensionner l'image (de l'adapter) à la taille de la cellule. Mais ceci viendra plus tard.
Merci de votre aide
DOMIMARE



Sub Macro2()
'
' Macro2 Macro
'
' Touche de raccourci du clavier: Ctrl+m
'
' définir les variables
Dim X As String
Dim Cell As Range


For Each Cell In Selection
X = Cell.FormulaR1C1 ' place le contenu de la cellule dans la variable X

ActiveSheet.Pictures.Insert( _
"C:\Users\Dominique\Documents\My PaperPort Documents\Genealogie\TRANSCRIPTIONS\M° PIERRE Esprit\TESTAMENT FREZET Antoine 26Mai1627 1 E 5930 F196 et trans\mots et syllabes\tot 5 a 7\A partyr.JPG" _
).Select
Selection.ShapeRange.ScaleWidth 0.2867648739, msoFalse, msoScaleFromTopLeft
Selection.ShapeRange.ScaleHeight 0.2867647059, msoFalse, msoScaleFromTopLeft
Selection.ShapeRange.ScaleWidth 1.0512821206, msoFalse, msoScaleFromTopLeft
Selection.ShapeRange.ScaleHeight 1.0512820513, msoFalse, msoScaleFromTopLeft
Next
End Sub
 

jecherche

XLDnaute Occasionnel
Re : rendre applicable à toute cellule une macro enregistrée sur une cellule

Bonjour,

À ce stade du code ... préalables :
- les images devraient toutes avoir la même dimension ou certaines peuvent être plus petites.
- la hauteur et largeur des cellules devraient être adaptées à la dimension des images ... sinon, les images seront rétrécies à la dimension de la cellule.
- les cellules, où iront les images, contiennent le nom de l'image à insérer.

--- Le nom de l'image se retrouvera en commentaire ...
À tester ...
Code:
Sub versComm()
Dim X, Nom, repertoirePhoto As String
Dim Cell As Range
Dim Img As Shape

repertoirePhoto = "C:\Domimare\Images\"   ' Adapter
 On Error Resume Next   ' pour évite l'arrêt de la macro si le nom ne correspond pas à une image valide
With ActiveSheet
  For Each Cell In Selection
    X = Cell.FormulaR1C1          ' place le contenu de la cellule dans la variable X
    Cell.AddComment               ' ajoute l'objet commenaire
    Cell.Comment.Visible = False  'le commentaire sera masqué
    Cell.Comment.Text Text:=X      'place le contenu de X dans l'objet commentaire
    Nom = X
    .Pictures.Insert(repertoirePhoto & Nom & ".jpg").Name = Nom
    .Shapes(Nom).Left = Cell.Left
    .Shapes(Nom).Top = Cell.Top
    .Shapes(Nom).LockAspectRatio = msoFalse
    .Shapes(Nom).Height = Cell.Height
    .Shapes(Nom).Width = Cell.Width
  'Cell.Value = ""  ' à activer au besoin pour vider la cellule
  Next
End With
End Sub

Source du code pour l'insertion des images : Les images et shapes


Jecherche
 
Dernière modification par un modérateur:

DOMIMARE

XLDnaute Nouveau
Re : rendre applicable à toute cellule une macro enregistrée sur une cellule

Bonjour,
C'est fabuleux!Je viens de faire un test rapide. C'est exactement ce que je voulais... et je comprends ce que vous avez fait. Excellente pédagogie.
Merci beaucoup
DOMIMARE
 

DOMIMARE

XLDnaute Nouveau
Re : rendre applicable à toute cellule une macro enregistrée sur une cellule

Bonjour,
Au moment d'utiliser cette macro je me suis rendu compte que, parfois, dans les premières cases (voire sur la première ligne) plusieurs images étaient placées les unes sous les autres et parfois non redimensionnées à la taille de la cellule. Cela peut se produire quelle que soit la zone sélectionnée. J'ai l'impression que tout va bien lorsque je lance la macro la première fois. Si j'efface le résultat et que je relance la macro, c'est là que l'erreur se produit.
Je ne vois pas pourquoi.Il doit falloir réinitialiser quch après la première utilisation. Si vous avez une idée je suis preneur...
Bonne journée
Domimare
 

Statistiques des forums

Discussions
311 720
Messages
2 081 910
Membres
101 837
dernier inscrit
Ugo