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 au développement d'une macro


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 105
    Points : 35
    Points
    35
    Par défaut Aide au développement d'une macro
    Bonjour,
    Cela fait plusieurs jours que j'essaye de développer une macro sur excel alors que je ne connais pas le langage VBA, j'arrive à le comprendre mais je n'arrive pas a l'écrire, donc je me suis dit qu'il était temps de demander de l'aide.

    Je vous expose mon problème (c'est un peu long je vous préviens)

    J'ai un classeur que l'on va nommer "classeur A" dans lequel j'ai 80 feuilles (voir plus car j'en ai qui se rajoute très souvent), elles ont toutes la même forme (les infos se trouvent au même endroit), elles représentent le descriptif de mes commandes.

    J'ai un second classeur que l'on va nommer "classeur B" qui me permet de suivre mes dépenses (prévu => les commandes, et non prévu => note de frais...)

    Je souhaite que mon classeur B reprenne automatiquement le montant de mes commandes dans le classeur A, mais je veux que le tout soit classé par mois. Car j'ai des avenants aux commandes, donc il faut que le montant de mon avenant soit comptabilisé dans le bon mois (dans le classeur B). Je ne sais pas si c'est très clair.

    Si j'ai bien pensé la chose, la variable de ma macro sera le mois. Elle doit donc aller chercher dans le classeur A, dans la feuille nommé "001" ,dans les cellules A11:A18 le mois si elle trouve le mois de Juin 06 elle le comptabilise dans mon classeur B dans la colonne du mois de Juin 06, si elle ne trouve pas elle passe à la feuille nommé "002". Si en feuille "002" elle trouve Juin 06 elle l'additionne à la première valeur. et ainsi de suite jusqu'a la dernière feuille et jusqu'à Mars 08.

    Pour info mon classeur A est construit comme suit:
    De A11 à A18 je rentre la date de ma commande ou de mon avenant (chaque feuille représente une commande)
    De D11 à D18 j'ai le montant de ma commande ou de mon avenant.

    Merci par avance de votre aide.

  2. #2
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 105
    Points : 35
    Points
    35
    Par défaut
    je pense qu'il faut peut être faire une variable avec if, du style:

    Si dans mon classeur A, dans mes 80 feuilles, de A11 à A18 j'ai la valeur juin-06 qui apparait alors je récupére le montant dans la colonne D (à la ligne correspondante) et il se colle dans mon classeur B. Si je trouve plusieurs fois la valeur souhaité (dans les différentes feuilles) elle s'additionne et ainsi de suite pour toutes mes feuilles.

    Si la variable fonctionne pour juin-06, je n'aurais qu'à la recopier et changer le mois de ma variable.

    Qu'en pensez-vous? Je fais peut-être fausse route.

    Merci encore de votre aide, c'est très important pour moi.

  3. #3
    Membre confirmé
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Points : 563
    Points
    563
    Par défaut
    Bonjour,

    L’ïdée est d’imbriquer 2 boucles, l’une à travers les feuilles du classeur A, l’autre dans les 8 cellules A11 à A18 et de tester les dates.

    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 Report()
        ReportMensuel 6
    End Sub
     
    Sub ReportMensuel(NumMois As Integer)
    Dim f As Worksheet, c As Range
            For Each f In Workbooks("Classeur A")
                    For Each c In f.Range("A11:A18")
                            If Month(c) = NumMois Then
     
                            End If
                    Next c
            Next f
    End Sub
    Voici le point de départ.

    Attention aux additions : si on lance 2 fois la macro, il ne faut pas prendre 2 fois en compte les données. Il faudrait donc inscrire en colonne E que le montant a déjà été reporté, et tester cela.

    Bon courage.

  4. #4
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    Bonjour à tous,
    Attention aux additions : si on lance 2 fois la macro, il ne faut pas prendre 2 fois en compte les données. Il faudrait donc inscrire en colonne E que le montant a déjà été reporté, et tester cela.
    Ou remettre la variable destination à zéro

  5. #5
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 105
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par Bigalo Voir le message
    Attention aux additions : si on lance 2 fois la macro, il ne faut pas prendre 2 fois en compte les données. Il faudrait donc inscrire en colonne E que le montant a déjà été reporté, et tester cela.
    Merci pour le début de la macro. Je ne peux rien inscrire dans la colonne E car j'ai déjà des infos. Par contre je ne comprends pas, si je lance 2 fois ma macro, elle ne va pas recalculer du début mais l'additionner au reste ??

    J'ai oublier de préciser, il y a 2 feuilles qui ne doivent pas être prise en compte dans mon classeur A pour la macro, la prémière s'appelle RECAP et la seconde MODELE; C'est surtout RECAP qui ne doit pas être prise en compte, car elle récupére des infos de mes 80 autres feuilles.
    Je pense que je dois le préciser dans la macro.

    Pour écrire le mois dans ma macro comment dois-je faire? Est ce que je reprend la même syntaxe que dans mon tableau, ou si je lui mets Juin-6 (car je n'arrive pas à écrire Juin-06) il va comprendre?

  6. #6
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 105
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par LeForestier Voir le message
    Bonjour à tous,

    Ou remettre la variable destination à zéro

    Comment on fait ça??

    Si quelqu'un à une idée pour le reste de ma macro je suis très preneuse

  7. #7
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    SAlut et bienvenu

    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 Report()
        ReportMensuel 6
    End Sub
     
    Sub ReportMensuel(NumMois As Integer)
    Dim f As Worksheet, g As Worksheet, c As Range
    Set g = Workbooks("Classeur B")
    g.Range("Cellule d'arrivée").Clear
        For Each f In Workbooks("Classeur A")
            If f.Name = "RECAP" Or f.Name = "MODELE" Then GoTo Suivant
            For Each c In f.Range("A11:A18")
                If Month(c) = NumMois Then
                    g.Range("A" & c.Row) = CInt(g.Range("Cellule d'arrivée")) + CInt(f.Range("D" & c.Row))
                End If
            Next c
    Suivant:
        Next f
    End Sub
    J'en met un petit bout en plus, faute d'avoir un tableau sur lequel travailler, j'ai mis des cellule au piff et je n'ais pas testé le code.
    A++
    Qwaz

  8. #8
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 105
    Points : 35
    Points
    35
    Par défaut
    Merci pour ton aide. Il y a une chose que je ne comprends pas à quoi se rapporte "A" et "D" dans la formule? (pour que je puisse mettre les bonnes cellules)

    Je met une photo de mes classeur pour vous aidez à visualiser.

    Classeur A:


    Classeur B:


    Encore merci pour votre aide, cette macro me fera gagner pas mal de temps, et je pourrais la diffuser plus largement à mes projets si elle fonctionne sans soucis

  9. #9
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 272
    Points
    11 272
    Par défaut
    Jour Bon, juste une remarque l'usage du GOTO est qqch à prohiber surtout qu'ici on peut s'en passer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If f.Name = "RECAP" Or f.Name = "MODELE" Then GoTo Suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If f.Name <> "RECAP" and f.Name <> "MODELE" Then
    ....
    End If

  10. #10
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    SAlut
    Alors
    Pour commencer, comme la fait remarquer kiki29 avec mon goto j'ai ete plutot maladroit.

    En regardant bien tes sreenshots j'ai refait la procedure
    cette fois ca prend les dates dans classeur B et ca va les charcher dans Classeur A
    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
    Sub ReportMensuelBis()
    Dim f As Worksheet, g As Worksheet, c As Range
    Dim CelTest As Range
     
    Set g = Workbooks("Classeur B")
        For Each CelTest In g.Range("C8:N8") 'Cellules contenant les date a rechercher
            CelTest.Offset(1, 0).Clear 'On vide le contenu de la case juste en dessous
            For Each f In Workbooks("Classeur A") 'Chaque onglet est passé
                If f.Name <> "RECAP" And f.Name <> "MODELE" Then 'on execute que si diferent de Recu et Modele (tu fera attention a la casse par contre)
                    For Each c In f.Range("A11:A18") 'les cellules contenant les dates des commande
                        If (Month(CDate(c)) = Month(CDate(CelTest))) And (Year(CDate(c)) = Year(CDate(CelTest))) Then 'Si les dates correspondent on incremente la case sous la date(classeur B) correspondent on incremente la case sous la date(classeur B)
                            CelTest.Offset(1, 0) = CInt(CelTest.Offset(1, 0)) + CInt(c.Offset(0, 3))
                        End If
                    Next c
                End If
            Next f
    End Sub
    Si tu veux plus va falloir donner un fichier sur lequel travailler

    Je vais surement avoir une remarque sur la comparaison de dates (je voulais juste tenir compte du moi et de l'année pour ne pas etre parasité par le jour. Et ma facon de faire et certe pas tres elegante mais j'ai pas envi de chercher plus :p peut etre qu'avec un format ca serait plus propre... aller je regarde
    [Edit]
    Peut etre comme ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If CDate(Format(c, "mm/yy")) = CDate(Format(CelTest, "mm/yy")) Then
    J'attend la critique
    [/Edit]
    A++
    Qwaz

  11. #11
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 105
    Points : 35
    Points
    35
    Par défaut
    Je crois qu'on est sur la bonne voie. Mais quand je veux exécuter la macro il me dit qu'il y a une erreur 13.

    Je pense qu'il faut préciser dans la macro que c'est dans la feuille courbes qu'il faut aller chercher le mois (désolé, je viens de percuter que j'avais 3 feuilles dans mon classeur) et qu'il doit incrémenter la ligne 8. Pour le moment mon tableau se termine à la colonne U, mais je vais bientôt ajouter de nouvelles colonnes.



    Il y 2 choses que je ne comprends pas dans la macro que tu as rédigé

    For Each CelTest In g.Range("C8:N8") 'Cellules contenant les date a rechercher => pourquoi on va de C8 à N8

    CelTest.Offset(1, 0).Clear 'On vide le contenu de la case juste en dessous => Pourquoi vider le contenu?

    Je crois que le nom des mes fichiers pose problème...

    Voici comment je complète la macro que tu as fait

    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 ReportMensuelBis()
    Dim f As Worksheet, g As Worksheet, c As Range
    Dim CelTest As Range
     
    Set g = Workbooks("Dépenses + heures + acomptes L&T macro")
        For Each CelTest In g.Range("C8:N8") 'Cellules contenant les date a rechercher
            CelTest.Offset(1, 0).Clear 'On vide le contenu de la case juste en dessous
            For Each f In Workbooks("Facturation fournisseur L&T macro") 'Chaque onglet est passé
                If f.Name <> "RECAP" And f.Name <> "MODELE" Then 'on execute que si diferent de Recu et Modele (tu fera attention a la casse par contre)
                    For Each c In f.Range("A11:A18") 'les cellules contenant les dates des commande
                         If CDate(Format(c, "06/06")) = CDate(Format(CelTest, "06/06")) Then 'Si les dates correspondent on incremente la case sous la date(classeur B) correspondent on incremente la case sous la date(classeur B)
                            CelTest.Offset(1, 0) = CInt(CelTest.Offset(1, 0)) + CInt(c.Offset(0, 3))
                        End If
                    Next c
                End If
            Next f
        Next
    End Sub

    Encore merci pour votre aide

  12. #12
    Membre confirmé
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Points : 563
    Points
    563
    Par défaut
    Bonjour,

    N’oublie pas les balises pour le code, cela le rend bien plus lisible !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Set g = Workbooks("Dépenses + heures + acomptes L&T macro")
        g.Range("C8:N8")
    ne peut pas fonctionner : g est un classeur, et Range est une propriété de Worksheet pas de Workbook !

    En plus n’oublie pas l’extension, .xls ou .xlsm dans le nom de fichier. Tu risques de mauvaises surprises sinon !

  13. #13
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Citation Envoyé par Laura-c Voir le message
    Il y 2 choses que je ne comprends pas dans la macro que tu as rédigé
    Juste 2 c'est un bon debut

    Citation Envoyé par Laura-c Voir le message
    For Each CelTest In g.Range("C8:N8") 'Cellules contenant les date a rechercher => pourquoi on va de C8 à N8
    En faite dans ton screenshot, j'ai vu que tu commencais l'année en juin, mais je me suis dis aussi que tu travaillais par année est donc je regarde sur 12 colonnes.
    Si c'est pas le cas tu peux arrangé ca avec un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     For Each CelTest In g.Range("C8", range("C8").end(xltoright))
    (pas testé)

    Citation Envoyé par Laura-c Voir le message
    CelTest.Offset(1, 0).Clear 'On vide le contenu de la case juste en dessous => Pourquoi vider le contenu?
    Tout simplement pour etre sur qu'il y est pas deja un contenu qui viendrait paraziter notre somme. A moins qu'il y est deja une somme dedans et que tu veille la rajouter au differentes somme contenanu dans les onglet du ClasseurA

    A++
    Qwaz

  14. #14
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 105
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par Bigalo Voir le message
    ne peut pas fonctionner : g est un classeur, et Range est une propriété de Worksheet pas de Workbook !
    Je suis désolée mais je ne comprends pas comment je dois rédiger la première ligne de ma macro.

    Qwazerty merci pour tes explications, je pourrais tester la macro quand ma première ligne sera correctement rédigé.

    Désolé de vous embêter encore avec ça...

  15. #15
    Membre confirmé
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Points : 563
    Points
    563
    Par défaut
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Set g = Workbooks("Dépenses + heures + acomptes L&T macro")
        g.Range("C8:N8")
    g est un classeur, tandis que Range concerne une feuille de classeur. Il faut donc indiquer laquelle, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        g.Sheets(1).Range("C8:N8")
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        g.Sheets("LeNomDeLaFeuilleConcernée").Range("C8:N8")
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        ActiveSheet.Range("C8:N8")
    Si la plage C8:N8 est dans la feuille active.

    Voilà

  16. #16
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    SAlut
    Oupppsss oui c'est moi qui t'ai induit en erreur désolé :p
    a++

  17. #17
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 105
    Points : 35
    Points
    35
    Par défaut
    Au secour je n'y arrive pas du tout, je ne m'en sors pas, je vais finir par abandonner Il doit y avoir une erreur car j'ai toujours des messages qui apparaissent...

    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
    Sub ReportMensuelBis()
    Dim f As Worksheet, g As Worksheet, c As Range
    Dim CelTest As Range
     
    Set g = Workbooks("Dépenses + heures + acomptes L&T macro.xls")
        For Each CelTest In g.Sheets("Courbes").Range("C8:U8") 'Cellules contenant les date a rechercher
            CelTest.Offset(1, 0).Clear 'On vide le contenu de la case juste en dessous
            For Each f In Workbooks("Facturation fournisseur L&T macro.xls") 'Chaque onglet est passé
                If f.Name <> "RECAP" And f.Name <> "MODELE" And f.Name <> "SW" Then 'on execute que si diferent de Recu et Modele (tu fera attention a la casse par contre)
                    For Each c In f.Range("A11:A18") 'les cellules contenant les dates des commande
                        If CDate(Format(c, "06/06")) = CDate(Format(CelTest, "06/06")) Then 'Si les dates correspondent on incremente la case sous la date(classeur B) correspondent on incremente la case sous la date(classeur B)
                            CelTest.Offset(1, 0) = CInt(CelTest.Offset(1, 0)) + CInt(c.Offset(0, 3))
                        End If
                    Next c
                End If
            Next f
    End Sub

  18. #18
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    SAlut
    Bon c'est plutot compliquer de t'aider si tu dis pas ou se trouve les erreurs
    Pour l'histoire de la variable g voici la correction

    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
    Sub ReportMensuelTer()
    Dim f As Worksheet, g As Worksheet, c As Range
    Dim CelTest As Range
     
    Set g = Workbooks("Dépenses + heures + acomptes L&T macro.xls").Sheets("Courbes")
        For Each CelTest In g.Range("C8:U8") 'Cellules contenant les date a rechercher
            CelTest.Offset(1, 0).Clear 'On vide le contenu de la case juste en dessous
            For Each f In Workbooks("Facturation fournisseur L&T macro.xls") 'Chaque onglet est passé
                If f.Name <> "RECAP" And f.Name <> "MODELE" And f.Name <> "SW" Then 'on execute que si diferent de Recu et Modele (tu fera attention a la casse par contre)
                    For Each c In f.Range("A11:A18") 'les cellules contenant les dates des commande
                        If CDate(Format(c, "06/06")) = CDate(Format(CelTest, "06/06")) Then 'Si les dates correspondent on incremente la case sous la date(classeur B) correspondent on incremente la case sous la date(classeur B)
                            CelTest.Offset(1, 0) = CInt(CelTest.Offset(1, 0)) + CInt(c.Offset(0, 3))
                        End If
                    Next c
                End If
            Next f
    End Sub
    Si ca ne fonctionne toujours pas comme tu le souhaite met en ligne un classeur exemple, ca sera plus simple pour faire des essais

    A++
    Qwaz

  19. #19
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 105
    Points : 35
    Points
    35
    Par défaut
    Vu que j'ai un message d'erreur qui apparait sur cette ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     For Each f In Workbooks("Facturation fournisseur macro.xls") 'Chaque onglet est passé
    Je mets un extrait de mes classeurs (j'ai supprimé les info, mais garder la structure avec les liaisons)

    Voici le classeur A = > facturation fournisseur macro
    Classeur B => Dépenses + heures + acomptes macro

    Je souhaites que ma macro compléte la ligne jaune (feuille Courbes) dans le classeur B en allant chercher dans le classeur A, dans chaque feuille (001... sauf recap et modele) le montant de la commande selon le mois.

    et encore merci pour votre aide.

  20. #20
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    SAlut
    Ha ben avec un fichier c'est quand meme mieux!

    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
    Sub ReportMensuelTer()
    Dim f As Worksheet, g As Worksheet, c As Range
    Dim CelTest As Range
     
    Set g = Workbooks("Dépenses + heures + acomptes macro.xls").Sheets("Courbes")
        For Each CelTest In g.Range("C8:U8") 'Cellules contenant les date a rechercher
            CelTest.Value = 0 'On vide le contenu de la case juste en dessous
            For Each f In Workbooks("Facturation fournisseur macro.xls").Worksheets 'Chaque onglet est passé
                If f.Name <> "RECAP" And f.Name <> "MODELE" And f.Name <> "SW" Then 'on execute que si diferent de Recu et Modele (tu fera attention a la casse par contre)
                    For Each c In f.Range("A11:A18") 'les cellules contenant les dates des commande
                        If IsDate(c.Value) Then
                            If Format(c, "mm/yy") = Format(CelTest.Offset(-4, 0), "mm/yy") Then 'Si les dates correspondent on incremente la case sous la date(classeur B) correspondent on incremente la case sous la date(classeur B)
                                CelTest = CInt(CelTest) + CInt(c.Offset(0, 5))
                            End If
                        End If
                    Next c
                End If
            Next f
        Next
    End Sub
    J'espere avoir resolu ton probleme

    A++
    Qwaz

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Développement d'une macro pour application sous IE
    Par stb59 dans le forum Microsoft Office
    Réponses: 1
    Dernier message: 25/01/2015, 22h15
  2. [XL-2010] Besoin d'aide à la création d'une macro dans XL-2010
    Par florian1106 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 24/12/2012, 14h18
  3. [XL-2000] Aide pour création d'une macro complexe
    Par dybmans dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 26/10/2010, 13h38
  4. [XL-2007] Aide à la création d'une macro
    Par Vishnou dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 06/10/2010, 16h15

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