Macro portant sur une cellule
Bonjour,
En vue d'un test, j'écris dans une cellule d'une feuille ad hoc les valeurs successives d'une variable string mais elles s'écrivent par défaut à la verticale dans la cellule. Sur la base d'un tutoriel de Silky Road ("Les événements dans la feuille de calcul Excel", merci), j'ai écrit une procédure événementielle qui, quand la cellule est sélectionnée, est censée changer son format pour annuler le retour à la ligne, mais ça ne marche pas. J'ai fait diverses modifcations, sans succès. Voici mon code:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| Private Sub Worksheet_SelectionChange(ByVal Target As Range, Z)
Dim d As Integer
d = Z
'If Target = ThisWorkbook.Sheets("registre").Range("A" & d) Then
With Range("A" & d)
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
'End if
End Sub |
Et voici les lignes qui devraient déclencher la macro, dans la procédure principale:
Code:
1 2 3 4
| ThisWorkbook.Sheets("registre").Activate
Cells(Z, 1).Select
Selection.Value = GED_N1
Z = Z + 1 |
Z est une variable de la proc principale qui joue un autre rôle sur cette même feuille "registre" et je veux éviter que les données s'écrasent les unes les autres.
Je n'ai jamais bien maîtrisé les proc événementielles et je remercie d'avance celui ou celle qui me dépatouiilera de celle-ci.
Cordialement
touche_a_tout
Macro portant sur une cellule
Merci Jean-Philippe André et Transitoire,
Si je pige bien, c'est mon Z dans la parenthèse qui fait cafouiller. Le plus simple est de créer une feuille exprès pour ce test, feuille sur laquelle Z n'aura rien à faire.
Dans le post de Transitoire, je ne comprends pas quel code manque. Mais ça ne m'empêche pas de continuer sans Z !
(mais non sans aide, votre aide, merci !).
Cordialement,
touche_a_tout
Macro portant sur une cellule
Re,
Je n'ai pas dû bien comprendre, car ça ne fonctionne toujours pas. Tu me dis:
Citation:
la procédure qui est reconnue et déclenchée par Excel est la suivante :
Code:
1 2 3
| Private Sub Worksheet_SelectionChange(ByVal Target As Range)
End Sub |
J'ai compris que je devais mettre mes 10 et quelques lignes de code entre "Private Sub..." et "End Sub" (sauf que j'ai oublié d'incrémenter d dans mon code du post No 1) mais ça ne suffit pas.
Comme la sub principale sélectionne une cellule dans la feuille concernée, on a l'événement "SelectionChange" qui devrait lancer la procédure événementielle, mais elle ne le fait pas, j'ai toujours mon texte en colonne.
Est-ce que je dois préciser comme ceci ?
Code:
With Thisworkbook.Sheets("test_cell").Range("A" & d)
Pardon d'être aussi balbutiant, hélas.
Cordialement
touche_a_tout
Macro portant sur une cellule
Bonsoir Transitoire,
Merci de votre soutien. Je vous donne quelques détails. Mon appli est un ensemble de procédures (qui n'en formaient qu'une à l'origine, de plus de 400 lignes !) qui fonctionnent toutes de manière similaire: elles vont chercher dans une feuille Excel utilisée comme BD des informations qu'elles combinent sous forme de texte continu, chacune d'elle produisant une variable string qui s'allonge par concaténations successives (au fur et à mesure que la procédure balaie la feuille).
Par "texte en colonne", je veux dire, comme ma variable String compte 500 ou 600 caractères, qu'elle étire la cellule en hauteur et forme une colonne de texte d'environ 10 signes par ligne. Très malcommode à lire !!
La première procédure sur laquelle porte mon test fournit l'en-tête du document-texte à produire. La voici (je vous fais grâce de la mécanique qui commande le balayage des diverses feuilles du classeur et des lignes dans ces feuilles, etc.):
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
Sub en_teteN(teteN As String)
Dim d As Integer
d = 3
ThisWorkbook.Sheets(logoN).Activate
Set r = ThisWorkbook.Sheets(logoN).Range("A1").CurrentRegion
teteN = teteN & "0 @" & Format(compteur, "000") & "S" & "@" & " " & "SOUR" & Chr(10)
teteN = teteN & "1 ABBR" & " " & "AN " & ActiveSheet.Cells(ligne, 10).Value & " " & Cells(ligne, 11).Value _
& " " & Cells(ligne, 12).Value & " " & Cells(ligne, 17).Value & Chr(10)
teteN = teteN & "1 TITL Acte civil, paroissial ou notarié." & " " & Chr(10)
teteN = teteN & "1 REPO" & " " & Cells(ligne, 4).Value & Chr(10)
teteN = teteN & "2 CALN" & " " & Cells(ligne, 6).Value & Chr(10)
teteN = teteN & "3 MEDI" & " " & Cells(ligne, 68).Value & Chr(10)
teteN = teteN & "1 TEXT" & " " & "Réf. Excel:" & " " & Cells(ligne, 1).Value & _
" " & Cells(ligne, 2).Value & Chr(10)
GED_N1 = GED_N1 & teteN
ThisWorkbook.Sheets("test_cell").Activate
Cells(d, 1).Select
Selection.Value = GED_N1
d = d + 1
Aujourdhui = Date
End Sub |
Cela dit, depuis mon dernier post j'ai ajouté une feuille réservée à ces contrôles ("test_cell") et modifié la procédure événementielle (pour éviter les ambiguïtés avec la variable Z, qui concerne une autre feuille). Elle se présente maintenant comme ceci:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim d As Integer
'If Target.Count > 1 Then Exit Sub 'superflu ici, je pense, vient de
'l'exemple de Silky Road
d = 3
With ThisWorkbook.Sheets("test_cell").Range("A" & d)
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
d = d + 1
End Sub |
Notez que de With à End With c'est la copie textuelle d'un enregistrement de macro.
J'ai aussi remarqué que si je clique droit sur la cellule concernée pour avoir son format, la case retour automatique à la ligne reste cochée.
Les problèmes, dans mon projet, sont comme un oignon: vous en enlevez une couche, vous en trouvez une en-dessous !
Si vous voyez par où ça pèche ...?
Merci d'avance.
Cordialement
touche_a_tout
Macro portant sur une cellule
Bonjour Transitoire,
Vous avez tout à fait raison, il y a des solutions plus simples. La vôtre par exemple et une autre que j'ai essayée avec succès: une fois toutes mes phrases (ou un certain nombre) stockées dans ces cellules étirées vers le bas, sélection de toutes la colonne A et format-cellule/alignement: pas de retour automatique à la ligne.
J'ai pollué le forum avec une question oiseuse, désolé. Et merci de votre aide qui m'a ouvert les yeux.
Belle journée
touche-a-tout