Knowledge base KB0156

Je ne peux pas coller des données sur la feuille de données think-cell ou le format est perdu

Symptômes

Vous souhaitez copier les données d'un classeur Excel (.xlsx) pour les coller dans la feuille de données interne d'un graphique think-cell. Lorsque vous collez les données, vous observez l'un des problèmes suivants :

  • Le message suivant s'affiche : Microsoft Excel ne peut pas coller les données.
  • Seules les cellules vides sont collées.
  • Votre format de date ou de nombres a été perdu, par exemple 1/1/2012 passe à 40909 ou $3.5 passe à 3.5.
  • Après collage, les valeurs de pourcentage s'affichent de façon incorrecte. La disposition peut changer dans la totalité des graphiques.
  • Les couleurs de cellule n'apparaissent pas dans le graphique alors que vous avez coché l'option Utiliser le remplissage Excel en haut

Ces problèmes peuvent également survenir lorsque vous utilisez les liens de données Excel de think-cell.

Problème 1

Chacun des problèmes ci-dessus peut se produire si le classeur .xslx contient plus de 3 000 styles de cellules environ. Vous pouvez vérifier le nombre de styles de cellule grâce à la commande VBA suivante dans la Fenêtre Exécution :
print Activeworkbook.Styles.Count

Pour ce faire, procédez comme suit :

  1. Ouvrez l'éditeur VBA en appuyant sur Alt+F11.
  2. Accédez à Fenêtre d'exécution. Si elle n'est pas visible, vous pouvez l'afficher en cliquant sur AffichageFenêtre Exécution.
  3. Saisissez la commande suivante et appuyez sur Entrée
    print Activeworkbook.Styles.Count

Solution 1 : Nettoyez tous les classeurs concernés

  • Copiez vos feuilles de calcul dans un nouveau classeur

    Dans Office 2013 et ses versions ultérieures, le fait de copier les feuilles de calcul entre les classeurs permet d'éviter l'accumulation par défaut de styles de cellules inutilisés :

    • Sélectionnez toutes les feuilles de votre classeur, maintenez SHIFT et cliquez sur la première et la dernière feuilles de calcul.
    • Effectuez un clic droit sur la sélection : Déplacer ou copier…Vers le classeur : (nouveau classeur) et cochez Créer une copieOK
    • Enregistrez un nouveau classeur sous un nouveau nom.

    Dans Office 2007 et 2010, le fait de copier une feuille de calcul dans un nouveau classeur copie l'ensemble des styles de cellules inutilisés. Afin d'éviter cela, veuillez activer le correctif suivant en premier lieu :

    Si votre version d'Office est entièrement à jour, ce correctif est probablement déjà installé. Cependant, vous devez également activer ce correctif en utilisant la solution Fix it de Microsoft ou dans le registre, comme explicité dans les articles Microsoft suivants :

    Si l'activation du correctif ne fonctionne pas, appliquez la mise à jour mentionnée à la section Résolution dans les articles Microsoft ci-dessus.

  • Nettoyez vos classeurs avec un outil de nettoyage

    Utilisez l'outil de nettoyage XLCleanerDotNET4.0, recommandé par Microsoft dans l'article KB213904. Après avoir démarré l'outil, cliquez sur Get Excel File, sélectionnez Force all cell styles to 'Normal', puis cliquez sur Process File. Lorsque le fichier nettoyé s'ouvre dans Excel, enregistrez-le sous un nouveau nom.

  • Supprimez les styles de cellule personnalisés de votre classeur à l'aide d'une macro VBA

    Ouvrez l'éditeur VBA en appuyant sur Alt+F11. Sélectionnez votre classeur et cliquez sur InsertionModule. Collez ensuite l'une des macros suivantes et lancez-la en appuyant sur F5 :

    DeleteCustomStyles() supprime l'ensemble des styles de cellule personnalisés de votre classeur.

    Sub DeleteCustomStyles()
    Dim st As Style
    Dim i, i_cust As Long
    i_cust = 0
    For i = (ActiveWorkbook.Styles.Count) To 1 Step -1
    	With ActiveWorkbook.Styles(i)
    		If .BuiltIn = False Then
    			On Error Resume Next
    			.Locked = False
    			On Error GoTo 0
    			If Not .Locked Then
    				.Delete
    				i_cust = i_cust + 1
    			End If
    		End If
    	End With
    	If (i Mod 100) = 0 Then Debug.Print i
    Next
    MsgBox "Styles deleted: " & i_cust & " styles" & Chr(13) & "Styles left: " & ActiveWorkbook.Styles.Count
    End Sub

    Remove_Styles() supprime uniquement les styles de cellule inutilisés de votre classeur. Cette macro est similaire à la macro ci-dessus, mais son exécution peut être très longue. La macro est fournie par le support Microsoft Office.

    Option Explicit
    Dim st_array() As String
    Dim i_x As Long
    Sub Remove_Styles()
    Dim stname As String
    Dim ustname As String
    Dim uc As Range
    Dim retval As Boolean
    Dim ust As Style
    Dim sh As Worksheet
    i_x = 0
    For Each sh In ActiveWorkbook.Worksheets
        For Each uc In sh.UsedRange
            stname = uc.Style.Name
            retval = Check_Array(stname)
            If retval = False Then
            ReDim Preserve st_array(i_x)
            st_array(i_x) = stname
            i_x = i_x + 1
            End If
        Next uc
    Next sh
    For Each ust In ActiveWorkbook.Styles
        If ust.BuiltIn = False Then
            ustname = ust.Name
            retval = Delete_Styles(ustname)
            On Error Resume Next
            If retval = True Then ust.Delete
            On Error GoTo 0
        End If
    Next ust
    End Sub
    Function Delete_Styles(stylename As String) As Boolean
    Delete_Styles = True
    Dim i_y As Long
    For i_y = 0 To i_x - 1
        If st_array(i_y) = stylename Then Delete_Styles = False
    Next i_y
    End Function
    Function Check_Array(stylename As String) As Boolean
    Check_Array = False
    Dim i_y As Long
    For i_y = 0 To i_x - 1
        If st_array(i_y) = stylename Then Check_Array = True
    Next i_y
    End Function

