[Résolu] Fonction Replace dans la référence d'une cellule

Kim75

XLDnaute Occasionnel
Bonjour le forum,

Je vous présente tous mes voeux de paix, bonheur et santé pour ce nouvel an, bonne année à tous :)

L'année a commencé pour moi hier avec ce petit souci de notation que j'arrive pas à régler :)

-1. Quand on écrit :
VB:
Sheets("Feuil1").Cells(2, 4).Value = "Test"
On a "Test" en cellule D2

-2. Quand on écrit :
VB:
MsgBox Replace("2:4", ":", ", ")
On a le MessageBox avec la valeur "2, 4"

-3. Et quand on écrit
VB:
Sheets("Feuil1").Cells(Replace("2:4", ":", ", ")).Value = "Test"
On a "Test" en cellule B1 alors que ça devrait être en D2

Si je suis amené à utiliser la fonction Replace dans la référence d'une cellule (avec notation numéro de ligne numéro de colonne), c'est parce que j'utilise une ListView que j'alimente avec un tableau, et que parallèlement je dois me servir des clefs des items, ce serait vraiment sympa si quelqu'un pourrait m'orienter vers une solution.

Cordialement, Kim.
 

Pièces jointes

  • Listview-Keys.xlsm
    30.4 KB · Affichages: 47

Lone-wolf

XLDnaute Barbatruc
Bonjour Kim et bonne année :)

Un essai comme ceci peut-être? À tester

VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Cells(1, 2) = 1 Then Cells(2, 4) = Replace(Cells(1, 2), Cells(1, 2), "Test")
If Cells(3, 4) = 1 Then Cells(3, 2) = Replace(Cells(3, 4), Cells(3, 4), "Test")
mem = Cells(2, 4).Row & ":" & Cells(2, 4).Column
MsgBox Replace(mem, ":", ",")
Cancel = True
End Sub
 

Dranreb

XLDnaute Barbatruc
Bonjour et bonne année.

Cette procédure écrit "Test-3" en D2.
VB:
Sub Test()
Dim S$(), L&, C&
S = Split("2:4", ":"): L = S(0): C = S(1)
Sheets("Feuil1").Cells(L, C).Value = "Test-3"
End Sub

Cela dit je n'ai jamais compris à quoi servent les clés dans les ListView.
À partir du moment ou vous accédez de toutes façon positionnellement à leurs éléments, vous avez la même position pour une plage, sous forme ligne et colonne, des deux cotés.
C'est seulement si ces clés pouvaient être dans un ordre quelconque dans la ListView, sans rapport à la position en ligne et colonne, qu'elles pourraient présenter un intérêt. Mais dans ce cas il vaudrait mieux y ranger des adresses de cellules.
Mais je préfèrerais encore ranger les cellules elle même dans un tableau indépendant de la ListView.

Bonjour Lone-wolf
 
Dernière édition:

Lone-wolf

XLDnaute Barbatruc
Bonjour Dranreb :)

EDIT: en PJ classeur exemple sur événement Change & SelectionChange de la feuille. Pour l'affichage du message: à partir de la colonne C, utilise TAB du clavier jusqu'à la colonne E.
 

Pièces jointes

  • Tests Fonction Replace.xlsm
    16 KB · Affichages: 31
Dernière édition:

Kim75

XLDnaute Occasionnel
Bonjour Lone-Wolf, Dranreb, le forum

Merci Lone-Wolf, Dranreb mais ça ne marche malheureusement pas, notamment la méthode de Dranreb consistant à substituer Spilt à Replace, apparemment on ne peut mettre autre chose que des nombre dans la référence d’une cellule, enfin c’est ce qui me semble, je ne sais pas …

La fonction Split provoque une erreur, tout comme la fonction Replace :
VB:
S = Split("2:4", ":"): L = S(0): C = S(1)
Sheets("Feuil1").Cells(L, C).Value = "Test"
Pour répondre à Dranreb qui se demande pourquoi utiliser les cléfs, la réponse est que la plupart du temps on est amené à filtrer la ListView, dont à modifier sa structure et l’ordre des items avec, c’est pourquoi on a besoin des cléfs pour retrouver les items.

Cordialement, Kim.
 

Dranreb

XLDnaute Barbatruc
apparemment on ne peut mettre autre chose que des nombre dans la référence d’une cellule,
C'est bien ce que vous y mettez, à moins d'avoir oublié Dim S$(), L&, C& devant.
Mettez Option Explicit en tête de vos modules pour ne plus risquer d'oublier ce genre de chose.

D'habitude je m'arrange pour conserver les numéros dans le tableau source de ses lignes effectivement rangées dans une ListBox ou une ListView dans une table globale nommée TLgn.
Private TLgn() As Long
 
Dernière édition:

Kim75

XLDnaute Occasionnel
Hello Lone-Wolf, Dranreb :)

En effet, j'ai corrigé et ça marche
J'avais oublié de mettre "$ et &" dans Dim S$(), L&, C& :)
Je vous remercie infiniment de m'avoir sorti du pétrin :)

Bonne fin de journée, Kim.
 

Pièces jointes

  • Listview-Keys.xlsm
    31.4 KB · Affichages: 32

Discussions similaires

Statistiques des forums

Discussions
312 087
Messages
2 085 198
Membres
102 815
dernier inscrit
Henridic