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 :

aide sur macro [Toutes versions]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 8
    Points : 4
    Points
    4
    Par défaut aide sur macro
    bonjour,
    j'ai besoin de faire une macro qui donne le nombre de chiffre répété dans des tableaux et remplir les resultats obtenu dans un autre tableau.
    j'ai réussi a faire cela mais seulement pour un nombre de ligne fixe pour chaque tableau, si jamais on change le nombre de ligne sélectionner pour chaque tableau il se peut que le premier tableau se confond avec le deuxiéme ce qui bousille les calculs donc ce qu'il faudrait faire c'est assigné une variable au ligne et une variable au tableau et faire en sorte que quand on trouve du vide on s'arrête et on passe au tableau suivant ainsi de suite.
    la fonction que j'utilise c'est NB.SI.ENS voici une image pour mieux illustrer le problème MERCI.
    LA QUESTION : c'est comment passer d'un nombre de ligne fixe a un nombre variable sans confondre les tableaux?

    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
    Sub Macro3()
    '
    ' Macro3 Macro
    '
     
    '
        Range("J8").Select
        ActiveCell.FormulaR1C1 = "=COUNTIFS(R12C[-7]:R30C[-7],RC[-1])"
        Selection.AutoFill Destination:=Range("J8:J28"), Type:=xlFillDefault
        Range("J8:J28").Select
        Range("K8").Select
        ActiveCell.FormulaR1C1 = "=COUNTIFS(R38C[-8]:R83C[-8],RC[-2])"
        Selection.AutoFill Destination:=Range("K8:K28"), Type:=xlFillDefault
        Range("K8:K28").Select
        Range("H33").Select
    End Sub
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonjour et bienvenu au forum.
    Pour pouvoir avoir des répondes précises, il est souhaitable d'expliciter clairement la problème rencontré en donnant des précision sur la disposition des données (constitution des plages de données, résultat attendu..etc)
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    bonjour,

    j'espère avoir bien compris ton problème

    en utilisant les plages nommée voici en attachement dans ton fichier ce que l'on peux faire

    sinon la formule ressemble à ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =COUNTIF(INDIRECT(ADDRESS(ROW(OnlineTrade)+2;3)&":"&ADDRESS(ROW(VM)-4;3));$I8)
    Alleï Bonjour chez vous!

  4. #4
    Candidat au Club
    Inscrit en
    Juillet 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Pour étre clair et bien precis dans la pièce jointe on trouve 7 tableau la macro que je dois réaliser consiste a détecter combien un nombre est répété dans ts les tableau (par exemple le nombre 541 est répété 0 fois ds le tableau online trade par contre il l'est 4 fois ds virement de masse) et le résultat doit étre saisie ds le tableau qui se trouve a droite de la page excel, le problème c'est que je dois ecrire un programme qui commence a partir de la ligne 12 colonne c et qui commence a chercher les nbrs répété et donc pour qu'il puisse s'arreter a la fin de chaque tableau il faut définir une autre variable concernat les tableau et dire au programme de s'arreter une fois qu'il trouve une ligne vide pour passer au tableau suivant et commencer la méme demarche. est ce que c'est clair mnt ?
    Fichiers attachés Fichiers attachés

  5. #5
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    bon si j'oublie le fichier, ça va pas le faire... moins bien en tout les cas! lol

    sinon, j'ai vu que tu as répondu entre temps

    c'est bien ce que la formule fait

    peut-être cela sera plus clair avec le fichier modifié
    Fichiers attachés Fichiers attachés
    Alleï Bonjour chez vous!

  6. #6
    Candidat au Club
    Inscrit en
    Juillet 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Slt maykeullll et merci pour ton aide j'ai vu ce que tu m'as envoyé mais en fait j'ai besoin de la macro car c'est un travail que je dois faire plusieurs fois (il y aura les memes tableaux sauf que les données vont changer et le nombre de ligne pour chaque tableau aussi genre je pourai avoir 50 lignes dans le premier tableau au lieu du nombre que j'ai maintenant ). alors pourrais tu m'eclaircir comment tu as procédé pour le remplissage que tu ma envoyé ???

  7. #7
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    oui bien sur

    rappel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    =COUNTIF(INDIRECT(ADDRESS(ROW(OnlineTrade)+2;3)&":"&ADDRESS(ROW(VM)-4;3));$I8)
    cette formule ne fonctionne qu'avec des prérequis
    tout d'abord, tu dois nommer les cellules qui contiennent les noms des tableaux
    par exemple en A9 la cellule a été renommée "OnlineTrade"
    ce qui veux dire que tu peux la rapeller dans un calcul comme ceci
    =OnlineTrade+C32
    pour faire cela tu sélectionne la cellule et dans l'espace en haut à gauche d'excel, là ou tu vois la référence de la cellule ( ex: A1 ) tu remplace par un nom et tu valide par {ENTREE}
    voilà j'espère que tu as compris ( sinon tu demande )

    bon maintenant la formule
    on va mettre de coté le countif pour mieux comprendre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INDIRECT(ADDRESS(ROW(OnlineTrade)+2;3)&":"&ADDRESS(ROW(VM)-4;3))
    INDIRECT retourne la référence spécifiée par du texte.
    en gros dans ton fichier :
    devrais retourner
    PRODUCTION DU MOIS D'AVRIL 2010 PAR CENTRE D'AFFAIRES
    car il interprete directement la référence.

    pour ton probleme, on a besoin d'une plage de plusieur cellule
    indirect peut nous y aider encore grace à la fonction address
    Address retourne l'adresse d'une cellule au format texte
    pour cela on lui renseigne la ligne et la colonne
    row(1;1) renvoie "$A$1"

    alors, je lui demande de me donner une addresse dont la permière cellule est la ligne de la cellule(OnlineTrade)+2 et la colonne 3(C) ( il me renvoie "$C$11")
    j'ajoute un texte":" et lui défini la dernire cellule comme étant celle qui se trouve sur la ligne de la cellule(VM(pour virement de masse)-4 et sur la colonne 3(C).
    il me renvoie donc "$C$11:$C$30"
    qu'il trnsforme en référence grace à INDIRECT
    que l'on peux passer dans la formule countifs

    voila, j'espère que c'est plus clair

    maintenant petite question, tu travaille avec quelle version d'excel?
    Alleï Bonjour chez vous!

  8. #8
    Candidat au Club
    Inscrit en
    Juillet 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Salut "mayekeul" merci infiniment pour ton aide , j'aimerai que tu m'aides pour appliquer ce que tu m'as expliqué dans excel c'est a dire comment l'appliquer et comment intégrer la formule pour qu'elle soit applicable, les démarches a suivre.
    Merci.

    salut peut être que je devrais reformuler ma question, maintenant que j'ai compris ta logique je ne sais pas comment l'appliquer dans excel(où écrire le programme, etc... ).
    Cordialement

    salut ''maykeul'' désolé je n'ai pas fait attention à ta question "tu travailles avec quelle version de excel?".
    Dans la société où je travaille on a excel 2003, sinon je travaille chez moi avec excel 2007 qui est installé dans mon pc portable.

  9. #9
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    maintenant que j'ai compris ta logique je ne sais pas comment l'appliquer dans excel(où écrire le programme, etc... ).
    il n'y a pas deprogramme, seulement des formules dans les cellules

    ...comment l'appliquer et comment intégrer la formule pour qu'elle soit applicable, les démarches a suivre.
    et bien si le nombre et le nom des tableaux ne change pas, il n'y a rien à adapter juste tirer les formules
    mais je dois filer donc je pourrais mieux te diriger demain si tu veux
    Alleï Bonjour chez vous!

  10. #10
    Candidat au Club
    Inscrit en
    Juillet 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    d'accord pas de problème , déjà merci pour aujourd'hui et puis je t'attendrai demain .
    Cordialement

  11. #11
    Candidat au Club
    Inscrit en
    Juillet 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    je travaille avec excel 2007, j'ai écrits un code mais il affiche une erreur,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Range("J8").Select
    ActiveCell.FormulaR1C1 = "=COUNTIFS(INDIRECT(ADDRESS(ROW(onlinetrade)+2;3)&:&ADDRESS(ROW(vm)-4;3));$I8)"
        Selection.AutoFill Destination:=Range("J8:J28"), Type:=xlFillDefault
        Range("J8:J28").Select
        Range("K8").Select
        ActiveCell.FormulaR1C1 = "=COUNTIFS(INDIRECT(ADDRESS(ROW(vm)+2;3)&:&ADDRESS(ROW(cr)-3;3));$I8)"
        Selection.AutoFill Destination:=Range("K8:K28"), Type:=xlFillDefault
        Range("K8:K28").Select
        Range("H33").Select
    End Sub
    la ligne en rouge est la ligne ou VB affiche l'erreur.

  12. #12
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    Ci-joint proposition vba:
    Pour fonctionner, la feuille doit respecter les 3 critères suivants:
    - La ligne total de chaque catégorie doit toujours être renseignée.
    - Les cellules de A à C de l'intitulé de la catégorie doivent être fusionnées et hormis celles-ci, aucunes autres cellules de la colonne A ne doivent être fusionnées.
    - Une ligne vide doit être laissée entre l'intitulé et le tableau de données (commençant par les titres de colonnes).
    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
    27
    Private Sub CommandButton1_Click()
    Dim LastLig As Long, i As Long, j As Long
    Dim Inf() As Variant
     
    LastLig = Cells(Rows.Count, 1).End(xlUp).Row
    ReDim Inf(1 To 3, 1 To 1)
    j = 1
    For i = 9 To LastLig - 1
       If Range("A" & i).MergeCells And Range("B" & i + 3).Value <> "" Then
          Inf(1, j) = Range("A" & i).Value
          Inf(2, j) = i + 3
          Inf(3, j) = Range("B" & i + 2).End(xlDown).Row - 1
          j = j + 1
          ReDim Preserve Inf(1 To 3, 1 To j)
       End If
    Next i
    LastLig = Range("I7").End(xlDown).Row
    Range("J7:IV" & LastLig).ClearContents
    For j = 1 To UBound(Inf, 2)
       Cells(7, j + 9).Value = Inf(1, j)
       With Cells(8, j + 9)
          .Formula = "=CountIf(" & Range("C" & Inf(2, j) & ":C" & Inf(3, j)).Address & ",I8)"
          .AutoFill Range(Cells(8, j + 9), Cells(LastLig, j + 9))
       End With
    Next j
    Cells(7, UBound(Inf, 2) + 9).Value = "TOTAL"
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  13. #13
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    tant que j'y suis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Range("J8").Formula = "=COUNTIFS(INDIRECT(ADDRESS(ROW(onlinetrade)+2;3)&:&ADDRESS(ROW(vm)-4;3));$I8)"
    range("J8").AutoFill Destination:=Range("J8:J28"), Type:=xlFillDefault
    Range("K8").Formula = "=COUNTIFS(INDIRECT(ADDRESS(ROW(vm)+2;3)&:&ADDRESS(ROW(cr)-3;3));$I8)"
    Range("K8").AutoFill Destination:=Range("K8:K28"), Type:=xlFillDefault
    End Sub
    c'est plus propre
    Alleï Bonjour chez vous!

  14. #14
    Candidat au Club
    Inscrit en
    Juillet 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    C'est bon le problème est résolu grâce à vous, je tiens a remercier mayekeul qui n'as pas hésité à me répondre à chaque fois que je posais des questions , aussi l'intervention de merctog m'était d'une grande aide, sinon j'aimerai que quelqu'un ou bien l'un de vous deux m'explique le code écrit par merctog et cela pour bien assimiler sa logique, et aussi pour avoir une bonne compréhension.
    MERCI infiniment a vous tous.

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

Discussions similaires

  1. [XL-2007] Aide sur macro
    Par bedoch dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/07/2009, 18h02
  2. Demande d'aide sur macro a double conditions
    Par zinebs dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 11/11/2007, 23h23
  3. RechercheV trop limité --> aide sur macro
    Par alexstain dans le forum Macros et VBA Excel
    Réponses: 19
    Dernier message: 24/10/2007, 20h29
  4. Aide sur Macro
    Par anisr dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 17/07/2007, 22h28

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