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 :

transposition + calcul données autre fichier


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    novembre 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : novembre 2009
    Messages : 8
    Points : 5
    Points
    5
    Par défaut transposition + calcul données autre fichier
    Bonjour,

    Je souhaiterais savoir si quelqu'un sait (ou a déjà réalisé) comment importer des données à partir d'un autre classeur Excel contenant "n" onglets.

    La procédure est la suivante:
    1) Ouvrir le classeur
    2) Sélectionner sur chaque onglet une cellule de destination
    3) Copier cette ou ces cellules de le classeur de synthèse


    Je suis totalement débutant en VBA et en programmation donc si jamais quelqu'un peut m'aider, je le remercie d'avance.

    Le code plante et me dit l'indice n'appartient pas à la sélection (je présume qu'il y a un soucis dans ma boucle et le "i" représentant le numéro des onglets...)

    Voici le 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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
    Sub calcul()
     
    'PARTIE 1///////////////////////////
     
    'type variables itération
     
    Dim i As Integer
    Dim j As Integer
     
    Dim Produits As String
     
    Dim Enzyme As Double
     
    Dim DossierTravail As String
    Dim ouvre As String
    Dim ouvre2 As String
    Dim fichier As String
    Dim nom As String
     
    Application.ScreenUpdating = False  'pour désactiver le rafraichissement de l'écran pendant l'éxecution de la macro
     
    fichier = "Produits" & ".xls"
     
    DossierTravail = ActiveWorkbook.Path
     
    ouvre = DossierTravail & "\test\" & fichier
    ouvre2 = DossierTravail & "\Indicateurs_bdd_essai.xls"
     
     
     
    Workbooks.Open Filename:=ouvre
     
    For i = 1 To Sheets.Count
     
    Sheets("i").Select
    Range("S2").Select
    nom = Range("S2").Value
     
     
    For j = 1 To 181
     
     
    ' //////////////////    transposition Enzyme   ///////////////////////////
     
     
    If (Range("A" & j) = "Enzyme") Then
    Range("H" & j).Select
    Enzyme = Range("C" & j).Value
    End If
     
    ' //////////////////    ecriture dans fichier de synthese///////////////////////////
     
    ThisWorkbook.Activate
    Sheets("Feuil3").Select
     
    Range("Q" & i + 3) = nom
     
    Range("R" & i + 3).Select
     Application.CutCopyMode = False
        ActiveCell.FormulaR1C1 = Enzyme
     
    Next j
     
    Next i
     
    Workbooks(fichier).Close
     
     
     
    End Sub

  2. #2
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonjour.

    Tu peux déjà remplacerpar De plus s'il y a des feuilles graphiques, il serait préférable d'utiliser plutôt WorkSheets.

    PGZ
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  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
    Points : 15 273
    Points
    15 273
    Par défaut
    Bonjour arkange, bienvenue sur le forum.
    Déjà, si tu incrémentes une variable, la variable est une valeur. Tu as correctement déclaré i comme integer, et i est effectivement une valeur.
    Donc, ce n'est pas Sheets("i").Select mais Sheets(i).Select.
    Sans aller plus loin

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    novembre 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : novembre 2009
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Bonjour et merci de vos 2 réponses.

    La procédure plante toujours
    " l'indice n'appartient pas à la séection" en faisant référence à la variable i.

    ?

    Je souhaite en effet ouvrir un classeur excel XLS1
    Puis rechercher des chaque onglet "1, 2... n" de ce classeur la cellule "..." dont la macro copie la valeur dans le classeur de synthèse XLS2 et ainsi de suite.

    Si quelqu'un a une idée d'ou peut provenir le plantage, merci d avance.

  5. #5
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonjour.

    Un autre pb, le Sheets.Count ne te renvoie peut-être pas la bonne valeur.

    Tu peux ajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim wbk as Excel.Workbook
    Remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Workbooks.Open Filename:=ouvre
    For i = 1 To Sheets.Count
        Sheets("i").Select
        Range("S2").Select
        nom = Range("S2").Value
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Set wbk = Application.Workbooks.Open(ouvre)
    For i = 1 to wbk.WorkSheets.Count
        nom = wbk.Worksheets(i).Range("S2").Value
    Si tu as toujurs des pb, montre le code après modif et regarde en debug la valeur de i lors du plantage.

    PGZ
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    novembre 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : novembre 2009
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Bonjour et merci pour la nouvelle aide.

    La macro tourne et copie bien la cellule.
    Par contre, la boucle ne marche pas elle renvoit à chaque fois un 0 alors que les valeurs sont des nombres non nuls ??

    Voici le code entier:

    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
     
    Sub calcul()
     
    'PARTIE 1///////////////////////////
     
    'type variables itération
     
    Dim i As Integer
    Dim j As Integer
    Dim Produits As String
     
    'type ///////////
     
    Dim CRE_Petrole_cycle As Double
    Dim val1 As Double
    Dim DossierTravail As String
    Dim ouvre As String
    Dim ouvre2 As String
    Dim fichier As String
    Dim nom As String
    Dim wbk As Excel.Workbook
     
    Application.ScreenUpdating = False
    'pour désactiver le refraichissement de l'écran pendant léxecution de la macro
    fichier = "Produits" & ".xls"
    DossierTravail = ActiveWorkbook.Path
    ouvre = DossierTravail & "\test\" & fichier
    ouvre2 = DossierTravail & "\Indicateurs_bdd_essai.xls"
     
    Set wbk = Application.Workbooks.Open(ouvre)
    For i = 1 To wbk.Worksheets.Count
        nom = wbk.Worksheets(i).Range("S2").Value
     
     
    '//////////////////////////////////// test dans la fichier (Produits)  ///////////////////////////////////////////////
     
    For j = 1 To 181
     
    ' //////////////////    transposition CRE_Petrole   ///////////////////////////
     
    If (Range("A" & j) = "CRE_Petrole") Then
    Range("C" & j).Select
    CRE_Petrole_cycle = Range("C" & j).Value
    End If
     
     
    '/////////////////////////////////// ecriture dans fichier source (Indicateur_bdd_essai)  ///////////////////////////
     
    ThisWorkbook.Activate
    Sheets("Feuil3").Select
     
    Range("Q" & i + 3) = nom
     
    Range("R" & i + 3).Select
     Application.CutCopyMode = False
        ActiveCell.FormulaR1C1 = CRE_Petrole_cycle
     
    Next j
     
    Next i
     
    Workbooks(fichier).Close
     
    End Sub
    Merci encore de vos précieux conseils (pour des non experts de vba comme moi, cela m'aide énormément!)

  7. #7
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonjour

    Citation Envoyé par arkange015 Voir le message
    Par contre, la boucle ne marche pas elle renvoit à chaque fois un 0 alors que les valeurs sont des nombres non nuls ??
    Je ne comprends pas quel est ton nouveau problème. Tu peux être plus explicite? Une boucle est une boucle, et elle ne renvoie rien.

    PGZ
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    novembre 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : novembre 2009
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    En fait, lors que la copie d'une cellule ou il y a du texte, cela se copie normalement.

    Par contre, dans les cellules où il y a une valeur numérique cela copie dna sle fichier de synthèse "0" alors que les cellules sont ont des valeurs non nulles (en écriture scientifique) ???

    D'avance merci si quelqu'un voit dans le code et dans la boucle là où il y a un soucis..

  9. #9
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonjour.

    As-tu essayé d'écrire avec .Value plutôt que .FormulaR1C1?
    Tu fais aussi des sélections qui ne servent à rien.

    Tu peux donc remplacer
    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
    nom = wbk.Worksheets(i).Range("S2").Value
     
     
    '//////////////////////////////////// test dans la fichier (Produits)  ///////////////////////////////////////////////
     
    For j = 1 To 181
     
    ' //////////////////    transposition CRE_Petrole   ///////////////////////////
     
    If (Range("A" & j) = "CRE_Petrole") Then
    Range("C" & j).Select
    CRE_Petrole_cycle = Range("C" & j).Value
    End If
     
     
     
     
    '/////////////////////////////////// ecriture dans fichier source (Indicateur_bdd_essai)  ///////////////////////////
     
    ThisWorkbook.Activate
    Sheets("Feuil3").Select
     
    Range("Q" & i + 3) = nom
     
    Range("R" & i + 3).Select
     Application.CutCopyMode = False
        ActiveCell.FormulaR1C1 = CRE_Petrole_cycle
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Thisworkbook.Worksheets("Feuil3").Range("Q" & i + 3).Value=wbk.Worksheets(i).Range("S2").Value
    Thisworkbook.Worksheets("Feuil3").Range("R" & i + 3).Value=wbk.Worksheets(i).Range("C" & j).Value
    Il y a aussi probablement un pb dans la structure de ton code, car à chaque passage dans la boucle j, tu écris dans les mêmes cellules.

    Bon courage,

    PGZ
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

Discussions similaires

  1. Copier des données excel dans un autre fichier excel
    Par titemireille dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 04/10/2007, 20h57
  2. [VBA-E]récupérer donnée autre fichier
    Par ferronimus dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 18/04/2007, 09h05
  3. Réponses: 5
    Dernier message: 13/12/2006, 16h08
  4. Réponses: 3
    Dernier message: 23/09/2006, 15h19
  5. Données dans un autre fichier xls
    Par madislak dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/07/2006, 15h26

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