La meilleure solution consisterait à éviter de coller les styles de cellules inutilisés, mais nécessite la résolution d'un bug par Microsoft dans Excel versions 2007 et ultérieures. Jusqu'à présent, Microsoft n'a pas jugé que l'impact était suffisamment important sur les sociétés pour développer un correctif. Si votre société possède un contrat auprès de l'Assistance Microsoft Office, vous pouvez contacter Microsoft pour demander un correctif en leur mentionnant le numéro de dossier REG:113012810172527.

Explication 1

Le format de fichier utilisé lors du collage des données dans la feuille de données de think-cell ou lors du transfert via un lien de données Excel (format de fichier Biff8/.xls) ne prend en charge qu'environ 3 000 styles de cellules. En cas de transfert de données depuis un classeur .xlsx qui comporte un plus grand nombre de styles de cellule vers la feuille de données think-cell, les informations de mise en forme sont perdues ou l'opération de collage est impossible.

Certains classeurs .xlsx contient un nombre important (plusieurs dizaines de milliers) de styles de cellule en raison de bogues et de la conception problématique du code dans Excel. Les outils de reporting qui génèrent parfois un nombre excessif de styles de cellule peuvent contribuer à ce problème. Dans certains cas, tous les styles de cellule inutilisés sont également copiés lors de la copie de cellules ou de feuilles de calcul entre classeurs.

  • Copier une feuille de calcul dans un nouveau classeur avec Excel 2007 ou 2010 :
    Effectuez un clic droit sur l'onglet feuille de calcul → Déplacer ou copier…Vers le classeur : (nouveau classeur) et cochez Créer une copie.
  • Copier/coller des cellules (même une seule cellule) dans un autre classeur lors d'un processus Excel distinct ou dans la feuille de données interne de think-cell
    • Afin de lancer un processus Excel distinct, effectuez un clic droit sur le symbole Excel de la barre de tâches et cliquez sur Microsoft Excel 20… Comment lancer un processus Excel distinct
    • Dans Excel 2013 et versions ultérieures, appuyez en même temps sur la touche ALT afin de lancer un processus distinct. Confirmez le message Souhaitez-vous démarrer une nouvelle session Excel ? en cliquant sur Oui.
    • think-cell est concerné, car notre feuille de données repose sur une feuille de calcul Excel dans un processus Excel séparé.

