Probleme avec code VBA

BONSOIR J'AI PLUSIEURS CLASSEUR EXCEL QUI CONTIENNENT PLUSIEURS FEUILLE ET JE VOUDRAI FAIRE UN RÉCAPITULATIF DE CERTAINE CELLULES DANS UN AUTRE CLASSEUR. EXEMPLE :

CLASSEUR 1 / FEUILLE (FICHE DE SALAIRE) CELLULE G42 G41 G40 G39

CLASSEUR 2 / FEUILLE (FICHE DE SALAIRE) CELLULE G42 G41 G40 G39

CLASSEUR 3 / FEUILLE (FICHE DE SALAIRE) CELLULE G42 G41 G40 G39

DANS LE CLASSEUR RÉCAPITULATIF SUR LA FEUIL1 JE VEUX FAIRE

LA SOMME DE G42 EN A1

LA SOMME DE G40 EN A2

LA SOMME DE G39 EN A3

J'AI TROUVE UN CODE QUI MARCHE TRÈS BIEN MAIS IL FAUT LE REFAIRE POUR CHAQUE CELLULE Y A T IL UN MOYEN POUR FAIRE QU'UN SEUL CODE POUR TOUTE LES CELLULES.

LE CODE EST EN PIÈCE JOINTE

MERCI

16paie-2016.xlsm (20.16 Ko)

Si tu pouvais éviter de tout écrire en majuscules, c'est tout à fait contraire à la convivialité...

voila Mr MFerrand je m'excuse pour le désagrément

Bonsoir j'ai plusieurs classeur Excel qui contiennent plusieurs feuille et je voudrai faire un récapitulatif de certaine cellules dans un autre classeur. Juste un petite Exemple :

classeur 1 / feuille (fiche de salaire) cellule g42 g41 g40 g39

classeur 2 / feuille (fiche de salaire) cellule g42 g41 g40 g39

classeur 3 / feuille (fiche de salaire) cellule g42 g41 g40 g39.

Dans le classeur récapitulatif sur la feuil1 je veux faire

la somme de g42 en a1

la somme de g40 en a2

la somme de g39 en a3.

J’ai trouvé un code qui marche très bien mais il faut le refaire pour chaque cellule y a-t-il un moyen pour faire qu'un seul code pour toute les cellules.

Le code est en pièce jointe.

NB C’est juste un Exemple en réalité j’ai plusieurs classeurs et cellules qui ne respectent pas d’ordre merci

C'est mieux...!

D'abord pourquoi 3 classeurs ? Rien n'empêche les 3 feuilles concernées (et les suivantes) d'être dans le même classeur. Cela faciliterait pas mal d'opérations.

