Supprimer des caractères dans une variable pour en créer une nouvelle

Bonjour,
Je suis nouveau sur le forum.

Dans la macro ci-dessous, est-il possible d’obtenir la variable « refcelfin » sans passer par l’intermédiaire de Cells(8,9) et Range (« I8 »).
Ce qui revient à supprimer certains caractères d’une variable pour en créer une nouvelle.

Merci.

'recherche référence cellule (cellule fin)
Dim plage As Range
Set plage = Range(« a1:bb100 »)
monchiffre = « cellule fin »

    For Each cell In plage
        If cell.Value = monchiffre Then
        adressecelulefin = cell.Address
        Cells(8, 9) = adressecelulefin
        End If
    Next cell

'Suppression ($) dans la définition de la cellule

Range("I8").Select
   ActiveCell.Replace What:="$", Replacement:="", LookAt:=xlPart, _
       SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
       ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
   refcelfin = ActiveCell

Pouvez-vous explicquer quoi cette macro fait oubien ajouter un fichier avec une situation « AVANT » et « APRES ».

@Cow18

à tout hasard : peut-être que pour comprendre, il faut lire et supposer quelque chose
sans le tester ? :stuck_out_tongue_winking_eye: mais si la plupart des erreurs est causé par l’objet entre l’écran
et la chaise (c’est-à-dire l’utilisateur), alors faudrait demander à @Patrick-Remilly.

1 « J'aime »

Merci de vous intéresser à mon problème.

La macro commence par rechercher les références d’une cellule qui contient : « « cellule fin » » dans la feuille de calcul. Pour info, cette cellule varie de positionnement en fonction des données journalières.

Lorsque la macro trouve la cellule, elle en fait une variable : « « adressecelulefin » »

Cette variable apparaît sous la forme par exemple « « $D$15 » »

Pour la suite de la macro, j’ai besoin qu’elle apparaisse sans les $ sous la forme « « D15 » »

Bonjour,
Si j’ai compris, à tester

Sub Test()

'recherche référence cellule (cellule fin)
Dim plage As Range
Set plage = Range("a1:bb100")
monchiffre = "cellule fin"
    For Each cell In plage
        If cell.Value = monchiffre Then
        cell.Activate
        adressecelulefin = ActiveCell.Address(0, 0)
        End If
    Next cell
End Sub

bonjour,
un variante de Mimimathy,

Sub Test()

     'recherche référence cellule (cellule fin)
     Dim plage As Range, s As String
     Set plage = Range("a1:bb100")
     monchiffre = "cellule fin"
     For Each cell In plage
          If cell.Value = monchiffre Then s = s & ", " & cell.Address(0, 0)
     Next

     adressecelulefin = Mid(s, 3)
     MsgBox adressecelulefin

End Sub

Merci.
C’est exactement ce que je recherchais et qui va simplifier ma macro.
Pour comprendre le fonctionnement de Activecell.Address, si je n’avais voulu conserver que les $ par quoi j’aurais dû remplacer (0, 0) ?

Re,

Pour quel interet garder que les « $ » qui figent la cellule ?

Aucun intérêt, c’est juste pour comprendre le fonctionnement de : cell.Address(0, 0)

Merci,
Ça fonctionne aussi.
Il me reste maintenant à comprendre chaque instruction pour pouvoir les réutiliser ultérieurement dans d’autres macros.

If cell.Value = monchiffre Then s = s & ", " & cell.Address(0, 0)
     Next

     adressecelulefin = Mid(s, 3)

Re,
Voici trois solutions :

1- Utilisation de Split pour mettre en tableau les valeurs en utilisant le séparateur $, il suffit de paramétrer l’affichage de la cellule sous la forme A$15, Split l’éclate dans un tableau avec deux items : item 0 = A et item1 = 15, il suffit de prendre le premier item :

    ActiveCell.Value = Split(ActiveCell.Address(1, 0), "$")(0)

2 - Encore avec Split, mais peut-être plus simple :

     ActiveCell.Value = Split(Columns(ActiveCell.Column).Address(0, 0), ":")

On récupère uniquement l’adressage de la colonne, par exemple AH:AH et on éclate le texte avec le séparateur « : », puis on prend uniquement la première valeur.

3 - On compte le nombre de caractères du numéro de la colonne que l’on déduit du nombre total de caractère que représente l’adresse de la cellule :

    ActiveCell.Value = Mid(ActiveCell.Address(0, 0), 1, Len(ActiveCell.Address(0, 0)) - Len(CStr(ActiveCell.Row)))

Pour la cellule A15, cela donne Len(« A15 »)=3, Len(« 15 »)=2 donc on prend 1 caractère (3-2)

Je ne maîtrise pas le vba mais avec un peu de bonne volonté et l’aide précieuse des membres du forum on peut se débrouiller.
Au besoin, pour chaque tâches, je crée des macros sous Excel que j’assemble.
Je vais ensuite fouiller dans les sujets du forum pour essayer d’améliorer ou de faire fonctionner mes macros.
Je copie bien-sûr toutes vos solutions et je les testerai pour en comprendre le fonctionnement.
Encore pour merci pour votre aide.
Patrick

Merci à tous, j’ai obtenu la réponse à ma question.

Ce sujet a été automatiquement fermé après 30 jours. Aucune réponse n’est permise dorénavant.