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 Excel avec boucle for


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Septembre 2015
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage

    Informations forums :
    Inscription : Septembre 2015
    Messages : 22
    Par défaut Macro Excel avec boucle for
    Bonjour à tous,

    Je cherche à gagner du temps sur un projet en créant une macro excel car je dois itérer mes calculs sur des centaines de lignes.

    J'ai 2 onglet :
    - Feuille1
    - Feuille2

    Feuille 1 est constituée de 2 colonnes A et B dans lesquelles j'ai mes données sur 200 lignes

    Pour i allant de 1 à 200,
    Je voudrais dans Feuille2, récupérer en A1 la valeur de Ai de la feuille1 et récupérer en B1, la valeur de Bi de la feuille1.

    Ensuite j'ai des calculs (classiques) qui s'effectue et j'obtiens mes résultats dans la feuille 2 et cellule A40, et je voudrais que cette valeur de Feuille2.A40 se copie (en valeur) dans Ci de la feuille1.

    Je n'y connais pas grand chose en VBA et ce que j'ai essayé me renvoie systématiquement des erreurs. Si quelqu'un peut m'aider ce serait vraiment sympa.

    Merci à tous.

  2. #2
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

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

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour,
    ce que j'ai essayé me renvoie systématiquement des erreurs. Si quelqu'un peut m'aider ce serait vraiment sympa.
    Pour t'aider, il faudrait qu'on ait ton code, le message d'erreur obtenu et l'endroit où se déclenche le message d'erreur.
    En attendant :
    • Les boucles
    • Valeur d'une cellule :
    • Attribuer une valeur à une cellule :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      Range("A1").Value = "toto"
      Sheets("Feuil1").Range("A1").Value = Sheets("Feuil2").Range("A1").Value     'A1 de la feuille Feuil1 prend la valeur de A1 de la feuille Feuil2
    • Plutôt que d'utiliser une cellule intermediaire pour faire les calculs, pourquoi ne pas faire les calculs directement en VBA ? Quels sont ces calculs ?
    • Pourquoi faire une procédure VBA avec une boucle pour faire le même calcul sur plusieurs lignes ? On peut écrire la formule voulue sur la première, puis la tirer vers la dernière ligne. (Comme les colonnes A et B sont remplies, même pas besoin de tirer à la main, mais un double clique sur le petit carré en bas à droite de la cellule transfère la formule jusqu'à la dernière ligne).

    En bref, pour t'aider, il nous faut : la formule en feuille Feuil2, ton code et l'erreur.
    A bientôt avec plus de précisions

  3. #3
    Membre averti
    Femme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Septembre 2015
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage

    Informations forums :
    Inscription : Septembre 2015
    Messages : 22
    Par défaut
    Je ne peux pas fournir les calcul de la feuille 2 car ils sont très complexes, font appel à plusieurs autres onglets. Je préfère pas me lancer dans du code VBA pour ces calculs là.

    Pour le reste voilà ce que j'avais essayé d'écrire (et ça plante dès la ligne Range("A1") = Worksheets("Feuille1").Cells(i, 1).Value") :


    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
    Sub Macro1()
    '
    ' Macro1 Macro
    '
     
    '
    For i = 4 To 139
        Sheets("Feuille2").Select
        Range("A1").Select
        Range("A1") = Worksheets("Feuille1").Cells(i, 1).Value
        Range("B1").Select
        Range("B1") = Worksheets("Feuille1").Cells(i, 2).Value
     
     
        Sheets("Feuille1").Select
        Range("C" & i).Select
        Range(""C" & i) = Worksheets("Feuille2").Cells(40, 1).Value
        Range("C" & i).Select
        Selection.Copy
        Range("C" & i).Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
     
        Next
     
    End Sub

    Merci pour votre aide

  4. #4
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

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

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Quel est le message d'erreur ?
    Es-tu sûr du nom de tes feuilles ? Feuille1, Feuille2 ?
    J'imagine que tu as obtenu le code grâce à l'enregistreur de macro, c'est un bon réflexe, mais n'oublie pas de l'adapter ensuite. Evite d'utiliser Select/Selection/Activate/ActiveSheet et leurs copains :
    Plutôt que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sheets("Feuille2").Select
     Range("A1").Select
     Range("A1") = Worksheets("Feuille1").Cells(i, 1).Value

    Ecris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Feuille2").Range("A1").Value = Worksheets("Feuille1").Cells(i, 1).Value
    A la fin, plutôt que de faire un copier-coller, pourquoi ne pourrais-tu pas seulement "transférer" la valeur comme tu le fais précédemment (avec la propriété .Value) ?

  5. #5
    Membre averti
    Femme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Septembre 2015
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage

    Informations forums :
    Inscription : Septembre 2015
    Messages : 22
    Par défaut
    J'ai remplacé le code par celui que tu m'as donné et j'ai fait pareil sur la fin. c'est parfait !

    Merci beaucoup !

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

Discussions similaires

  1. [XL-2010] Formule avec boucle For dans une macro
    Par Derfixien dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 02/09/2014, 22h18
  2. [ActionScript] Problème avec boucle 'FOR'
    Par BnA dans le forum Flash
    Réponses: 7
    Dernier message: 02/11/2006, 09h26
  3. Peux-t'on exécuter des macros excel avec Open Office
    Par Lexot2 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 04/09/2006, 22h30
  4. faire plusieur declaration avec boucle for ?
    Par debutant-1 dans le forum C
    Réponses: 4
    Dernier message: 18/05/2006, 20h19
  5. [VBA][Débutante] Fonction Excel avec Boucle
    Par Inelukia dans le forum Macros et VBA Excel
    Réponses: 32
    Dernier message: 11/01/2006, 19h31

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