XL 2019 [VBA] Problème de formule sur l'ouverture d'un CSV à cause des caractères "+" et "-"

François75020

XLDnaute Nouveau
Bonjour,

je tente de créer un fichier Excel qui permette de réaliser un formatage sur un fichier.

toutes les actions que je cherche à automatiser sont facile à faire à la main, j'ai donc enregistré une macro et tenté d'automatiser, cependant je remarque une différence ce que je fais à la main et ce que fait ma macro VBA via un bouton sur la feuille 1 de calcul.

1 j'ouvre un fichier .csv en lui disant que les séparateur sont les ; et que le format est du texte (justement pour éviter le pb des + et - )
2 je copie les données du fichier ouvert dans ma feuille 2 excel
3 je copie une formule de la feuille 1 (que je tente en ce moment de rendre éditable mais c'est un autre pb) vers la cellule R2
4 j'étend ma formule.

5 je recopie le résultat de ma formule dans un fichier txt (ce fichier sera en suite exploité par mon équipe.


mon problème se trouve dans l'étape 1 ou 2 en tout cas dans ma feuille 2 d'Excel toutes les cellule qui commence par un operateur + ou - sont considérées comme des formules ratée et la valeur est remplacée par #NOM?

j'aimerai corriger ce point.

je joint mon fichier Excel qui contient la macro et 1 fichier de teste qui ne fonctionne pas sur 2 lignes sur 3.

Cordialement,
François
 

Pièces jointes

  • fichier-test-download.txt
    699 bytes · Affichages: 15
  • formatage XLdownload.xlsm
    36.8 KB · Affichages: 4
Solution
Bonjour à tous

Je ne pige pas vos soucis

Si le fichier a bien une extension csv, que ce soit sur l'add on FR de PowerQuery avec 2010 ou sur 365, je récupère les GRENIER avec leur + ou - en texte sans erreur ni '

Si en txt il n'est pas découpé automatiquement mais le fractionnement effectué le balance bien en texte

Sinon pour François75020, c'est le copier coller qui met la grouille, comme souvent, formate tes colonnes avant et copie colle les valeurs

JHA

XLDnaute Barbatruc
Bonjour à tous,

Avec power query, il est très facile et rapide de convertir le fichier "txt" en format excel.
Tout cela sans formule ni macro.
Peut-être que cela t'aidera à continuer les étapes mentionnées au #1.

JHA
 

Pièces jointes

  • Classeur Test.xlsx
    18.8 KB · Affichages: 10

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour @François75020 , @JHA , le Forum

Voici une autre approche avec un Open file for Input.
Dézipper les deux fichiers dans un même répertoire de test (Décompresser, les deux fichiers, ca ne fonctionnera pas dans le zip)

A l'import TXT j'ajoute le fameux simple quote ' pour avoir +GRENIER accepté dans la feuille. J'espère que ca ne gènera pas la suite de ton traitement...

Bonne journée
@+Thierry
 

Pièces jointes

  • XLD_François75020_Import_TXT_formatage XLdownload.zip
    29.6 KB · Affichages: 2

_Thierry

XLDnaute Barbatruc
Repose en paix
Re François

J'ai oublié de traiter -GRENIER !!!

Voici le correctif :
VB:
Option Explicit

Sub ImportTXT()
Dim WB As Workbook, WS As Worksheet
Dim Record As String
Dim Container As Variant
Dim i As Integer, ii As Byte
Dim ThePath As String

Set WB = ThisWorkbook
Set WS = WB.Worksheets.Add(After:=WB.Worksheets(WB.Worksheets.Count))
WS.Name = "Import Txt " & Format(Now, "DDMMYY HHMMSS")

ThePath = WB.Path & "\fichier-test-download.txt" 'A Adapter...
Open ThePath For Input As #1
    
    Do While Not EOF(1)
        i = i + 1
        Line Input #1, Record
        Container = Split(Record, Chr(59))
            If Record <> "" Then
                    For ii = 1 To 18
                        If Left(Container(ii - 1), 1) = "+" Or Left(Container(ii - 1), 1) = "-" Then
                               WS.Cells(i, ii) = "'" & Container(ii - 1)
                        Else
                               WS.Cells(i, ii) = Container(ii - 1)
                        End If
                    Next ii
            End If
    Loop

Close #1
End Sub

Bonne journée
@+Thierry
 

JHA

XLDnaute Barbatruc
Bonjour à tous,
Bonjour @_Thierry

Cela est assez simple avec excel 2019.

Dans le ruban: données/A partir d'un fichier texte/CSV
Tu sélectionnes ton fichier/Importer/Transformer les données
Fractionner la colonne/ par délimiteur/ choisir le ";" et sur chaque occurence
Utiliser la première ligne pour les en-têtes
Fermer et charger

JHA
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour @JHA

Oui c'est vrai qu'avec ce fameux Power Query c'est assez simple et efficace.
Testé sur Office 2013 avec le Add-in Power Query US

1593508216358.png


Mais si jamais on rentre dans une des cellules "+GRENIER" Excel reprend la main et râle pour la formule...
Je pense qu'il faut aussi appliquer un traitement dans le Power Query Editor :

1593508478781.png


Mais là du coup le ' reste visible dans la Table, je ne sais pas trop si c'est acceptable pour François...

1593508615707.png


Alors qu'avec VBA on ne le voit pas :
1593508685779.png


Bonne journée
@+Thierry
 

JHA

XLDnaute Barbatruc
Bonjour à tous,

On peut enlever les "+" et les "-" aussi facilement

Tu vas dans requête/modifier
onglet accueil
Sélectionner la colonne "Donnée C"
Remplacer les valeurs
Valeur à rechercher
+
Remplacer par "vide"

Idem pour le -

JHA
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Euh oui carrément radical ça LoL :eek:

Mais je crains que si les services de Francois distinguent des GRENIER et des +GRENIER et des -GRENIER, ce n'est pas pour qu'une requête les transforme tous en GRENIER tout simplement et radicalement !!!

A mon avis il y aura un sérieux impact dans les traitements suivants ;)

Bonne journée
@+Thierry
 

chris

XLDnaute Barbatruc
Bonjour à tous

Je ne pige pas vos soucis

Si le fichier a bien une extension csv, que ce soit sur l'add on FR de PowerQuery avec 2010 ou sur 365, je récupère les GRENIER avec leur + ou - en texte sans erreur ni '

Si en txt il n'est pas découpé automatiquement mais le fractionnement effectué le balance bien en texte

Sinon pour François75020, c'est le copier coller qui met la grouille, comme souvent, formate tes colonnes avant et copie colle les valeurs
 
Dernière édition:

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour _Thierry, JHA, Chris,

@chris, chez moi non plus à priori, mais si vous éditez la cellule et la validez l'erreur #Nom apparaît

Dans le fichier joint (base du fichier de JHA du post #2) j'ai ajouté une fonction 'Permutation' à la requête qui transforme les '+GRENIER' et '-GRENIER' en GRENIER+ et GRENIER-.
Nous pourrions le faire directement à l'appel de 'TransformColumns' mais c'est plus lisible par une fonction indépendante.

Cordialement
 

Pièces jointes

  • Classeur Test- JHA +.xlsx
    25.7 KB · Affichages: 4

chris

XLDnaute Barbatruc
RE

On n'est pas sensé éditer le résultat d'une requête mais il suffit de mettre la colonne du tableau résultant dans Excel en texte et même en éditant, le problème disparait.

PowerQuery transmet le type mais ne formate pas la cellule : les résultats doivent souvent faire l'objet d'un formatage pour les dates et les nombres, comme pour tout tableau créé manuellement
 
Dernière édition:

JHA

XLDnaute Barbatruc
Bonjour à tous,

On peut également fractionner la colonne, notre ami à donc de multiples possibilités, à lui de choisir ce qui lui convient le mieux.

JHA
 

Pièces jointes

  • Classeur Test bis.xlsx
    24.6 KB · Affichages: 6

François75020

XLDnaute Nouveau
Merci à tous pour votre aide et votre implication.
chris tu avais raison c'est bien le copier coller qui posait problème
_Thierry ta solution fonctionne aussi.

pour ma part j'ai choisi de modifier le "copier/coller" en une égalité de range ça a solutionné mon problème.

DerniereLigne = ActiveWorkbook.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row

VB:
j'ai remplacé :

ActiveWorkbook.Sheets(1).Range("A1:R" & DerniereLigne).Row).Copy

Workbooks(fich_source).Sheets(2).[A1].PasteSpecial xlValues


par

Workbooks(fich_source).Sheets(2).Range("A1:R" & DerniereLigne) = ActiveWorkbook.Sheets(1).Range("A1:R" & DerniereLigne).Value

et le format me convient, les + - ont disparu mais je n'ai plus de problème dans mes formules

A bientôt
 

Statistiques des forums

Discussions
314 719
Messages
2 112 183
Membres
111 456
dernier inscrit
Bologne5