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 :

Copie de valeurs d'un autre fichier dans une boucle for


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Par défaut Copie de valeurs d'un autre fichier dans une boucle for
    Bonjour à vous,

    pour des besoins pro, je découvre les macro excel, mes connaissances sont donc très limitées, mais les possibilités sont intéressantes...

    Actuellement, j'ai créé une fonction qui me permet d'importer des valeurs depuis un autre fichier.
    Mon code (qui suit) fonctionne, mais je souhaiterais utiliser une boucle (For Each ?) afin de l’alléger mais je me retrouve avec des erreurs 400.

    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
    Sub LoadInfo()
        fichier = "C:\Fichier-a-Utiliser.xlsm"    
        Set WorkBookLoaded = Workbooks.Open(Filename:=fichier, ReadOnly:=True)    
        Set SheetLoaded = WorkBookLoaded.Sheets("Compte-rendu")
     
        With ThisWorkbook.Sheets("Compte-rendu")
            .Range("L5").Value = SheetLoaded.Range("L5").Value
            .Range("L6").Value = SheetLoaded.Range("L6").Value
            ' et de nombreuses autres cellules
        End With
     
        WorkBookLoaded.Close savechanges:=False
    End Sub
    dans le with je souhaiterais une commande du genre (si j'ai bien pigé) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        With ThisWorkbook.Sheets("Compte-rendu")
            For Each cellule in .Range("L5:L6, F5:F10")
                .Range(cellule).Value = SheetLoaded.Range(cellule).Value
            Next cellule
        End With
    Et quand je lance j'ai le droit à une erreur 400...

    Comment faire fonctionner ma boucle ?

    Merci de votre aide et bonne journée à vous !

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour

    ta variable cellule est déjà un objet Range (bien que tu aies omis de déclarer cette variable en la typant)
    Dès lors :
    n'a plus aucun sens (l'objet Range d'un Range ... !)

  3. #3
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par hizoka Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            For Each cellule in .Range("L5:L6, F5:F10")
                .Range(cellule).Value = SheetLoaded.Range(cellule).Value
            Next cellule
    Un conseil : déclare tes variables (instruction Dim) et indique leur type.

    Dans ton cas, "cellule" est un objet de type Range.
    Il est donc inutile de le mettre dans un Range, puisque ça en est déjà un.
    En fait, écrire Range(cellule) revient à aller chercher l'adresse du Range dans le contenu de la cellule "cellule".

    Bref :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                cellule.Value = SheetLoaded.Range(cellule.Address).Value
    Autre chose : le paramètre de Range ne peut pas être une zone morcelée.
    Donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Union(Range("L5:L6"), Range("F5:F10"))

  4. #4
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Par défaut
    Un conseil : déclare tes variables (instruction Dim) et indique leur type.
    OK, j'avais lu que c'était facultatif du coup j'ai fait mon faignant...

    Dans ton cas, "cellule" est un objet de type Range.
    Il est donc inutile de le mettre dans un Range, puisque ça en est déjà un.
    En fait, écrire Range(cellule) revient à aller chercher l'adresse du Range dans le contenu de la cellule "cellule".
    Arf... le débile en effet... c'était logique...

    Merci beaucoup à vous !

    EDIT :
    Autre chose : le paramètre de Range ne peut pas être une zone morcelée.
    Pourtant cela fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("L5:L6, F5:F10, A14:A19, B14")
    il me remplit bien les valeurs.
    Mais je garde en tête ta remarque en cas de problème !

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

Discussions similaires

  1. Copie de valeur dans une boucle
    Par Sadr'ihel dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 03/02/2017, 16h08
  2. stockage de valeur dans une boucle for
    Par magictol53 dans le forum MATLAB
    Réponses: 2
    Dernier message: 17/10/2013, 18h17
  3. Chercher dans les valeurs d'une cellule dans une boucle For Next
    Par Runsh63 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 28/09/2011, 15h30
  4. Prendre en compte une valeur insérée dans une boucle for
    Par SOPSOU dans le forum Intelligence artificielle
    Réponses: 6
    Dernier message: 08/07/2009, 16h20
  5. Réponses: 4
    Dernier message: 05/06/2008, 21h55

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