[Note bien qu'ensuite je te dirai peut-être : pourquoi 12 feuilles alors qu'une feuille de stockage et une feuille d'affichage suffisent... mais chaque chose en son temps ]

Ensuite tu trouves un code, fait certainement pour autre chose (ou si un tel code pour un simple addition, par quelqu'un qui fume la moquette en même temps que le VBA... ). Donc si vraiment faut en passer par VBA, est-ce vraiement utile de se compliquer encore plus, avec le risque d'avoir ultérieurement des effets imprévus...

Enfin, un code qu'il faudrait réitérer pour chaque cellule, ça n'existe pas ! c'est qu'on ne sait pas faire et que le code est inadapté.

Outre, la question de feuilles dispersées dans différents classeurs, avoir les cellules qu'on compte utiliser ultérieurement regroupées :

42 41 40 ou 41 40 39 ou 42 40 38 ... serait trop simple ! C'est sans doute pour donner des exercices un peu consistants aux intervenants dans les forums...

Comment construire une macro pour faire une addition ? Il faudra recueillir les résultats : on va donc prévoir un tableau à 3 éléments puisque 3 résultats.

Pour faire l'addition de nombres de 3 classeurs distincts il faut ouvrir les classeurs tour à tour : on va donc faire un tableau des noms de classeurs pour les traiter en boucle.

On suppose que le vice n'a pas été poussé jusqu'à fourrer tous ces classeurs en différents points du disque dur ! Et que les 4 sont dans le même dossier.

Une fois le classeur ouvert, on récupère les valeurs à additionner, qu'on additionne dans chaque élément du tableau prévu pour ça, puis on le referme. Et on le fait aussi avec une boucle qui va faire se succéder 42, 40, 39 ! Non mais !

Il ne reste plus qu'à affecter les résultats, dans une plage dont les cellules sont contiguës ! Miracle !

Cela donne quelque chose comme ça :

Sub Sommes()
    Dim T(2), fich, chemin$, f%, i%
    chemin = ThisWorkbook.Path & "\" 'en supposant tous les classeurs dans même dossier
    fich = Array("nomClasseur1", "nomClasseur2", "nomClasseur3")
    Application.ScreenUpdating = False
    For f = 0 To 2
        Workbooks.Open chemin & fich(f) & ".xlsx" 'si listage fichiers n'intègre pas extension
        With ActiveWorkbook.Worksheets("FICHE DE SALAIRE")
            For i = 0 To 2
                T(i) = T(i) + .Cells(42 - i - IIf(i > 0, 1, 0), 7).Value
            Next i
        End With
        ActiveWorkbook.Close False
    Next f
    ActiveSheet.Range("A1:A3").Value = Application.Transpose(T)
    Application.ScreenUpdating = True
End Sub

Intestable dans le fichier fourni, qui ne contient rien.

Mais même si une macro comme celle-ci est simple, il tout de même bien plus intelligent de se mettre en situation de s'en passer.

Cordialement.

Bonjour, merci pour votre réponse et du temps que vous consacrer pour moi.

Je crois que je me suis mal exprimer concernant mon problème.

Voici un exemple plus concret :

J'ai 3 classeurs (test1,test2,test3) + un classeur récapitulatif.

1/ Je veut faire la somme des cellules (B2,D2,F2,A3,D3) de la feuille1 des 3 classeurs dans le classeur récapitulatif respectivement en (B2,D2,F2,A3,D3) de la feuille1 de ce dernier. (ex somme B2 des 3 classeurs en B2 du récapitulatif).

2/ Je veux avoir une fenêtre qui me demande l'emplacement du dossier qui contient les classeurs.

3/ Les 3 classeurs doivent s'ouvrir et ce fermer automatiquement sans sauvegarde lors de l’exécution de la macro.

Merci.

3test-3.xlsx (9.55 Ko)
4test-2.xlsx (9.55 Ko)
3test-1.xlsx (9.55 Ko)

Je crois que je me suis mal exprimer concernant mon problème.

Tu te moques de qui ?

Relis ton premier post sur le sujet !

Je t'ai exprimé que je ne trouvais pas ton organisation très heureuse ni optimale, mais j'ai répondu à ta demande en te fournissant une macro réalisant ce que tu demandais, exactement et dans les moindres détails.

Alors, si tout d'un coup ce n'est plus les même cellules qui sont concernées, eh bien tu adaptes.

Si tu veux qu'on te demande l'emplacement des classeurs sans l'avoir exprimé jusqu'ici, tu écris la ligne pour ça, c'est pas bien compliqué.

Et pour couronner tu veux que les classeurs se ferment sans sauvegarde... alors que c'est déjà ce qui se passe... Tu n'as pas lu, tu n'as pas compris, tu n'as pas essayé... !?

Et tu reviens avec :

Voici un exemple plus concret

Parce que le précédent ne l'était pas ! Et le prochain le sera peut-être encore plus ?

J'entends travailler sur des données et des indications précises, pas dans le vague ni dans des situations qui se modifient en permanence.

Je crois que je vais cesser de répondre aux demandes des gens qui commencent par "par exemple", cela paraît être un indice qu'ils ne savent pas vraiment ce qu'ils veulent.

Bonsoir Mr MFerrant, je m'excuse pour ce malentendu et je vous assure que je me moque pas de vous loin de là.

Au début je voulais juste avoir un exemple pour comprendre et adapte moi même, mais vu que j'ai pas bien compris le code j'ai essaie de vous expliquer mes besoin exactement.

Merci et bon continuation sur le Forum.

Je te la remets aménagée avec les nouvelles adresses et un dispositif transposable dans toutes situations :

Sub Sommes()
    Dim T(4), fich, chemin$, lig, col, f%, i%
    chemin = ThisWorkbook.Path & "\" 'en supposant tous les classeurs dans même dossier
    fich = Array("nomClasseur1", "nomClasseur2", "nomClasseur3")
    lig = Array(2, 2, 2, 3, 3)
    col = Array(2, 4, 6, 1, 4)
    Application.ScreenUpdating = False
    For f = 0 To 2
        Workbooks.Open chemin & fich(f) & ".xlsx" 'si listage fichiers n'intègre pas extension
        With ActiveWorkbook.Worksheets("FICHE DE SALAIRE")
            For i = 0 To 2
                T(i) = T(i) + .Cells(lig(i), col(i))
            Next i
        End With
        ActiveWorkbook.Close False
    Next f
    With ActiveSheet
        For i = 0 To 4
            .Cells(lig(i), col(i)) = T(i)
        Next i
    End With
    Application.ScreenUpdating = True
End Sub

Bonsoir Mr MFerrand,

Merci beaucoup pour votre réponse qui correspond parfaitement a ce que je veux, j'ai essayé le code est ça marche à merveille, en plus je peut changer les cellules à ma guise.

Juste une petite question pour bien comprendre, comment faire si on a une plage de cellules (ex=A2:G8) ? (je crois quand dois changer la fonction Array).

A bientôt et encore merci pour le travail que vous faite pour les utilisateurs du forum.

Je ne comprends pas ta question.

Les tableaux ici servent à adresser des cellules qui ne forment pas une plage.

Bonjour, je reformule ma question.

Comment faire pour calculer la somme de chaque cellule d'une plage (ex=A2:G8) de plusieurs classeurs et collé le résultat sur la mème plage d'un classeur récapitulatif? (sélectionner une plage d'un coup au lieu de chaque cellule a part). A bientôt

Rechercher des sujets similaires à "probleme code vba"