XL 2013 Lien téléphone pour appeler

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour à toutes et à tous,

Recherchant en permanence des solutions pour gains de temps, j'ai un code qui permet de composer un numéro de téléphone "direct" sans avoir à faire un copier/coller.

Mais voilà ......... :confused:

"Mon fichier de travail est déjà ""lourd"" et a un nombre de lignes et colonnes important.
La formule en E m'oblige a créer une colonne supplémentaire et je ne souhaite pas en ajouter."

"J'aimerais un code qui me permette dans la cellule D où est le numéro de remplacer le contenu (numéro par exemple en D1) par :
=LIEN_HYPERTEXTE(CONCATENER(""sip:"";""33988288876""))"

J'ai fait des recherches et tentatives mais, à cet instant, je n'ai pas trouvé le bon code.
Auriez-vous une idée de magicien ? LOL

Je joins un fichier test,
Merci à vous pour tout ce que vous faites.
Amicalement,
Arthour973
 

Pièces jointes

  • lien sip.xlsm
    14.1 KB · Affichages: 61

vgendron

XLDnaute Barbatruc
et peut etre plus rapide si ton tablo est énorme
VB:
Sub Macro1()
Dim tablo() As Variant

fin = Range("D" & Rows.Count).End(xlUp).Row
tablo = Range("D2:D" & fin).Value

For i = LBound(tablo, 1) To UBound(tablo, 1)
    tablo(i, 1) = "=HYPERLINK(CONCATENATE(""sip:""," & tablo(i, 1) & "))"
Next i
Range("D2:D" & fin) = tablo
End Sub
 

job75

XLDnaute Barbatruc
Bonsoir Lionel vgendron,

Lionel tu as indiqué que :
l'opération est répétée un grand nombre de fois chaque jour.
Or il y a bug dès qu'on lance la macro de vgendron une 2ème fois.

Pour l'éviter :
Code:
Sub Liens()
Dim P As Range, tablo(), i&, x$
With Feuil1 'CodeName, à adapter
    If .FilterMode Then .ShowAllData 'si la feuille est filtrée
    Set P = Intersect(.[D:D], .UsedRange.EntireRow)
End With
If P.Count = 1 Then Set P = P.Resize(2) 'sécurité, au moins 2 cellules
tablo = P.Formula
For i = 1 To UBound(tablo)
    x = CStr(tablo(i, 1))
    If IsNumeric(x) Then tablo(i, 1) = "=HYPERLINK(""sip:""&" & x & "," & x & ")"
Next
P = tablo
End Sub
Et pourquoi utiliser CONCATENER ? L'opérateur & est quand même plus simple !!!

CONCATENER économise des octets en mémoire à partir de 6 arguments.

A+
 

job75

XLDnaute Barbatruc
Re,

Utilisant un tableau Excel le code est rapide : 1,6 seconde chez moi sur 50 000 cellules.

On peut l'utiliser dans une Worksheet_Change de cette manière :
Code:
Private Sub Worksheet_Change(ByVal R As Range)
Dim tablo(), i&, x$
Set R = Intersect(R, [D:D], UsedRange)
If R Is Nothing Then Exit Sub
If FilterMode Then ShowAllData 'si la feuille est filtrée
Application.EnableEvents = False
For Each R In R.Areas 'si entrées multiples
    If R.Count = 1 Then Set R = R.Resize(, 2) 'au moins 2 cellules
    tablo = R.Formula
    For i = 1 To UBound(tablo)
        x = tablo(i, 1)
        If IsNumeric(x) Then tablo(i, 1) = "=HYPERLINK(""sip:""&" & x & "," & x & ")"
    Next
    R = tablo
Next
Application.EnableEvents = True
End Sub
La macro se déclenche quand on modifie une cellule ou une plage (copier-coller) en colonne D.

A+
 

Discussions similaires

Réponses
9
Affichages
121
Réponses
5
Affichages
191