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 :

macro passage Excel 2000 à 2003


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 77
    Points : 50
    Points
    50
    Par défaut macro passage Excel 2000 à 2003
    Bonjour,

    J'utilise une marcro sous Excel 2000 qui fonctionne très bien. Celle-ci me crée un fichier Excel rempli d'informations issues d'un fichier .csv.

    Je rencontre un problème en exécutant cette macro sur un autre pc qui utilise la version 2003 d'Excel. La macro tourne bien mais le résultat final est mauvais : dans mon fichier Excel, j'ai toujours la même ligne de données qui se répéte dans tout mon tableau et ces données ne sont pas correctement implantées de le tableau => elles se suivent toutes séparées par un "point-virgule" et ne sont pas dispatchées correctement dans les cases de mon tableau.

    Ce problème est-il à votre avis lié au passage à Excel 2003 ou bien à un paramétrage de Excel sur le nouveau pc ?

    Ci-dessous le code : (les chemins ne sont pas indiqués pour une meilleure lisibilité).

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    Application.ScreenUpdating = False
     
        nom = Range("E10")
     
        If nom = "xxx" Then
            ChDir "T:\"
        Workbooks.Open Filename:="\\chemin\edenvg.csv"
        Range("J6").Select
        End If
     
        ActiveCell.FormulaR1C1 = "=+TRIM(RC[-9])"
        Range("J6").Select
        Selection.AutoFill Destination:=Range("J6:S6"), Type:=xlFillDefault
        Range("J6:S6").Select
        Range("S6").Select
        Selection.ClearContents
        Range("J6:R6").Select
        Selection.AutoFill Destination:=Range("J6:R7401"), Type:=xlFillDefault
        Range("J6:R7401").Select
        Selection.Copy
        ActiveWindow.ScrollColumn = 1
        ActiveWindow.LargeScroll Down:=-18
        ActiveWindow.ScrollRow = 1
        Range("A6").Select
        Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
            False, Transpose:=False
        Columns("J:BF").Select
        Application.CutCopyMode = False
        Selection.Delete Shift:=xlToLeft
        Columns("I:I").Select
        Selection.Replace What:=".", Replacement:=".", LookAt:=xlPart, _
            SearchOrder:=xlByColumns, MatchCase:=False
        Selection.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
            SearchOrder:=xlByColumns, MatchCase:=False
        Selection.NumberFormat = "0"
        Columns("A:A").Select
        Selection.Replace What:="-", Replacement:="-", LookAt:=xlPart, _
            SearchOrder:=xlByColumns, MatchCase:=False
        Selection.NumberFormat = "dd/mm/yy"
        Columns("B:B").Select
        Selection.Insert Shift:=xlToRight
        Columns("D:D").Select
        Selection.Copy
        Range("B1").Select
        ActiveSheet.Paste
        Columns("D:D").Select
        Application.CutCopyMode = False
        Selection.Delete Shift:=xlToLeft
        Range("A6:I4995").Select
        Selection.Copy
        ChDir "X:\ etc"
        Workbooks.Open Filename:= _
            "\\chemin\fichier.xls"
        Range("A4").Select
        Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
            False, Transpose:=False
        ActiveWindow.ScrollRow = 2140
        ActiveWindow.ScrollRow = 1
         Columns("C:C").Select
        Selection.Replace What:="2004", Replacement:="04", LookAt:=xlPart, _
            SearchOrder:=xlByColumns, MatchCase:=False
        Windows("edenvg.csv").Activate
        ActiveWindow.Close
    End Sub
    Merci d'avance pour vos réponses.

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Hello
    Tu as de la chance que ton code ait fonctionné un jour sur Excel 2000
    J'ai commencé à corriger ce qui ne me semblait, au départ, n'être que des "lourdeurs" dans le code. Il y a plus. Tu sembles n'avoir pas compris certaines lignes.
    Voici déjà quelques corrections. En remarque le code corrigé et en clair la correction
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
        'ChDir "T:\" 'si le fichier se trouve sur un autre volume, 
        'cette ligne est inopérante -> utiliser chdrive pour changer de volume,
        'ou/et chdir pour changer de répertoire
        'Ici, cette ligne suffit
        If nom = "xxx" Then Workbooks.Open Filename:="\\chemin\edenvg.csv"
     
        'ActiveCell.FormulaR1C1 = "=+TRIM(RC[-9])" 'ActiveCell est ici dangereux : 
        'Si nom <> "xxx" Activecell peut être n'importe quoi !
        Range("J6").FormulaR1C1 = "=+TRIM(RC[-9])" 'suffit ici...
     
        '... quoique j'ai un doute sur l'utilisation de Supprespace().
        'Supprespace donne un texte. Que veux-tu récupérer un texte ou une valeur
        'Si c 'est une valeur, je verrais plutôt CNUM
        'Range("J6").Formula = "=CNUM(A6)" 'C'est toi qui vois
     
        'Range("J6").Select 'inutile de sélectionner la cellule
        'Selection.AutoFill Destination:=Range("J6:S6"), Type:=xlFillDefault
        'Evite la sélection : Remplace par une simple copie. L'incrémentation est automatique 
        Range("J6").Copy Range("J6:S6")
     
     
        'Range("J6:S6").Select 'Totalement inutile
        'Range("S6").Select ' sélection inutile
        'Selection.ClearContents '... A remplacer par la ligne suivante
        Range("S6").ClearContents
     
        'Range("J6:R6").Select 'inutile
        'Selection.AutoFill Destination:=Range("J6:R7401"), Type:=xlFillDefault
        Range("J6:R6").Copy Range("J6:R7401")
     
        'Range("J6:R7401").Select
        'Selection.Copy
        Range("J6:R7401").Copy
        'Macro enregistrée en faisant : Utilisation de la barre de défilement vertical (!)
        'ActiveWindow.ScrollColumn = 1
        'ActiveWindow.LargeScroll Down:=-18
        'ActiveWindow.ScrollRow = 1
     
        Range("A6").PasteSpecial Paste:=xlValues 'paramètres par défaut inutiles
        Columns("J:BF").Delete Shift:=xlToLeft
    'etc.
    Je te conseille de continuer le nettoyage, une fois réalisé, si tu as toujours un pb, tu demandes.
    Bonne journée et bon courage

  3. #3
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 77
    Points : 50
    Points
    50
    Par défaut
    Merci pour ton aide.
    J'ai réalisé les modifications mais je rencontre toujours le même problème.

    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
    29
    30
    31
    32
    33
    34
    Range("J6").FormulaR1C1 = "=+TRIM(RC[-9])"
        Range("J6").Copy Range("J6:S6")
        Range("S6").ClearContents
        Range("J6:R6").Copy Range("J6:R7401")
        Range("J6:R7401").Copy
        Range("A6").PasteSpecial Paste:=xlValues
        Columns("J:BF").Delete Shift:=xlToLeft
        Columns("I:I").Replace What:=".", Replacement:=".", LookAt:=xlPart, _
            SearchOrder:=xlByColumns, MatchCase:=False
        Columns("I:I").Replace What:=".", Replacement:=",", LookAt:=xlPart, _
            SearchOrder:=xlByColumns, MatchCase:=False
        NumberFormat = "0"
        Columns("A:A").Replace What:="-", Replacement:="-", LookAt:=xlPart, _
            SearchOrder:=xlByColumns, MatchCase:=False
        NumberFormat = "dd/mm/yy"
        Columns("B:B").Insert Shift:=xlToRight
        Columns("D:D").Select
        Selection.Copy
        Range("B1").Select
        ActiveSheet.Paste
        Columns("D:D").Select
        Application.CutCopyMode = False
        Columns("D:D").Delete Shift:=xlToLeft
        Range("A6:I4995").Copy
        ChDir "V:\chemin\fichier.xls"
        Range("A4").PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
            False, Transpose:=False
        ActiveWindow.ScrollRow = 2140
        ActiveWindow.ScrollRow = 1
         Columns("C:C").Replace What:="2004", Replacement:="04", LookAt:=xlPart, _
            SearchOrder:=xlByColumns, MatchCase:=False
        Windows("fichier.csv").Activate
        ActiveWindow.Close
    End Sub

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    En lisant ton code, j'avais perdu l'essentiel : En fait, ce que tu cherches à faire est l'ouverture d'un csv avec ";" comme séparateur de données et "." comme séparateur décimal.
    De mon côté, je ne persisterai pas avec ton code qui coupe/colle/delette dans tous les sens. Il est impossible de comprendre ce que tu veux.
    Un exemple : Le collage spécial des seules valeurs s'utilise pour remplacer les formules par leur valeur dans les cellules.
    Un fichier csv ne contenant pas de formule, c'est inutile. En outre, si le séparateur décimal n'est pas le bon, c'est bon pour donner n'importe quoi.
    Bref, pour ouvrir un csv, selon la version d'Excel utilisée, il y a des différences.
    Pour 2007, je crois que ça ne pose plus de pb (à confirmer)
    Je te conseille de lire attentivement cette discussion.
    La dernière proposition semble correspondre à ton fichier.
    Teste ça et si tu as un autre problème (disposition des données à modifier par exemple) on traitera ça séparément.
    A+

  5. #5
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 77
    Points : 50
    Points
    50
    Par défaut
    Merci beaucoup, cette technique marche effectivement.
    Par contre une fois que la macro a tourné mon fichier.csv devient un.txt, et quand je relance la macro une seconde fois...il ne trouve plus de .csv.

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Name AncienNom as NouveauNom fonctionne dans les deux sens.
    (tu aurais pu y songer tout seul, non ? )
    Ceci dit, tu n'es pas obligé de renommer le csv pour l'ouvrir en tant que txt
    Par exemple, tu peux parfaitement mettre
    Workbooks.OpenText Filename:="D:\xls\Fichier.csv", Origin:=xlWindows, _
    StartRow:=1, DataType:=xlDelimited, Semicolon:=True
    La formule n'était là que pour expliquer le principe : Pour Excel, un txt ne s'ouvre pas comme un csv.
    Bonne journée

  7. #7
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 77
    Points : 50
    Points
    50
    Par défaut
    C'est deuxième solution ne fonctionne pas chez moi. J'ai le même problème qu'au début.

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Montre le code de cette deuxième solution et dis-nous ce qui ne fonctionne pas.

  9. #9
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 77
    Points : 50
    Points
    50
    Par défaut
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    application.ScreenUpdating = False
     
        nom = Range("E11")
     
            If nom = "cccc" Then
            ChDir "T:\"
        Workbooks.OpenText Filename:="\\chemin\fichier.csv", Origin:=xlWindows, _
        StartRow:=1, DataType:=xlDelimited, Semicolon:=True
        Range("J6").Select
       End if
     
        Range("J6").FormulaR1C1 = "=+TRIM(RC[-9])"
        Range("J6").Copy Range("J6:S6")
        Range("S6").ClearContents
        Range("J6:R6").Copy Range("J6:R7401")
        Range("J6:R7401").Copy
        Range("A6").PasteSpecial Paste:=xlValues
        Columns("J:BF").Delete Shift:=xlToLeft
        Columns("I:I").Replace What:=".", Replacement:=".", LookAt:=xlPart, _
            SearchOrder:=xlByColumns, MatchCase:=False
        Columns("I:I").Replace What:=".", Replacement:=",", LookAt:=xlPart, _
            SearchOrder:=xlByColumns, MatchCase:=False
        NumberFormat = "0"
        Columns("A:A").Replace What:="-", Replacement:="-", LookAt:=xlPart, _
            SearchOrder:=xlByColumns, MatchCase:=False
        NumberFormat = "dd/mm/yy"
        Columns("B:B").Insert Shift:=xlToRight
        Columns("D:D").Select
        Selection.Copy
        Range("B1").Select
        ActiveSheet.Paste
        Columns("D:D").Select
        Application.CutCopyMode = False
        Columns("D:D").Delete Shift:=xlToLeft
        Range("A6:I4995").Copy
        ChDir "G:\chemin"
        Workbooks.Open Filename:= _
            "\\chemin\fichier.xls"
        Range("A4").PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
            False, Transpose:=False
        ActiveWindow.ScrollRow = 2140
        ActiveWindow.ScrollRow = 1
         Columns("C:C").Replace What:="2004", Replacement:="04", LookAt:=xlPart, _
            SearchOrder:=xlByColumns, MatchCase:=False
        Windows("fichier.csv").Activate
        ActiveWindow.Close
     
    End Sub
    Le problème que je rencontre est le fichier final qui n'est pas correctement rempli => j'ai des ";"

  10. #10
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    C'est ce qu'il me semblait, tu n'as pas lu la dernière proposition du thread que je t'ai indiqué.
    Le code suivant ouvre un fichier texte (.txt), avec le point (".") comme séparateur décimal et le point-virgule (";") comme séparateur de données.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Workbooks.OpenText Filename:="D:\xls\Classeur1.csv", StartRow:=1, _
        DataType:=xlDelimited, TextQualifier:=xlNone, ConsecutiveDelimiter _
            :=True, Semicolon:=True, DecimalSeparator:="."

  11. #11
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 77
    Points : 50
    Points
    50
    Par défaut
    Quand je parlais de la deuxième solution c'était à propos du code ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Workbooks.OpenText Filename:="D:\xls\Fichier.csv", Origin:=xlWindows, _
    StartRow:=1, DataType:=xlDelimited, Semicolon:=True
    J'utilise la version 2003, d'excel, quel code utiliser pour ne pas à avoir à rennomer mon fichier ?

  12. #12
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    As-tu lu ma dernière réponse ?
    Le code suivant ouvre un fichier texte (.txt), avec le point (".") comme séparateur décimal et le point-virgule (";") comme séparateur de données.
    Que veux-tu que je te dise de plus ? As-tu examiné le code ? Tu n'as même pas à renommer le fichier.

Discussions similaires

  1. Passage Excel 2000 Excel 2003
    Par babybell dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 23/02/2010, 04h18
  2. Macro Compatibilité Excel 2007-2003
    Par Julien44 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/06/2008, 14h21
  3. Affichage entre Excel 2000 & 2003
    Par Fred72 dans le forum Excel
    Réponses: 2
    Dernier message: 11/12/2007, 13h00
  4. [VBA-E]Probleme macro VBA excel 2000 2003
    Par skichatchat dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/04/2007, 21h16
  5. incompatibilité macros VBA excel 2000 et 2003
    Par hiline6 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/04/2007, 12h20

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