La copie de cellules dans un nouveau classeur dans le même processus Excel ne copie pas les styles de cellule inutilisés.

Problème 2

Il se peut que vous réussissiez, dans un premier temps, à copier/coller les données d'un classeur Excel (.xlsx) dans la feuille de données interne d'un graphique think-cell, mais que toutes les tentatives de copier/coller suivantes (même d'une cellule vide) dans cette même feuille de données entraînent l'affichage du message Microsoft Excel ne peut pas coller les données. Dans ce cas, les autres problèmes mentionnés dans la section Symptômes ci-dessus ne se produisent pas.

Ce problème se produit en copiant des données entre des processus Excel distincts, si un style de tableau personnalisé portant le même nom figure à la fois dans le fichier source et dans le fichier cible. Comme la première opération de copier/coller copie également les styles de tableau personnalisés, les tentatives de copier/coller suivantes échouent. Le problème est reproductible sans think-cell.

Reproduction de l'erreur sans think-cell

  1. Lancez deux processus Excel. Si vous créez un classeur avec Ctrl+N alors que Excel est déjà ouvert, le second classeur est conservé dans le même processus Excel.

    • Pour lancer un processus Excel distinct, effectuez un clic droit sur le symbole Excel dans la barre de tâches et cliquez sur Microsoft Excel 20… Comment lancer un processus Excel distinct
    • Dans Excel 2013 et versions ultérieures, appuyez en même temps sur la touche ALT afin de lancer un processus distinct. Confirmez le message Souhaitez-vous démarrer une nouvelle session Excel ? en cliquant sur Oui.
  2. Dans le classeur ouvert au cours du premier processus Excel, rendez-vous sur ExcelAccueilStylesMettre sous forme de tableauNouveau style de tableau …OK. Cette opération entraîne l'insertion d'un nouveau style de tableau personnalisé appelé "Table Style 1".
  3. Copiez/collez une cellule depuis le classeur contenant "Table Style 1" vers l'autre classeur dans le deuxième processus Excel. Cette opération fonctionne la première fois.
  4. À nouveau, copiez/collez une cellule depuis le classeur contenant "Table Style 1" vers l'autre classeur dans le deuxième processus Excel. La deuxième fois, cette opération échoue et affiche le message Microsoft Excel ne peut pas coller les données.

Solution 2

  • Excel 2007 et versions antérieures ne sont pas concernés par ce problème.
  • Dans Excel 2010, ce problème persiste à partir de novembre 2015. Si votre société possède un contrat auprès de l'Assistance Microsoft Office, vous pouvez contacter Microsoft pour demander un correctif en leur mentionnant le numéro de dossier for Excel 2013, REG:114021711190574.

    Dans l'intervalle, vous pouvez utiliser les solutions provisoires suivantes :

    • Collez les données dans la feuille de données think-cell sous la forme de texte :
      Feuille de données think-cellCollerPlus (le petit bouton en forme de triangle à côté du bouton Coller) → Collage Spécial …TexteOK.
    • Cliquez sur le bouton Supprimer les formats de toutes les cellules dans la feuille de données interne de think-cell. Cela permettra de supprimer les styles de tableau personnalisés de la feuille de données et de faire fonctionner au moins une fois les commandes insérées par la suite.
  • Microsoft a résolu ce problème pour Excel 2013. Veuillez installer le correctif KB2881014 depuis les Mises à jour Microsoft Office du 10 juin 2014 ou le correctif KB2881042.