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 :

Boucle for avec références dépendant de l'incrément


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 4
    Par défaut Boucle for avec références dépendant de l'incrément
    Bonjour,

    J'ai réalisé un petit algorithme que j'aimerais implémenter sous VBA. Le problème c'est que je n'ai aucune idée de comment le réaliser. En effet, certaines référence de cellules contiennent des formules et je ne sais pas faire ça. Voilà à quoi je voudrais que ça ressemble :

    Donc on part d'un classeur Excel avec différentes feuilles déjà créées et dont certaines cellules sont déjà remplies. Il y a une feuille Synthèse, une Tr, une Données et un grand nombre de feuille (Nb_mesure) dont le nom est le numéro de la mesure à laquelle elle est associée (feuille "i" pour la ième feuille de ce type).

    Voilà l'algorithme que j'aimerais appliquer :

    Pour i=1:Nb_mesure
    Feuille "i"/R4:AH4=Données/I(10+31(i-1)):I(26+31(i-1))
    Feuille "i"/R5:AH5=Données/Q(10+31(i-1)):Q(26+31(i-1))
    Feuille "i"/R6:AH6=Données/Y(10+31(i-1)):Y(26+31(i-1))

    Feuille"i"/R9:AH9=Tr/E(Synthèse/E(i+1)):U(Synthèse/E(i+1))

    Synthèse/R(i)=Feuille "i"/AK18-Feuille "i"/AN18

    Fin

    Comme vous pouvez le voir, les références de cellule contiennent des formules assez compliquées.

    Merci pour vos réponses

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Je ne comprends pas à quoi correspondent les barres de division; à des points d'exclamation ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 4
    Par défaut
    Oui, c'est ça, désolé c'était plutôt pour mettre en algo que déjà en language Excel.

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Dans l'expression "I(10+31(i-1))", Qu'est-e que représente "I" ? la colonne ? Si oui, les 3 premières lignes peuvent se traduire par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For i = 1 To Nb_mesure
        Sheets(i).[R4:AH4] = Sheets("Données").Range("I" & 10 + 31 * (i - 1) & ":I" & 26 + 31 * (i - 1))
        Sheets(i).[R5:AH5] = Sheets("Données").Range("Q" & 10 + 31 * (i - 1) & ":Q" & 26 + 31 * (i - 1))
        Sheets(i).[R6:AH6] = Sheets("Données").Range("Y" & 10 + 31 * (i - 1) & ":Y" & 26 + 31 * (i - 1))
    Next i
    Je n'ai pas su interpréter :

    Feuille"i"/R9:AH9=Tr/E(Synthèse/E(i+1)):U(Synthèse/E(i+1))

    Synthèse/R(i)=Feuille "i"/AK18-Feuille "i"/AN18
    Est-ce que tu peux expliquer en français ce que tu veux faire ? Est-ce que tu peux mettre un classeur exemple - sans données confidentielles - avec quelques feuilles ?

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 4
    Par défaut
    Re bonjour,

    Dans I(10+31(i-1)), I représente bien le nom de la colonne.

    J'ai fais un petit fichier excel pour expliquer plus en détail :
    Ici, je pars avec 3 mesures à traiter (pour faire simple, mais j'aimerais pouvoir utiliser ce code pour traiter 200 mesures...). Ces mesures sont copiées dans la feuille Données depuis un logiciel d'acoustique. Certaines données sont copiées dans la feuille Tr et seront utilisées par la suite également. Sur le fichier de base apparaissent déjà les i feuilles (1, 2, 3) avec leurs formules implémentées .Ici, pour simplifier, j'ai gardé les mêmes références de cellules que dans mon algorithme pour que ce soit clair mais je n'ai pas fait apparaître les feuilles de calcul en question qui sont bien plus compliquées.

    Ce que je voudrais automatiser par une macro c'est :

    1. Copier coller (en transposer) les colonnes surlignées de la feuille Données dans les feuilles de calcul. Il y a 3 séries de données par feuille i à copier (émission, réception, bruit de fond). Si on revient sur ce que j'avais écris en algorithme, ces 3 colonnes correspondent à :
    Feuille "i"!R4:AH4=Données!I(10+31(i-1)):I(26+31(i-1))
    Feuille "i"!R5:AH5=Données!Q(10+31(i-1)):Q(26+31(i-1))
    Feuille "i"!R6:AH6=Données!Y(10+31(i-1)):Y(26+31(i-1))

    2. Copier coller la bonne ligne de Tr. Pour cela, il faut aller récupérer dans Synthèse le numéro du Tr correspondant à la mesure pour aller copier la bonne ligne à partir de la feuille Tr. L'algo correspondant avec les bonnes références est :
    Feuille"i"!R9:AH9=Tr!E(Synthèse!E(i+1)):U(Synthèse!E(i+1))

    3. Récupérer le résultat et le correcteur des feuilles de calcul et les reporter sur la synthèse selon : Synthèse!R(i)=Feuille "i"!AK18-Feuille "i"!AN18

    Merci pour votre aide.
    Fichiers attachés Fichiers attachés

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 4
    Par défaut
    Au final, j'ai réussi à m'en sortir avec des formules du type que vous m'aviez conseillé. Je pense que mon code n'est pas vraiment optimisé, par exemple, au lieu d'attribuer les valeurs d'une cellule a une autre, j'ai du les copier/coller en transposée car il ne fait pas la correspondance entre une range en ligne et une range en colonne... ça ressemble à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     Sheets("Données").Select
        Range("I" & 10 + 31 * (i - 1) & ":I" & 26 + 31 * (i - 1)).Select
        Selection.Copy
        Sheets(i).Select
        Range("R4:AH4").Select
        Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
    En tout cas merci beaucoup.

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

Discussions similaires

  1. Boucle for avec incrément supérieur à 1
    Par bremer dans le forum Langage
    Réponses: 19
    Dernier message: 22/04/2024, 12h41
  2. Double boucle for avec incrémentation
    Par dubis dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 12/04/2013, 13h29
  3. Boucle for avec incrémentation de variable en shell
    Par Ariania dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 09/08/2012, 11h27
  4. [Smarty] Boucle FOR avec incrémentation
    Par HwRZxLc4 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 28/07/2010, 20h31
  5. Réponses: 2
    Dernier message: 14/04/2010, 18h39

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