IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Problème pour convertir des données en VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Runsh63
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Mars 2011
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2011
    Messages : 476
    Par défaut Problème pour convertir des données en VBA
    Bonjour à vous toutes et tous,

    Je reçois un fichier brut en PDF avec des données chiffrées sous forme de tableau.
    Après avoir copier / coller ces données dans un Excel, j'ai besoin de les convertir car elles sont toutes sur une colonne par ligne.
    Je passe par une macro car il y a beaucoup de lignes. Le principe est simple. En fonction du nombre de caractère contenu dans chaque ligne, la conversion (en largeur fixe), ne se fait pas selon les mêmes critères. Voici donc mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Sub DataTreatmentTVAD()
     
    Dim LRTVAD1 As Integer, LRTVAD2 As Integer, i As Integer, j As Integer
     
    Application.ScreenUpdating = False
     
        With Sheets("Traitement TVA déductible")
     
        LRTVAD1 = .Cells(.Rows.Count, 1).End(xlUp).Row
     
            For i = To LRTVAD1
            j = Len(Trim(.Cells(i, 1).Value))
     
                If j < 35 Then
                    .TextToColumns Destination:=.Cells(i, 1), DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 1), Array(12, 1), Array(26, 1), Array(42, 1), Array(59, 1)), TrailingMinusNumbers:=True
                ElseIf j > 35 And j > 43 Then
                    .TextToColumns Destination:=.Cells(i, 1), DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 1), Array(12, 1), Array(26, 1), Array(37, 1), Array(58, 1)), TrailingMinusNumbers:=True
                Else
                    .TextToColumns Destination:=.Cells(i, 1), DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 1), Array(12, 1), Array(24, 1), Array(39, 1), Array(58, 1)), TrailingMinusNumbers:=True
                End If
     
            Next i
     
        End With
     
    Application.ScreenUpdating = True
     
    End Sub
    Je rencontre déjà un premier problème. Sur ma première cellule (A1), la valeur j est de 71. si je tape la formule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =NBCAR(SUPPRESPACE(A1))
    en cellule B1, il me donne 30. Quelqu'un peut-il m'expliquer ce que j'ai mal codé SVP ?
    Par ailleurs, et là c'est bloquant, quand je lance la macro, voilà le message d'erreur rencontré : "Erreur d'exécution '438' : Propriété ou méthode non gérée par cet objet".
    Où est-je fait l' (les) erreur(s) ?
    Je vous remercie par avance pour votre aide et vous souhaite une agréable journée.

  2. #2
    Membre éclairé Avatar de Runsh63
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Mars 2011
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2011
    Messages : 476
    Par défaut
    J'ai réussi à régler le deuxième problème.
    Par contre je ne comprends toujours pas pourquoi ma variable "j" est toujours égal à 71 alors qu'écrire la formule à la main dans Excel me ramène les valeurs que j'attends (30, 32, 40, etc...).
    Quelqu'un pourrait-il m'aider SVP ?
    Merci d'avance.

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2015
    Messages : 7
    Par défaut
    Salut !

    Je suis un gros débutant en VBA mais si tu met un "Espion" sur i ou j, vérifie si les valeurs changent (surtout pour i).
    Ensuite, si tout cela fonctionne essaye avec les fonction: exemple, ".Cells(i, 1).value" puis Trim(.Cells(i, 1).Value). C'est pour voir d'où le problème peut venir.

    D'autre pars, quand tu colle ton pdf. Tu as un truc qui s'appelle "Assitant de l'importation de texte". Il te permet de découper exactement en fonction du nombre de caractère. Il doit être possible de l'utiliser en VBA.

    Cordialement,

    Pierre =D

  4. #4
    Membre expérimenté Avatar de Denis la Malice
    Homme Profil pro
    FabManager
    Inscrit en
    Février 2013
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : FabManager
    Secteur : Services de proximité

    Informations forums :
    Inscription : Février 2013
    Messages : 133
    Par défaut
    Bonjour,
    ton code n'est pas interprétable puisque la ligne :
    est incorrecte. Il faut surement mettre quelque chose comme :
    Pour trouver une erreur, il faut avoir le code qui génère cette erreur et non un code qui ressemble à celui qui plante.

    Par pure curiosité, ça veut dire quoi LRTVAD1 ? Tu n'as rien trouvé de plus explicite comme nom de variable ? N'oublie pas que tu n'écris pas uniquement pour t'y retrouver, mais aussi pour permettre à d'autres de s'y retrouver. Ou bien renonce à demander de l'aide sur les forums

    Un numéro de ligne doit être déclaré en Long et non en Integer. La fonction Len renvoie un Long. Donc j doit être de type Long.

Discussions similaires

  1. [XL-2007] VBA problème pour passer des données EXCEL vers WORD
    Par nocontrol dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 28/07/2011, 10h01
  2. [BO XIR2] Problème pour lier des données
    Par LaPanic dans le forum Deski
    Réponses: 3
    Dernier message: 10/02/2008, 17h04
  3. [Tableaux] Problème pour modifier des données
    Par Oli_Ifre dans le forum Langage
    Réponses: 8
    Dernier message: 11/04/2007, 15h33
  4. [LDAP] problème pour récupérer des données
    Par Bizoo dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 06/04/2007, 09h09
  5. Problème pour rentrer des données dans MySQL
    Par Sandara dans le forum Requêtes
    Réponses: 8
    Dernier message: 06/06/2006, 10h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo