Excel VBA Type incompatibilité référençant Cell.Value

Salut, ce sera presque certainement un moment de "Doh", mais je n'ai pas codé depuis longtime et je suis un peu rouillée.

J'ai une valeur de cellule que je continue d'get une inadéquation de type lorsque j'essaie de la traiter en tant que string, mais CStr et les tests pour IsNull etc. ne semblent pas aider. Merci pour certains conseils.

Set ClientTable = SourceBook.Sheets("Source Data").Range("extdata") For Each rng1 In ClientTable.Columns(1).Cells 'if not first row (header row) and the customer name is matching the selected customer If (i <> 0) And (rng1.Value = SourceBook.Sheets("Source Data").Range("C1")) Then If Not IsNull(ClientTable.Columns(6).Cells.Offset(i, 0).Value) Then MsgBox ClientTable.Columns(6).Cells.Offset(i, 0).Value ' type mismatch here End If With Sheets("Contacts").Range("A1") .Offset(rowToWriteTo, 0).Value = ClientTable.Columns(6).Cells.Offset(i, 0).Value ' first name .Offset(rowToWriteTo, 1).Value = ClientTable.Columns(2).Cells.Offset(i, 0).Value ' last name .Offset(rowToWriteTo, 5).Value = ClientTable.Columns(3).Cells.Offset(i, 0).Value ' email .Offset(rowToWriteTo, 6).Value = ClientTable.Columns(4).Cells.Offset(i, 0).Value ' DDI .Offset(rowToWriteTo, 7).Value = ClientTable.Columns(7).Cells.Offset(i, 0).Value ' mobile .Offset(rowToWriteTo, 8).Value = ClientTable.Columns(5).Cells.Offset(i, 0).Value ' title End With rowToWriteTo = rowToWriteTo + 1 End If i = i + 1 Next 

Si je supprime ce bit de code, les feuilles («Contacts»). Les assignations de scope («A1») fonctionnent bien.

PS: l'utilisation de MsgBox est juste pour le debugging. En essayant d'atsortingbuer ClientTable.Columns (6) .Cells.Offset (i, 0). La valeur à une variable de string produit la même erreur.

Merci beaucoup pour toute assistance!

L'expression ClientTable.Columns(6).Cells.Offset(i, 0).Value aboutit à un tableau de valeurs car Columns(6) est un object Range avec plusieurs cellules. Vous ne pouvez pas atsortingbuer ce tableau à une string. Peut-être que vous devriez utiliser ClientTable.Cells(i, 6).Value place. Donc, vous obtenez une valeur unique.