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 :

Faire une moyenne de deux colonnes dans une autres [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 14
    Points : 9
    Points
    9
    Par défaut Faire une moyenne de deux colonnes dans une autres
    Bonjour,

    Mettons que j'ai 2 colonnes A et B, A et B contiennent des nombres.
    Je voudrais une macro qui crée un colonne (C) faisant la moyenne de A et de B pour chaque ligne.

    C2 = ( A2 + B2 ) /2
    C3 = ( A3 + B3 ) /2
    C4 = ( A4 + B4 ) /2
    ....

    Et ce jusqu’à ce que il n'y ai plus de valeur dans les colonnes A et B qui peuvent varier de longueur . (longueur pouvant aller dans les 365 000)
    Cette macro doit pouvoir s'adapter à différents tableaux

    Merci d'avance

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 594
    Points : 34 263
    Points
    34 263
    Par défaut
    Bonjour;

    pourquoi passer par une macro ?

    Ne peux tu pas simplement double cliquer en bas a droite de ta cellule pour appliquer la formule directement ?
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

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

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

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Bonjour,
    Attention, ici tu es sur le forum Excel et pas le forum VBA.
    Pourquoi as-tu besoin d'une macro ? Une formule ne suffit-elle pas ?
    Où bloques-tu ? Je ne vois pas de code dans ton message. Qu'as-tu fait pour l'instant ? Qu'est-ce qui ne "marche pas" ?
    Si ce qui te bloque, c'est de trouver la dernière ligne non vide, voici comment faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim derLig As Long
    derLig = Sheets("ma feuille").Range("A" & Sheets("ma feuille").Rows.Count).End(xlUp).Row
    Ensuite, il suffit d'appliquer la formule sur la plage de cellules voulues (de C2à CderLig)

  4. #4
    Expert confirmé Avatar de jerome.vaussenat
    Homme Profil pro
    Formateur Bureautique
    Inscrit en
    Janvier 2011
    Messages
    1 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Formateur Bureautique
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 629
    Points : 4 299
    Points
    4 299
    Par défaut
    Salut,

    Pas besoin de macro pour faire ce travail.

    En C2, tu mets la formule suivante
    Tu te places sur la cellule C2, tu pointe avec ta souris sur le coin inférieur droit (la poignée de recopie : souris sous forme d'un plus)
    Là, tu fais un double clic (à la place d'un cliqué-glissé habituel)
    La formule écrite se recopie, jusqu'à la fin du tableau (et ce quelle que soit sa longueur !!)

    Tu peux aussi activer la fonction Tableau et ainsi bénéficier de tout un tas de petit plus. Dans ton cas la notion de colonne calculée. Pour en savoir plus sur cette fonction :
    http://silkyroad.developpez.com/excel/tableau/

    En espérant que cela t'aidera.
    Jérôme

    " Je pense donc je suis. Tu es donc j'apprends ". (GCM)

    Si ce message vous à aidé, merci de cliquer sur . Si ce message est résolu, cliquez sur .

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    ll

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    Cette opération fait partie d'un code de 2500 ligne, je ne veut pas avoir à le scinder en deux juste pour faire un double clique.

    Pour l'instant voici la partie de mon code qui m’intéresse:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sheets("paramètres").Select
        Range("AN1").Select
        ActiveCell.FormulaR1C1 = "Profondeur moyenne tête"
        Range("AN2").Select
        ActiveCell.FormulaR1C1 = "=(RC[-10]+RC[-9])/2"
        Range("AN2").Select
        Selection.AutoFill Destination:=Range("AN2:AN380012"), Type:=xlFillDefault
        Range("AN2").Select

    Or ici la moyenne est effectuée jusqu'à une ligne fixe : 380 012
    Je ne peut donc pas utiliser cette macro sur des tableau plus petit ou plus grand


    Excusez moi je ne savais pas qu'il y avait un forum VBA*

    Je viens d'essayer cela mais ça n'as pas fonctionné:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        Dim derLig As Long
        derLig = Sheets("paramètres").Range("A" & Sheets("paramètres").Rows.Count).End(xlUp).Row
     
        Range("AN1").Select
        ActiveCell.FormulaR1C1 = "Profondeur moyenne tête"
        Range("AN2").Select
        ActiveCell.FormulaR1C1 = "=(RC[-10]+RC[-9])/2"
        Range("AN2").Select
        Selection.AutoFill Destination:=Range("AN2:ANderLig"), Type:=xlFillDefault

  7. #7
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 594
    Points : 34 263
    Points
    34 263
    Par défaut
    Tu utilises une variable; pas du texte


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Selection.AutoFill Destination:=Range("AN2:AN" & derLig), Type:=xlFillDefault
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    Merci ça fonctionne.


    Est ce que je peut l'utiliser ici ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        Dim derLig As Long
        derLig = Sheets("paramètres").Range("A" & Sheets("paramètres").Rows.Count).End(xlUp).Row
     
    Set mondico = CreateObject("Scripting.Dictionary")
    For Each aq In Range("j2", [j387000].End(xlUp))
       mondico(aq.Value) = ""
    Next aq
    [aq2].Resize(mondico.Count, 1) = Application.Transpose(mondico.keys)
    Au lieu de 387000 puis je utiliser derLig

  9. #9
    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
    Ce n'est pas ta question mais au cas où avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Transpose(mondico.keys)
    tu es limité à 65536 lignes...

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par eriiic Voir le message
    Ce n'est pas ta question mais au cas où avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Transpose(mondico.keys)
    tu es limité à 65536 lignes...

    Merci de l'info

    Dans mon cas la valeur ne dépasse pas les 200

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

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

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim derLig As Long
        derLig = Sheets("paramètres").Range("A" & Sheets("paramètres").Rows.Count).End(xlUp).Row
     
        Range("AN1").Select
        ActiveCell.FormulaR1C1 = "Profondeur moyenne tête"
        Range("AN2").Select
        ActiveCell.FormulaR1C1 = "=(RC[-10]+RC[-9])/2"
        Range("AN2").Select
        Selection.AutoFill Destination:=Range("AN2:ANderLig"), Type:=xlFillDefault
    Ceci s'écrit de façon plus courte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim derLig As Long
        derLig = Sheets("paramètres").Range("A" & Sheets("paramètres").Rows.Count).End(xlUp).Row
        Range("AN1").Value = "Profondeur moyenne tête"
        Range("AN2:AN" & derLig).FormulaR1C1 = "=(RC[-10]+RC[-9])/2"
    Ensuite, plutôt que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("j2", [j387000].End(xlUp))
    écris:

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    Merci

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 28/04/2010, 15h31
  2. Lien entre deux colonnes dans une liste (utilisation de combobox)
    Par cantanna1988 dans le forum SharePoint
    Réponses: 7
    Dernier message: 02/03/2009, 17h10
  3. Réponses: 4
    Dernier message: 05/06/2008, 09h51
  4. deux colonnes dans une autre
    Par jcachico dans le forum Langage SQL
    Réponses: 3
    Dernier message: 21/08/2007, 09h20
  5. Afficher deux colonnes dans une ListBox
    Par deubal dans le forum Composants VCL
    Réponses: 4
    Dernier message: 25/10/2005, 19h53

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