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 de synthèse avec report de données [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Apprentie ingénieure
    Inscrit en
    Avril 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Apprentie ingénieure
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2011
    Messages : 51
    Par défaut Macro de synthèse avec report de données
    Bonjour,

    J'ai créé un fichier avec 5 feuilles et diverses macros,

    Dans la feuille "Douchette" j'ai un numéro qui s'inscrit automatiquement en colonne A, à la suite de cette macro et en fonction des diverses données rentrées par le contrôleur, j'ai les colonnes R,S,T,U,V et W qui affichent divers résultats.

    J'aimerai que lorsque j'appuie sur F8,


    La somme de la colonne R s'incrive dans la cellule D10
    La somme de la colonne S s'incrive dans la cellule E10
    La somme de la colonne T s'incrive dans la cellule F10
    La somme de la colonne U s'incrive dans la cellule G10
    La somme de la colonne V s'incrive dans la cellule H10
    La somme de la colonne W s'incrive dans la cellule I10



    Mais si il y a déjà une valeur dans la cellule D10 alors je veux qu'il écrive dans la ligne suivante..


    Un calvaire à écrire pour moi débutante en vba ..

    Je ne sais pas par où commencer excepter .."Sub"... :s

    J'ai démarré en écrivant ça, même si c'est très peu .. :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Somme()
     
    i = 10 'Début du tableau ligne 10 sur la feuille de contrôle 
     
    Do While Cells(i, 4) <> "" 'Cherche la pemière cellule vide en colonne 4 à partir de la ligne i
    i = i + 1
    Loop
     
    Sheets("Feuille de contrôle").Cells(i, 4).Value = ActiveCell.FormulaR1C1 = "=SUM(R1C:R" & i - 1 & "C)"
     
    End Sub
    Mais voilà .. Je me bats avec l'écriture Sheets("...").quelque chose et le .Select ..


    J'suis completement perdue avec les conventions d'écriture du code .. :s



    Merci d'avance pour vos réponses

  2. #2
    Membre averti
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Décembre 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 18
    Par défaut
    Bonjour,

    Je ne suis pas sûr d'avoir tout compris. Mais, j'ai cru comprendre que les numéros seraient en colonne A.


    Je te proposais donc ce code (Mon approche est légèrement différente) :

    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 Somme()
     
    ThisWorkbook.Worksheets("Feuille de contrôle").Activate
    ActiveSheet.Range("A10").Select 'J'ai cru comprendre que l'utilisation de la ligne était visible en colonne A
    Do While Not IsEmpty(ActiveCell) 'Cherche la première cellule vide en colonne A à partir de la ligne de la cellule sélectionnée
        ActiveCell.Offset(1, 0).Select
    Loop
    ligne_vide = ActiveCell.Row 'On récupère le numéro de la première ligne vide
    ActiveCell.Offset(0, 3).Select 'On se positionne sur la première ligne vide, en colonne D
    ActiveCell.FormulaLocal = "=SOMME(R1:R" & (ligne_vide - 1) & ")" 'On remplit la première formule
    ActiveCell.AutoFill Destination:=Range("D" & ligne_vide & ":I" & ligne_vide), Type:=xlFillDefault 'On étend la formule sur les colonnes adjacentes.
     
    End Sub
    Par contre, je n'ai aucune idée de comment faire activer cette macro sur pression de F8, il me semble que cette touche est déjà utilisée par Excel.
    Pour moi, il serait plus adapté de l'exécuter en dernier lors de la dernière macro exécutée (Par l'intermédiaire de l'instruction : Call Somme() )

  3. #3
    Membre confirmé
    Femme Profil pro
    Apprentie ingénieure
    Inscrit en
    Avril 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Apprentie ingénieure
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2011
    Messages : 51
    Par défaut
    Merci beaucoup d'avoir répondu

    En faite j'ai une série de données rentrées en A qui me permettent de dire "cette ligne est bien occupée"

    Ca n'a pas grande utilité dans ce que je veux faire, je me suis mal exprimée :s


    Donc par exemple j'ai en colonne R de la feuille "douchette" 15 lignes donc la valeur des cellules en R toujours est 1 (pour faire simple ^^) je voudrai donc que sur la feuille "feuille de contrôle" en D10 vienne s'inscrire 15. et la même pour les colonnes suivantes S avec E10 etc...

    Mais si jamais il y a déjà quelque chose d'écrit en D10 alors j'écris ma somme à la ligne. (En faite dans ma colonne R, j'aurai toujours des valeurs à chaque ligne, donc je me base sur cette cellule pour le "retour à la ligne").


    Je ne sais pas si c'ets mieux expliqué :s

  4. #4
    Membre averti
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Décembre 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 18
    Par défaut
    ReBonjour,

    Le nombre de ligne de la feuille douchette à sommer est-il toujours de 15 ?

    Auquel cas la ligne de code suivante devrait être satisfaisante pour remplacer la ligne 11 du code j'ai proposé la première fois (ou je n'ai toujours pas bien compris) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    'Si il y a toujours 15 lignes : 
    ActiveCell.FormulaLocal = "=SOMME(douchette!R1:R15)" 'On remplit la première formule

  5. #5
    Membre confirmé
    Femme Profil pro
    Apprentie ingénieure
    Inscrit en
    Avril 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Apprentie ingénieure
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2011
    Messages : 51
    Par défaut
    Non il n'est pas toujours de 15 :s

    Il est aléatoire,

    Il peut aller de 2 à 200 ..



    J'ai un bug sur cette ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveCell.AutoFill Destination:=Range("D" & ligne_vide & ":I" & ligne_vide), Type:=xlFillDefault 'On étend la formule sur les colonnes adjacentes.
    "La méthode a échoué" :s

  6. #6
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonjour
    Une proposition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub TEST()
    Dim NewLig As Long
     
    Application.ScreenUpdating = False
    With Sheets("Feuille de contrôle")
        NewLig = .Cells(.Rows.Count, "D").End(xlUp).Row
        NewLig = IIf(NewLig >= 10, NewLig + 1, 10)
        With .Range("D" & NewLig & ":I" & NewLig)
            .FormulaR1C1 = "=SUM(Douchette!C[14])"
            .Value = .Value
        End With
    End With
    End Sub

  7. #7
    Membre confirmé
    Femme Profil pro
    Apprentie ingénieure
    Inscrit en
    Avril 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Apprentie ingénieure
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2011
    Messages : 51
    Par défaut
    Voilà le code que j'ai testé et qui fonctionne très bien !

    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 Somme()
     
    'permet de trouver la première ligne vide de la colonne 4
    i = 10 
     
    Do While Cells(i, 4) <> "" 'va chercher la première ligne vide en colonne D
    Cells(i, 4).Select
    i = i + 1
    Loop
     
    Cells(i, 4).Select
    ActiveCell.FormulaR1C1 = "=SUM(Douchette!C[14])"
    Cells(i, 4).Copy
    Range(Cells(i, 4), Cells(i, 9)).Select
    Sheets("Feuille de contrôle").Paste
    Cells(1, 1).Select
     
    End Sub
    Je pense qu'il y a mieux qu'avec tout les Select
    Après je ne sais pas si c'est mieux d'utiliser ton 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 Somme()
     
    ThisWorkbook.Worksheets("Feuille de contrôle").Activate
    ActiveSheet.Range("A10").Select 'J'ai cru comprendre que l'utilisation de la ligne était visible en colonne A
    Do While Not IsEmpty(ActiveCell) 'Cherche la première cellule vide en colonne A à partir de la ligne de la cellule sélectionnée
        ActiveCell.Offset(1, 0).Select
    Loop
    ligne_vide = ActiveCell.Row 'On récupère le numéro de la première ligne vide
    ActiveCell.Offset(0, 3).Select 'On se positionne sur la première ligne vide, en colonne D
    ActiveCell.FormulaLocal = "=SOMME(R1:R" & (ligne_vide - 1) & ")" 'On remplit la première formule
    ActiveCell.AutoFill Destination:=Range("D" & ligne_vide & ":I" & ligne_vide), Type:=xlFillDefault 'On étend la formule sur les colonnes adjacentes.
     
    End Sub
    Peut être que je peux tenter le mix des deux ! ^^

    Oh mercatog merci,

    Je n'avais pas vu ta réponse,

    Par contre qand je test la macro, ca ne fait rien :s

    Je me suis permise d'ajouter le
    Application.ScreenUpdating = True

    et je n'y comprends pas grand chose ^^'

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

Discussions similaires

  1. [XL-2007] MAJ feuille synthèse avec macro
    Par Tamidu dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 03/02/2015, 14h22
  2. [XL-2007] Report des données de la feuille 2 à la feuille 1 avec décalage de colonnes variable.
    Par ericmicro dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 26/11/2013, 14h35
  3. [XL-2003] Macro report de donnée et incrémentation
    Par Edaine dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 06/07/2011, 11h06
  4. [VBA-E] macro avec base de données externe
    Par Djohn dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/02/2007, 14h12

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