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 :

Importation de données avec conditions


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2007
    Messages : 89
    Par défaut Importation de données avec conditions
    Bonjour,

    Pour simplifier une procédures assez lourde j'ai créé une macro qui bloque à un mmt je ne sais pas pkoi....

    Je tiens d'abord à dire que je suis un fan de l'aide VBA ms en ce moment je suis au luxembourg et mon pc a été réinstallé en Italien (me demander pas pkoi...) dc je capte ke dalle (et on ne se moque pas merci !!!)

    Donc pour faire simple : pour chaque ligne, si ds la collone E il y a : "action " ou "Obligation " alors je prend les collones H, G et N (dans ce fichier et pour une ligne J) que je copie dans un autre fichier en A, B et C.

    Voici 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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    Sub copy_tech()
     
    'J'ouvre le fichier qui m'interesse
    Workbooks.Open Filename:="T:\Arnaud Test VBA\Test World Invest\AINV REPORTS\0071006.CSV", local:=True
     
    Dim cond1 As String
    Dim cond2 As String
     
    cond1 = "ACTION    "
    cond2 = "OBLIGATION    "
     
    Windows("0071006.CSV").Activate
     
    ' Je demarre la recherche de ma condition
    For J = 1 To 400
    d = J + 14
     
    If Sheets("0071006").Cells(5, J).Value = cond1 Or Sheets("0071006").Cells(5, J).Value = cond2 Then
     
    'Ici ca fonctionne pour les 6 premiers J après ca bug et ca me met erreur 9 : "indice non incluso nell'intervallo" = "index non inclus dans l'intervalle"
     
    ' Je prend la valeur en H8 du fichier "PRICE CHECK - WI.xls" et la copie dans Worksheets("TECH").Cells(d, 1) --> d ct pour eviter de chercher la dernier ligne 
     
        Cells(J, 8).Select
        Selection.Copy
        Windows("PRICE CHECK - WI.xls").Activate
        ActiveSheet.Paste Destination:=Worksheets("TECH").Cells(d, 1)
     
    'pareil ici...
        Windows("0071006.CSV").Activate
        Cells(J, 7).Select
        Selection.Copy
        Windows("PRICE CHECK - WI.xls").Activate
        ActiveSheet.Paste Destination:=Worksheets("TECH").Cells(d, 2)
     
    'pareil ici...    
        Windows("0071006.CSV").Activate
        Cells(J, 14).Select
        Selection.Copy
        Windows("PRICE CHECK - WI.xls").Activate
        ActiveSheet.Paste Destination:=Worksheets("TECH").Cells(d, 3)
     
       End If
     
     J = J + 1
     
    Next J
     
    End Sub
    Bon ca marche pour deux lignes et après plus rien ...

    Merci d'avance !

    PS : si qq a des pb avec excel en italien je commence à maitriser

  2. #2
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 59

    Informations forums :
    Inscription : Août 2007
    Messages : 36
    Par défaut proposition de solution
    Bonjour,

    j'ai fait tourner ton code et tenté de le déboguer. Pour simplifier, je n'ai utilisé qu'un seul fichier et j'ai remplacé les windows(NN).activate par des sheets. activate:

    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
     
    Sub copy_tech()
     
    'J'ouvre le fichier qui m'interesse
    ' Workbooks.Open Filename:="T:\Arnaud Test VBA\Test World Invest\AINV REPORTS\0071006.CSV", local:=True
     
    Dim cond1 As String
    Dim cond2 As String
     
    cond1 = "action"
    cond2 = "Obligation"
     
    Sheets("0071006").Activate
     
    ' Je demarre la recherche de ma condition
    For J = 1 To 400
    d = J + 14
     
    If Sheets("0071006").Cells(J, 5).Value = cond1 Or Sheets("0071006").Cells(J, 5).Value = cond2 Then
     
    'Ici ca fonctionne pour les 6 premiers J après ca bug et ca me met erreur 9 : "indice non incluso nell'intervallo" = "index non inclus dans l'intervalle"
     
    ' Je prend la valeur en H8 du fichier "PRICE CHECK - WI.xls" et la copie dans Worksheets("TECH").Cells(d, 1) --> d ct pour eviter de chercher la dernier ligne
     
        Sheets("0071006").Activate
        Cells(J, 8).Select
        Selection.Copy
        Sheets("TECH").Activate
        ActiveSheet.Paste Destination:=Worksheets("TECH").Cells(d, 1)
     
    'pareil ici...
        Sheets("0071006").Activate
        Cells(J, 7).Select
        Selection.Copy
        Sheets("TECH").Activate
        ActiveSheet.Paste Destination:=Worksheets("TECH").Cells(d, 2)
     
    'pareil ici...
        Sheets("0071006").Activate
        Cells(J, 14).Select
        Selection.Copy
        Sheets("TECH").Activate
        ActiveSheet.Paste Destination:=Worksheets("TECH").Cells(d, 3)
     
       End If
     
    Next J
     
    End Sub
    => mon analyse :
    1. dans les paramètres de CELL, tu as confondu les lignes et les colonnes dans la condition => donc tu n'as dû boucler que sur les colonnes
    2. dès lors que tu as for i = 1 to 400 ... next i, ce n'est pas la peine de faire i = i+1 car sinon tu vas de 2 en 2 ...


    amélioration envisageable :
    ainsi, ton code doit être interdit aux épileptiques ... essaye ça:
    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
     
    Sheets("TECH").Activate
     
    If Sheets("0071006").Cells(J, 5).Value = cond1 Or Sheets("0071006").Cells(J, 5).Value = cond2 Then
     
    'Ici ca fonctionne pour les 6 premiers J après ca bug et ca me met erreur 9 : "indice non incluso nell'intervallo" = "index non inclus dans l'intervalle"
     
    ' Je prend la valeur en H8 du fichier "PRICE CHECK - WI.xls" et la copie dans Worksheets("TECH").Cells(d, 1) --> d ct pour eviter de chercher la dernier ligne
        Worksheets("TECH").Cells(d, 1) = Sheets("0071006").Cells(J, 8)
     
    'pareil ici...
        Worksheets("TECH").Cells(d, 2) = Sheets("0071006").Cells(J, 7)
     
    'pareil ici...
        Worksheets("TECH").Cells(d, 3) = Sheets("0071006").Cells(J, 14)
     
       End If
     
    Next J

  3. #3
    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
    Par défaut
    0071006.CSV est à la fois un nom de fichier et 0071006 un nom de feuilles ?
    Pour ton code, il très lourd et en outre présente un certain nombre d'erreurs. Déjà, tu peux remplacer
    Windows("0071006.CSV").Activate
    Cells(J, 7).Select
    Selection.Copy
    Windows("PRICE CHECK - WI.xls").Activate
    ActiveSheet.Paste Destination:=Worksheets("TECH").Cells(d, 2)
    Par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Workbooks("0071006.CSV").Cells(J, 7).Copy _
          destination:=Workbooks("PRICE CHECK - WI.xls").Worksheets("TECH").Cells(d, 2)
    ou encore, en instanciant tes feuilles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim FL1 as Worksheet
    Dim FL2 as Worksheet
    Set FL1 = Workbooks("0071006.CSV").Worksheets("Nom de la feuille")
    Set FL2 = Workbooks("PRICE CHECK - WI.xls").Worksheets("TECH")
        FL1.Cells(J, 7).Copy destination:=FL2.Cells(d, 2)
    Idem pour tout ton code.

    Une autre remarque, en fin de boucle, tu actives Windows("PRICE CHECK - WI.xls").
    or en début de boucle, quand tu mets
    " Cells(J, 8).Select"
    dans quel fichier es-tu censé te trouver ? Si ce n'est pas dans "PRICE CHECK - WI.xls" alors tu auras une erreur au deuxième tour de boucle.
    Commence par corriger tout ça

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2007
    Messages : 89
    Par défaut
    Oui le fichier c'est 0071006.csv et la feuille c'est 0071006 !
    Ca ne peut, malheureusement, pas être changé, trop de chose dépendent de ça !

    Ha bha merde j'étais loin du compte !!!

    Bon pour être honnête cette s*****perie d'Excel en Italien m'a vraiment soulé...

    Comme toujours merci pour ton aide ! Je vais essayer toutes ces modifs sur mon codes et on verra..

    @++

    Arnaud

  5. #5
    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
    Par défaut
    Citation Envoyé par nono le golfeur Voir le message
    Oui le fichier c'est 0071006.csv et la feuille c'est 0071006 !
    Ca ne peut, malheureusement, pas être changé, trop de chose dépendent de ça !
    Ok, pas d'importance, c'était pour être sûr

  6. #6
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 59

    Informations forums :
    Inscription : Août 2007
    Messages : 36
    Par défaut
    as tu également de prendre en compte la crrection que j'ai mise dans ma première réponse:
    avec ces corrections, chez moi, ça tourne jusqu'à la ligne 400...

    A+
    Dam2P

  7. #7
    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
    Par défaut
    Désolé, dam2p, je n'avais pas vu ta réponse. Elle est meilleure que la mienne. Tu devrais l'adopter, nonos le golfeur
    Juste une chose : Si tu instancies tes feuilles ça simplifiera encore le code.
    A toi de jouer, nono.

Discussions similaires

  1. Importer des données avec une condition
    Par marcelstan dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 07/05/2014, 16h53
  2. db2: récupération de données avec condition max
    Par letuyen dans le forum Langage SQL
    Réponses: 8
    Dernier message: 07/03/2007, 16h45
  3. Réponses: 4
    Dernier message: 09/05/2006, 08h55
  4. import de données avec BCP
    Par doudou10000 dans le forum Outils
    Réponses: 2
    Dernier message: 09/12/2005, 16h10
  5. [DTS] Import de données avec des doublons
    Par Hotchotte dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 24/03/2005, 14h19

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