You can over come this by using another link table which you build when you build the drop down list, so declare the array "link" right at the top of the module so that it is retained across all the subs then change the worhsheet activate and the cnbcontact_change subs as follows:

    Private Sub cmbcontact_Change()
    Dim kk As Integer
    Dim linkin As Integer
        linkin = cmbcontact.ListIndex
        If linkin > -1 Then
        kk = link(linkin)
        Call ClientContact(kk)
        End If
    End Sub
Private Sub Worksheet_Activate()
    cmbcontact.Clear
    linkindex = 0
    If Sheets("Contact Details").Range("A4").Value <> "" Then
        cmbcontact.AddItem "Client 1"
        link(linkindex) = 0
        linkindex = linkindex + 1
    End If
    If Sheets("Contact Details").Range("A5").Value <> "" Then
        cmbcontact.AddItem "Client 2"
        link(linkindex) = 1
        linkindex = linkindex + 1
    End If
    If Sheets("Contact Details").Range("A7").Value <> "" Then
        cmbcontact.AddItem "FA 1"
        link(linkindex) = 2
        linkindex = linkindex + 1
    End If
    If Sheets("Contact Details").Range("A8").Value <> "" Then
        cmbcontact.AddItem "FA 2"
        link(linkindex) = 3
        linkindex = linkindex + 1
    End If
    If Sheets("Contact Details").Range("A10").Value <> "" Then
        cmbcontact.AddItem "Cus 1"
        link(linkindex) = 4
        linkindex = linkindex + 1
    End If
    If Sheets("Contact Details").Range("A11").Value <> "" Then
        cmbcontact.AddItem "Cus 2"
        link(linkindex) = 5
        linkindex = linkindex + 1
     End If


End Sub
There is no change to the Clientcontact sub.

What you could try yourself is to condense the worksheet activate routine which now looks very repetitive, by defining an array of 6 strings to hold the text for the drop down box, then loop round A5 to A11 with the gaps as I have demonstrated. Once you have grasped this technique moving anything to anywhere gets really easy.