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 :

insérer et étendre une formule en boucle


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 11
    Points : 4
    Points
    4
    Par défaut insérer et étendre une formule en boucle
    Bonjour,

    J'aimerais utiliser une macro afin de me faciliter un travail d'analyse de données, je suis débutant avec les macros excel, j'ai essayé de me débrouiller mais je bloque maintenant...


    J'ai une grande quantité de données (voir photo) et j'aimerais:
    1) Insérer une colonne vierge entre chaque colonne
    2) Insérer une formule dans cette nouvelle colonne créée (par exemple dans la colonne vierge D: =C1-C$1)
    3) Étendre la formule jusqu'en bas de mes données (ligne N°200).

    En fouillant un peu sur le net (ce forum ) j'ai pu modifier un code pour insérer les colonnes vierges:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub InsertCol()
     
    Dim NbCol As Long, i As Long
     
    'On récupère le numéro de la dernière colonne remplie et on l'affecte à la variable NbCol
    NbCol = Cells(1, Rows(1).Cells.Count).End(xlToLeft).Column
     
    For i = NbCol + 1 To 4 Step -1
     
        Columns(i).Insert 'Fait l'insert pour la colonne concernée
     
    Next i
     
    End Sub
    Ensuite pour insérer ma formule et l'étendre ça devient très compliqué pour moi...

    J'arrive plus ou moins à comprendre 'le language' mais impossible d'écrire quelque chose qui fonctionne.

    Merci d'avance pour votre aide!Nom : Image1.png
Affichages : 525
Taille : 1,18 Mo

  2. #2
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Bonjour,

    un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub InsertCol()
        Dim NbCol As Long, nblig As Long, i As Long
        'On récupère le numéro de la dernière colonne remplie et on l'affecte à la variable NbCol
        NbCol = Cells(1, Rows(1).Cells.Count).End(xlToLeft).Column
        nblig = Cells(Rows.Count, 1).End(xlUp).Row - 1
        For i = NbCol + 1 To 4 Step -1
            Columns(i).Insert    'Fait l'insert pour la colonne concernée
            Cells(2, i).Resize(nblig).Formula = "=RC[-1]-R2C6"
        Next i
    End Sub
    Vu qu'il devrait toujours y avoir une ligne de titre, je commence à la ligne 2.
    Plutôt que de sauter 2 lignes à chaque fois (ce qui fait qu'on a 3 fois moins d'infos sous les yeux), indente ton code et utilise l'icone # pour garder sa lisibilité.
    eric

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup pour vos conseils.

    j'ai modifié en conséquence.

    Malheureusement sur mon ordinateur personnel je ne peux pas lancer Visual Basic (VBE6EXT.OLB ne peut pas se lancer), je testerais donc ce code lundi.

    Merci encore!

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Code testé, merci beaucoup!

    J'ai modifié la formule dans le code qui me faisait une différence et non une division entre mes cellules.
    J'ai aussi modifié le nom des variables afin de m'y retrouver plus tard en revenant dessus.

    Voila ce que ça donne maintenant:

    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
    Sub Insert_columns()
     
    'Déclaration des variables
    Dim NbColumns As Long, i As Long, NbLanes As Long
     
    'Determiner les dernières colonnes et lignes
    NbColumns = Range("A1").End(xlToRight).Column
    NbLanes = Cells(Rows.Count, 1).End(xlUp).Row - 1
     
    'Boucle
    For i = NbColumns + 1 To 3 Step -1
     
    Columns(i).Insert
    Cells(2, i).Resize(NbLanes).Formula = "=RC[-1]/R2C[-1]"
     
    Next i
     
    End Sub
    Juste un petite question pour etre sur de bien comprendre: pour la variable NbLanes, à quoi sert le -1 final de la ligne 8?

    Merci encore pour votre aide!

  5. #5
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Bonjour,

    je t'avais précisé que pour moi une BDD correcte doit avoir une ligne de titre.
    Dans ce cas il faut soustraire 1 au nombre total de lignes et démarrer en ligne 2 pour mettre la formule.
    eric

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Ok merci.

    Concernant la partie titre c'est que je vais m’atteler à faire maintenant.

    Je récupère mes données (non mises en forme) d'un autre logiciel, il me semblait plus simple de faire travailler la macro sur les "raw datas" puis d'essayer de faire un seconde macro afin d’insérer et de mettre en forme ma ligne de titre.

  7. #7
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Travailles comme ça te parait le mieux pour toi.
    Le tout est d'adapter au contexte.
    eric

Discussions similaires

  1. [PHPExcel] - comment étendre une formule ?
    Par Shi-S0r4 dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 08/02/2013, 14h32
  2. Impossible d'étendre une formule
    Par _guillom dans le forum Excel
    Réponses: 2
    Dernier message: 12/12/2012, 17h45
  3. [XL-2007] Étendre une formule à l'aide de VBA sur une plage variable
    Par cyril7751 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 24/07/2012, 16h23
  4. étendre une formule à toute la colonne.
    Par yayasiano dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 03/02/2009, 09h52
  5. Excel, insérer coordonnées dans une formule.
    Par Ldoppea dans le forum C++Builder
    Réponses: 6
    Dernier message: 18/09/2008, 17h36

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