Erreur de copier/coller spécial lors de transfert de données
Bonjour à tous.
J'essaie de créer une macro dans le cadre de mon activité pro qui aille piocher les données d'un fichier qui s'appelle "matrice" pour aller les transférer dans un autre tableau où se situe ma macro, et où je souhaite faire tourner des fonctions pour afficher des indicateurs spécifiques par commune (et plus précisément par code INSEE, qui sont les valeurs cherchées par la plupart de mes fonctions).
Ce fichier est extrait d'une appli interne et rafraîchi de manière quotidienne et je mets en forme le tableau se basant sur ce fichier de manière bi-mensuelle avec actualisation des données.
Cependant je me heurte à un problème que je n'arrive pas à résoudre lorsque la macro colle les données précédemment copiées dans mon tableau matrice vers le tableau de destination.
Les données de mon tableau source sont, pour certaines des nombres stockées sous formes de texte (reconnaissable au petit coin vert dans la cellule).
Le problème auquel je me heurte, c'est que lorsqu'elles sont copiées, tous les codes INSEE deviennent du texte et donc ne fonctionnent plus dans mes fonctions (qui sont essentiellement des RechercheV et qui affichent donc des #N/A une fois les données collées), et d'autres , sont pour certaines transformées en texte alors que d'autres gardent leur format initial qui fonctionne bien. Ce qui fausse mes fonctions Somme en bas de tableau puisque seulement une partie des chiffres sont pris en compte dans mes calculs...
Pouvez-vous SVP m'aider à résoudre ce problème?
Ci-après mon code (avec commentaires) et encore incomplet, merci beaucoup par avance de votre précieuse aide !
Sub RAZ_Tableau()
'
' RAZ_Tableau Macro
'
'Remise à zéro des colonnes où des données non calculées sont présentes ainsi que de la mise en forme des bordures
Range("A4").Select
Range("A4:G4").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.ClearContents
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
Selection.Borders(xlEdgeLeft).LineStyle = xlNone
Selection.Borders(xlEdgeTop).LineStyle = xlNone
Selection.Borders(xlEdgeBottom).LineStyle = xlNone
Selection.Borders(xlEdgeRight).LineStyle = xlNone
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
Selection.Borders(xlEdgeLeft).LineStyle = xlNone
Selection.Borders(xlEdgeTop).LineStyle = xlNone
Selection.Borders(xlEdgeBottom).LineStyle = xlNone
Selection.Borders(xlEdgeRight).LineStyle = xlNone
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
Range("J4").Select
Range("J4:P4").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.ClearContents
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
Selection.Borders(xlEdgeLeft).LineStyle = xlNone
Selection.Borders(xlEdgeTop).LineStyle = xlNone
Selection.Borders(xlEdgeBottom).LineStyle = xlNone
Selection.Borders(xlEdgeRight).LineStyle = xlNone
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
Selection.Borders(xlEdgeLeft).LineStyle = xlNone
Selection.Borders(xlEdgeTop).LineStyle = xlNone
Selection.Borders(xlEdgeBottom).LineStyle = xlNone
Selection.Borders(xlEdgeRight).LineStyle = xlNone
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
Columns("H:I").Delete Shift = xlToLeft
' Définition des variables. Master = fichier source, Data = Cible qui sera copiée dans fichier source
Dim wbMaster As Workbook
Dim wsMaster As Worksheet
Dim wbData As Workbook
Dim wsData As Worksheet
Dim Plage As Range
Dim ActiveWorksheet As Worksheet
' Procédure d'ouverture de fichier
Set wbMaster = ThisWorkbook
Set wbData = Workbooks.Open("L:\COMMERCIALISATION\FIBRE\Suivi du parc Fibre\matrice.xlsx")
' Définit la plage comme étant toutes les données du tableau
Range("A2").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
wbData.Close
' Copier/coller des données du fichier de matrice pour pouvoir les insérer dans le fichier Excel de destination
Range("A4").Select
ActiveSheet.Paste
' Rajout des colonnes de recherche des Nb de logements INSEE et calcul du taux de couverture commerciale (faire SI pour taux > 100%)
' Egalisation de la mise en forme des diverses colonnes et séparation par mailles
' Une fois le copier/coller terminé, les données actualisées, instruction pour faire une première sauvegarde du fichier à la date du jour
End SubBonjour,
Il faudrait convertir les "valeurs texte" en numérique, soit dans le classeur source avant copie soit dans le classeur cible après collage.
la conversion ne peut s'effectuer que sur des "nombres texte" . La tentative de conversion de texte pur provoquerait une erreur.
Dans la plage à copier y a-t-il des données texte ?
si oui quelles sont les colonnes à convertir (ou à ne pas convertir) ?
A+
Bonsoir Algo !
Si tu parles de données texte pures, oui il y en a car dans le sélection que la macro vient copier/coller il y a les codes INSEE et les villes associées en caractères !
Sinon deux colonnes sont concernées et "éligibles" à la conversion: celle avec les codes INSEE, et une autre avec un autre indicateur.
Je teste la conversion dans le fichier de matrice demain pour voir si ça solutionne le problème mais ce qui me surprend c'est qu'Excel ne me laisse pas la possibilité de le faire une fois les données importées à vrai dire...
Bonjour Algo !
Je viens d'effectuer le test en convertissant les colonnes concernées, et ça n'a rien changé. Plus surprenant même, une fois la sélection collée, j'ai le même problème.
C-à-d mes formules qui ne marchent pas et une partie des données collées qui sont convertibles et d'autres pas...
J'ai essayé de faire tourner l'enregistreur de macros pour voir si je ne pouvais pas insérer une instruction qui convertisse mes données dans la matrice avant mon collage, mais aucune instruction ne semble exister pour la conversion...
Aurais-tu une autre piste pour tenter de résoudre mon problème STP ?
Pas tout compris,
par quel moyen convertis-tu ?
Excel ne te laisse pas la possibilité de convertir une fois les données importées ???
fournis un extrait du classeur après copie je regarderai pour une macro de conversion .
A+
Bonjour Algo,
J'ai effectué la conversion en sélectionnant ma plage de données (celle avec le petit encart vert dans le coin supérieur de la cellule) et en cliquant sur "convertir en nombre".
Pour la conversion c'est ça le grand mystère, en théorie comme je copie colle sans rien faire en théorie ça ne devrait pas poser problème. Sauf qu'une partie des cellules n'est plus convertible, et celles qui sont le coeur de ma recherchev sont déjà converties une fois collées dans mon fichier de destination. Et les convertir fait sauter mes recherchev :'(.
Dans le fichier joint tu trouveras les cellules qui sont converties en colonne E et K.
J'ai deux fichiers : un qui s'appelle "matrice" et qui est la source dans laquelle la macro vient piocher, et un "fichier destination" qui est celui dans lequel elle doit copier les données.
Pour ce qui est de la macro elle s'appelle "RAZ tableau".
Par contre je n'arrive pas à joindre mon fichier de destination et qui contient la macro car il est trop volumineux. Comment peut-on procéder autrement pour que je te l'envoie ?
Bonjour à tous,
Petit up pour vous dire que j'ai réussi à résoudre le problème. C'était bien un problème de format de cellule.
Le fichier qui est généré par notre appli appliquait automatiquement des formats spécifiques à mon fichier matrice. Il suffisait d'ajouter une ligne de code pour remettre les formats en standard, et convertir les nombres stockés sous forme de texte dans mes bases de données dans mon tableau destination pour que mes formules refonctionnent et que les sommes refonctionnent aussi.
Merci pour l'aide