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 :

[VBA-E] Récupération du nom d'un onglet et d'une valeur dans un autre fichier


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 175
    Points : 91
    Points
    91
    Par défaut [VBA-E] Récupération du nom d'un onglet et d'une valeur dans un autre fichier
    Bonjour,

    J'ai un fichier contenant plusieurs onglets et je voudrais que pour chaque nom d'onglet on verifie s'il existe dans une colonne d'un autre fichier et dans ce cas on retoure la valeur associée.
    Cette valeur devra être retourner sous la feuille portant le nom de l'onglet.

    Pouvez vous m'aidez pour le code
    je pense à quelque chose comme ç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
    20
    21
    22
    23
    24
    Sub Calcul_lambda onglet()
     
        Dim Feuille As Worksheet
        Application.ScreenUpdating = False
        For Each Feuille In ThisWorkbook.Worksheets
     
         Set CL2 = Workbooks("Recap-Calcul-Fides-" & NomCarte & ".xls")
         Set FL2 = CL2.Worksheets("Recap-Fides")  
     
         Workbooks(CL2).Activate
     
         j = 8 
         Do While Feuille <> FL2.Range("A" & j).Value    
         j = j + 1
         Loop
     
         FL2.Range("E" & j).Select
     
         Windows("Calcul-lambda-Conn" &NomCarte).Activate
         Worksheets("Feuille").Range("L2").Value = FL2.Range("E" & j).
     
        Next Feuille
        Application.ScreenUpdating = True
    End Sub
    Merci d'avance

  2. #2
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    667
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2007
    Messages : 667
    Points : 870
    Points
    870
    Par défaut
    Bonjour,

    Tu as quoi comme erreur ? Ca ne te donne pas le bon resultat ou ca bloque completement ?

    A vu de nez je pense que ca doit bloquer ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Do While Feuille <> FL2.Range("A" & j).Value
    et ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Windows("Calcul-lambda-Conn" &NomCarte).Activate
    a remplacer (peut etre) par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Do While Feuille.Name<> FL2.Range("A" & j).Value
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Windows("Calcul-lambda-Conn" & NomCarte).Activate
    Precise un peu plus ton probleme s'il te plait

  3. #3
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 175
    Points : 91
    Points
    91
    Par défaut
    Mon code ne marche pas il ne se passe rien

    pas d'erreur d'exécution

    pouvez vous m'éclairer

    merci

  4. #4
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    667
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2007
    Messages : 667
    Points : 870
    Points
    870
    Par défaut
    Pas d'erreur d'execution ? Si je copie ce que tu as ecrit j'ai des erreurs des la compilation ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sub Calcul_lambda onglet()
    et ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("Feuille").Range("L2").Value = FL2.Range("E" & j).
    Copie le code complet s'il te plait c'est plus facile

    Sinon voila un code qui marche
    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
    Sub Calcul_lambda_onglet()
     
    Dim Feuille As Worksheet, FL2 As Worksheet
    Dim CL2 As Workbook
    Dim j As Integer
    Dim Existe As Boolean
    Application.ScreenUpdating = False
     
    Set FL2 = Workbooks("Book2").Worksheets("sheet1")
    For Each Feuille In ThisWorkbook.Worksheets
     
    j = 1
    Do
     
    If Feuille.Name = FL2.Range("A" & j).Value Then
    Existe = True
    Exit Do
    Else
    j = j + 1
    End If
     
    if j > 100 then exit do 'evite de boucler indefiniment si le nom n'apparait pas
     
    Loop
     
    If Existe Then 
    'ici tu fais ce que tu veux (copier le nom de l'onglet, de la ligne....)
    end if
     
    Existe = False
    Next Feuille
    Application.ScreenUpdating = True
    End Sub
    Book2 contient des noms d'onglet dans la colonne A en partant de la ligne 1 dans Sheet1. A adapter a tes besoins

  5. #5
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 175
    Points : 91
    Points
    91
    Par défaut
    Merci pour ton code tonton fred,

    Je l'ai adapté mais j'ai toujours le même problème, c'est à dire rien dans la cellule voulu. J'ai rajouté la ligne Workbooks("Calcul-lambda-Res-" & NomCarte).Activate
    avant For Each Feuille In ThisWorkbook.Worksheets sinon je vois pas comment dire que Feuille appartient à ce fichier. J'ai mis en gras les principales modifications de ton code.

    Dans ton exemple Feuille est situé sur Book2?

    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
    Public Sub Ajout_CalculFides(NomCarte As String, Version As String)
    
    Dim Feuille As Worksheet, FL2 As Worksheet
    Dim CL2 As Workbook
    Dim j As Integer
    Dim Existe As Boolean
    Application.ScreenUpdating = False
    
    Set FL2 = Workbooks("Recap-Calcul-Fides-" & NomCarte & ".xls").Worksheets("Recap-Fides")
    Workbooks("Calcul-lambda-Res-" & NomCarte).Activate
    For Each Feuille In ThisWorkbook.Worksheets
    
    nb_lignes_totales = FL2.UsedRange.Rows.Count
    j = 8
    Do
    
    If Feuille.Name = FL2.Range("A" & j).Value Then
    Existe = True
    Exit Do
    Else
    j = j + 1
    End If
    
    If j > nb_lignes_totales Then Exit Do 'evite de boucler indefiniment si le nom n'apparait pas
    
    Loop
    
    If Existe Then
    
        FL2.Range("E" & j).Select
        Workbooks("Calcul-lambda-Res-" & NomCarte & ".xls").Feuille.Range("L2").Value = FL2.Range("E" & j)
    
    End If
    
    Existe = False
    Next Feuille
    Application.ScreenUpdating = True
    End Sub

  6. #6
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    667
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2007
    Messages : 667
    Points : 870
    Points
    870
    Par défaut
    Feuille est defini ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each Feuille In ThisWorkbook.Worksheets
    Donc il fait partie du workbook qui contient la macro (pas book2)

    En lisant ton code un doute me vient: tu veux lire les noms des feuilles dans le Workbooks("Calcul-lambda-Res-" & NomCarte) et les comparer avec FL2.Range("A" & j).Value ?
    Le plus simple serait que tu dises quel fichier lance la macro, quel fichier contient les feuilles et quel fichier contient la colonne avec les noms, je pense que le soucis est a ce niveau la.

    EDIT:
    Je pense que l'erreur en particulier est ici:
    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
    Public Sub Ajout_CalculFides(NomCarte As String, Version As String)
    
    Dim Feuille As Worksheet, FL2 As Worksheet
    Dim CL2 As Workbook
    Dim j As Integer
    Dim Existe As Boolean
    Application.ScreenUpdating = False
    
    Set FL2 = Workbooks("Recap-Calcul-Fides-" & NomCarte & ".xls").Worksheets("Recap-Fides")
    
    For Each Feuille In WorkbookQuiContientLesFeuilles.Worksheets _
    'Workbooks("Calcul-lambda-Res-" & NomCarte) peut etre? thisworkbook _
    est le classeur qui contient la macro meme si tu actives un classeur avant
     
    nb_lignes_totales = FL2.UsedRange.Rows.Count
    j = 8
    Do
    
    If Feuille.Name = FL2.Range("A" & j).Value Then
    Existe = True
    Exit Do
    Else
    j = j + 1
    End If
    
    If j > nb_lignes_totales Then Exit Do 'evite de boucler indefiniment si le nom n'apparait pas
    
    Loop
    
    If Existe Then
    
        FL2.Range("E" & j).Select
        Workbooks("Calcul-lambda-Res-" & NomCarte & ".xls").Feuille.Range("L2").Value = FL2.Range("E" & j) 
    'aussi, chez moi ajouter ".xls" met une erreur ici
    
    End If
    
    Existe = False
    Next Feuille
    Application.ScreenUpdating = True
    End Sub

  7. #7
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 175
    Points : 91
    Points
    91
    Par défaut
    Citation Envoyé par tonton fred
    Feuille est defini ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each Feuille In ThisWorkbook.Worksheets
    Donc il fait partie du workbook qui contient la macro (pas book2)
    Je n'ai pas de macro dans mes workbooks. J'ai défini mes macros dans des modules appellés depuis des UserForm

    Pour essayer de préciser un peu
    J'ai deux classeurs:
    Recap-Calcul-Fides-" & NomCarte qui liste des composants et leurs tx de défaillance,(feuille "Recap-Fides") definie sous FL2
    Et Calcul-lambda-Res qui donne le detail des composant de type Res (Résistance), sur ce classeur j'ai une feuille pour chaque composant. Le nom du composant étant le nom de la feuille

    Je voudrais renseigner (sur le classeur Calcul-lambda-Res) la valeur du tx de défaillance (FL2) de chaque composant sur les différentes feuilles.
    c'est à dire que si le nom de l'onglet est dans la liste (FL2) alors on renseigne la valeur associée (en "L2" de la feuille correspondante).

    Citation Envoyé par tonton fred
    tu veux lire les noms des feuilles dans le Workbooks("Calcul-lambda-Res-" & NomCarte) et les comparer avec FL2.Range("A" & j).Value ?
    Oui c'est ce que j'essais de faire mais sans succès

    fichier qui contient les feuilles : Calcul-lambda-Res-" & NomCarte
    fichier qui contient la colonne avec les noms : Recap-Calcul-Fides-" & NomCarte

    J'ai essayé mon code avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each Feuille In Workbooks("Calcul-lambda-Res-" & NomCarte).Worksheets
    mais là j'ai une erreur d'exécution 1004, La méthode de la classe range à échoué.
    Le fait de mettre ".xls" ne change apparemment rien, je l'ai retiré

  8. #8
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    667
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2007
    Messages : 667
    Points : 870
    Points
    870
    Par défaut
    Citation Envoyé par alex.a
    Je n'ai pas de macro dans mes workbooks. J'ai défini mes macros dans des modules appellés depuis des UserForm
    Oui, mais ce module est contenu dans un fichier, thisworkbook y fait reference.

    Citation Envoyé par alex.a
    J'ai essayé mon code avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each Feuille In Workbooks("Calcul-lambda-Res-" & NomCarte).Worksheets
    mais là j'ai une erreur d'exécution 1004, La méthode de la classe range à échoué.
    Alors ca c'est bizarre puisqu'il n'y a pas de range a cette ligne... Pourrais tu copier toute ta procedure ?

  9. #9
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 175
    Points : 91
    Points
    91
    Par défaut
    La ligne de code renvoyé est celle-ci

    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
    Public Sub Ajout_CalculFides(NomCarte As String, Version As String)
    
    Dim Feuille As Worksheet, FL2 As Worksheet
    Dim CL2 As Workbook
    Dim j As Integer
    Dim Existe As Boolean
    Application.ScreenUpdating = False
    
    Set FL2 = Workbooks("Recap-Calcul-Fides-" & NomCarte & ".xls").Worksheets("Recap-Fides")
    'Workbooks("Calcul-lambda-Res-" & NomCarte).Activate
    For Each Feuille In Workbooks("Calcul-lambda-Res-" & NomCarte).Worksheets
    
    nb_lignes_totales = FL2.UsedRange.Rows.Count
    j = 8
    Do
    
    If Feuille.Name = FL2.Range("A" & j).Value Then
    Existe = True
    Exit Do
    Else
    j = j + 1
    End If
    
    If j > nb_lignes_totales Then Exit Do 'evite de boucler indefiniment si le nom n'apparait pas
    
    Loop
    
    If Existe Then
              
        Workbooks("Calcul-lambda-Res-" & NomCarte).Worksheets(Feuille.Name).Range("L2").Select
        Workbooks("Calcul-lambda-Res-" & NomCarte).Feuille.Range("L2").Value = FL2.Range("E" & j).Value
    
    End If
    
    Existe = False
    Next Feuille
    Application.ScreenUpdating = True
    End Sub

  10. #10
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    667
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2007
    Messages : 667
    Points : 870
    Points
    870
    Par défaut
    Feuille est deja defini comme faisant partie de la collection Workbooks("Calcul-lambda-Res-" & NomCarte).Worksheets a cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each Feuille In Workbooks("Calcul-lambda-Res-" & NomCarte).Worksheets
    Donc ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks("Calcul-lambda-Res-" & NomCarte).Feuille.Range("L2").Value = FL2.Range("E" & j).Value
    il suffit d'ecrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Feuille.Range("L2").Value = FL2.Range("E" & j).Value
    .

    Cette ligne ne sert a rien.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks("Calcul-lambda-Res-" & NomCarte).Worksheets(Feuille.Name).Range("L2").Select
    La plupart du temps on peut se passer de activate et select.

    Ce qui donne finalement:
    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
    Public Sub Ajout_CalculFides(NomCarte As String, Version As String)
     
    Dim Feuille As Worksheet, FL2 As Worksheet
    Dim CL2 As Workbook
    Dim j As Integer
    Dim Existe As Boolean
    Application.ScreenUpdating = False
     
    Set FL2 = Workbooks("Recap-Calcul-Fides-" & NomCarte & ".xls").Worksheets("Recap-Fides")
    For Each Feuille In Workbooks("Calcul-lambda-Res-" & NomCarte).Worksheets
     
    nb_lignes_totales = FL2.UsedRange.Rows.Count
    j = 8
    Do
     
    If Feuille.Name = FL2.Range("A" & j).Value Then
    Existe = True
    Exit Do
    Else
    j = j + 1
    End If
     
    If j > nb_lignes_totales Then Exit Do 'evite de boucler indefiniment si le nom n'apparait pas
     
    Loop
     
    If Existe Then
    Feuille.Range("L2").Value = FL2.Range("E" & j).Value
    End If
     
    Existe = False
    Next Feuille
    Application.ScreenUpdating = True
    End Sub

  11. #11
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 175
    Points : 91
    Points
    91
    Par défaut
    Super ça marche !!!

    Un grand merci à toi tonton fred pour ton aide et tes conseils qui m'ont beaucoup appris.
    encore merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 17/02/2011, 22h03
  2. [VBA-E] Bloquer le nom d'un onglet
    Par marsupilami34 dans le forum Excel
    Réponses: 2
    Dernier message: 03/04/2007, 13h46
  3. [VBA-Excel] Récupération du nom de l'onglet
    Par marsupilami34 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/01/2007, 10h11
  4. [VBA Excel] Copie d'une feuille dans un autre fichier
    Par nattyman dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/08/2006, 10h35
  5. [VBA] Recherche d'une valeur dans un autre fichiers puis
    Par Nicos77 dans le forum Général VBA
    Réponses: 11
    Dernier message: 24/03/2006, 11h24

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