Aide pour macro d'importations/traitement et conditions

Bonsoir,

Après un premier projet qui a pu aboutir grâce à l'aide très précieuse et plus que bienvenue de Gmb, me revoilà avec un sujet, sinon similaire, au moins très approchant.

Je dois me servir de fichiers sources (au nombre de 4) tous identiques ainsi nommés, pour l'exemple :

source resa ; source resa2 ; source resa3 et source resa4.

Ces fichiers contiennent chacun deux feuilles. Sur la première, on retrouve des noms, date d'AR (cette colonne nous sera utile), date Resa , montant (colonne qui sera exploitée) et enfin type Resa (qui fera également l'objet d'une reprise).

Sur la seconde feuille, on retrouve exactement les mêmes informations, mais triées par ordre alphabétique (par Noms). Attention car ces fichiers sont régulièrement alimentés, donc nous actionnons souvent des "insertion ligne" pour des ajouts de données.

De ces fichiers, je veux extraire des informations , les exploiter et les inscrire dans un autre fichier nommé "tabResa" :

Comptabiliser le Nombre d'AR par mois (via les dates d'AR) pour un report dans la colonne "Nb Resa" ; le nombre de personnes concernées/mois (on va compter 1 resa par personne, mais si un même nom revient plusieurs fois, il ne sera comptabilisé que pour 1 resa), le montant des resa / mois et enfin, le type de resa qui revient majoritairement/mois (cette cellule reste toutefois facultative si trop complexe à intégrer).

Parallèlement à ces données, il faut également exploiter les données d'un autre fichier unique nommé "sejours". Ce fichier contient 12 feuilles, pour les 12 mois de l'année. On y recense des dates de séjours par destination / jours / mois et qui fonctionne déjà avec une macro (la fameuse macro qui m'avait fait venir pour la première fois sur ce forum avant mon inscription) en fonction des cellules colorées (pour 4 couleurs distinctes).

Pour l'exemple, je n'ai complété que partiellement le fichier "sejour" car fastidieux à refaire chez moi et impossible à importer du bureau...cependant, si nécessaire, je le compléterai. Pour l'heure j'ai indiqué en message/indications sous ce tableau les données importantes à retenir et qui devront intégrer le fichier "tabResa".

Je vous joins les tableaux ce sera plus parlant (je ne joins qu'un fichier "source resa" sachant que les 3 autres sont exactement identiques seules les informations saisies différent).

A noter que je tourne sur excel 2003 au bureau.

Ah oui, une dernière chose ! Je ne sais pas si on peut faire quelque chose mais, j'ai déjà 3 macro de mes précédents travaux. Du coup, j'ai trois boutons personnalisés dans ma barre d'outils (Gmb m'a expliqué comment mettre un bouton personnalisé dans le corps même du fichier sous excel 2013 mais ne parvenant pas reproduire la manipulation sur excel 2003, je n'ai pu que les installer à côté du "?" de ma barre d'outils....alors, plus il y a de macro, plus c'est le bazar...

Et si je vais sur un autre fichier, les boutons sont toujours présent alors que le nouveau fichier n'est pas concerné par les macro. Y'a t'il possibilité de modifier cela ?

Merci par avance de votre intérêt...!

Je reste évidemment à votre disposition pour toute explication complémentaire car je crains d'être un peu brouillonne dans mes explications.

25tabresa.xlsm (10.01 Ko)
16source-resa.xlsx (11.15 Ko)
19sejours.xlsm (29.55 Ko)

Bonjour

Juste pour prendre date et en attendant la suite.

Tu écris :

(Gmb m'a expliqué comment mettre un bouton personnalisé dans le corps même du fichier sous excel 2013 mais ne parvenant pas reproduire la manipulation sur excel 2003

Alors voilà.

Supposons que tu aies la macro suivante dans un module :

Sub EssaiDeBouton()
    MsgBox "Bonjour, l'Ange qui passe !"
End Sub

Tu veux créer un bouton sur la feuille ‘’Feuil1’’ du classeur qui la contient pour pouvoir la lancer.

• Tu actives la feuille ‘’Feuil1’’

• Tu cliques sur l’icone ‘’Zone de texte’’ qui est dans la barre d’outils ‘’Dessin’’.

• Si cette barre d’outils n’est pas sur ton bureau, tu l’actives à partir du menu : ‘’Affichage – Barre d’outils – Dessin’’

• Quand tu as cliqué sur l’icone ‘’Zone de texte’’ ton curseur change de forme et, avec le doigt enfoncé, tu peux tracer un rectangle

• Tu peux alors écrire un texte à l’intérieur ; pour l’exemple saisie : ‘’Message’’

• Fais un clic droit sur la partie ombrée de l’endrement du rectangle. Une boite de dialogue s'ouvre.

• Choisis : ‘’Format de la zone de texte’’ Tu peux alors adapter le bouton à ton goût : couleur, centrage du texte, police, etc …

• Valide avec ‘’OK’’ puis refait pareil : clic droit sur le bord du rectangle mais, cette fois, choisis : ‘’Affecter une macro’’. Toutes les macros de modules apparaissent et en particulier celle qui t’intéresse : ‘’EssaiDeBouton’’

• Clique sur le nom de cette macro puis sur ‘’OK’’

La fenêtre se referme et ton bouton actionnera désormais la macro en question.

OK ?

A bientôt

11essai.zip (6.36 Ko)

Merci pour ta réponse et ton intérêt pour mes problématiques.

Sur la version 2003, concernant la zone de texte, aucun souci, j'avais réussi à en créer une, mais malgré le clic-droit, aucune boîte de dialogue n'a jamais voulu s'ouvrir ! C'est pour ça que j'avais cherché un autre moyen de créer un bouton personnalisé. Et le seul trouvé était de passer par le menu, outils puis personnaliser, via le menu commande j'ai sélectionné le bouton que j'ai alors fait glisser sur ma barre d'outils faute de pouvoir faire comme tu me le suggérais.

Et de même pour chaque nouvelle macro que je voulais lier à un bouton.

Sur ma version 2013, le problème ne se pose absolument pas, je parviens à créer le bouton dans la feuille et j'ai bien la boîte de dialogue.

mais malgré le clic-droit, aucune boîte de dialogue n'a jamais voulu s'ouvrir !

Le truc, c'est de bien sélectionner la zone de texte, c'est à dire l'objet rectange et ne plus avoir le curseur qui clignote à l'intérieur comme s'il attendait que saisisses du texte.

Refait l'essai à l'occasion et dis-moi...

Bye !

Je retenterai mais, honnêtement, je pense avoir scrupuleusement suivi l'instruction la dernière fois. M'enfin, cela ne me coûtera rien de retenter l'expérience...

Sinon, j'ai également trouvé cela en cherchant un peu (je n'avais pas utilisé "formulaire" pour ma part, mais bien une "commande") :

Dans Excel 2003 :

Affichage/Barres d'outils/Formulaire ou clic-droit sur une barre d'outils puis Formulaire.

Cliquez sur le bouton Bouton , dessinez sur votre feuille un rectangle.

Dans la boîte de dialogue Affecter une macro, sélectionnez votre macro dans la liste puis cliquez sur Ok.

Sélectionnez le texte du bouton et tapez un texte plus explicite.

Sélectionnez à nouveau le texte du bouton et modifiez la taille de police, éventuellement la police et son style italique et/ou gras dans la barre d'outils Mise en forme.

Clic-droit sur le bouton puis Format de contrôle.

Onglet Propriétés, sélectionnez l'option Déplacer sans dimensionner avec les cellules ou Ne pas déplacer ou dimensionner avec les cellules.

Décochez Imprimer avec l'objet. Ok.

Cliquez dans une cellule quelconque de la feuille.

Vous pouvez maintenant cliquer sur votre bouton, la macro s'exécutera.

A voir ce que cela donnera.

Bonjour,

Bon, j'ai décidé de tenter quelque chose, en prenant dans un premier temps ce qui m'apparaît être le plus simple dans ma problématique : ce qui à trait aux séjours (via le fichier "sejours" et dont les résultats sont à transposer dans le fichier "tabResa").

Ne sachant pas comment débuter, j'ai décidé de faire un enregistrement de macro, en fonction des actions manuelles que je dois réaliser pour obtenir les résultats voulus.

Suite à cet enregistrement, cela me donne :

Sub Imports_séjours()
'
' Imports_séjours Macro
'

'
    Range("B3").Select
    ActiveCell.FormulaR1C1 = _
        "=[sejours.xlsm]Janvier!R6C33+[sejours.xlsm]Janvier!R21C33+[sejours.xlsm]Janvier!R33C33+[sejours.xlsm]Janvier!R42C33+[sejours.xlsm]Janvier!R45C33+[sejours.xlsm]Janvier!R48C33+[sejours.xlsm]Janvier!R51C33+[sejours.xlsm]Janvier!R60C33+[sejours.xlsm]Janvier!R69C33+[sejours.xlsm]Janvier!R73C33+[sejours.xlsm]Janvier!R77C33+[sejours.xlsm]Janvier!R85C33+[sejours.xlsm]Janvier!R100C33"
    Range("C3").Select
    ActiveCell.FormulaR1C1 = "=[sejours.xlsm]Janvier!R18C33+[sejours.xlsm]Janvier!R24C33+[sejours.xlsm]Janvier!R25C33+[sejours.xlsm]Janvier!R28C33+[sejours.xlsm]Janvier!R39C33+[sejours.xlsm]Janvier!R43C33+[sejours.xlsm]Janvier!R47C33+[sejours.xlsm]Janvier!R49C33+[sejours.xlsm]Janvier!R57C33+[sejours.xlsm]Janvier!R66C33+[sejours.xlsm]Janvier!R70C33+[sejours.xlsm]Janvier!R74C33+[sejours.xlsm]Janvier!R83C33+[sejours.xlsm]Janvier!R95C33+[sejours.xlsm]Janvier!R97C33"
    Range("D3").Select
    ActiveCell.FormulaR1C1 = "=SUM(RC[-2]:RC[-1])"
    Range("D4").Select
End Sub

J'ai testé avec février, le code est identique (seule la colonne cible diffère) et il en sera de même pour tous les mois. D'où la question suivante :

Sachant qu'il s'agit de formule répétitives, reprenant les mêmes cellules de calcul mais sur des feuilles différentes, comment alléger la formule ?

Merci d'avance ! Je poursuis mes recherches en l'attente d'une aide amicale !

(Edit de 16:40 pour ajouter l'intégralité de la macro obtenue avec l'ensemble des cellules concernées pour le mois de janvier)

Bonjour

Me revoilà.

Avec un nouveau projet à tester car il peut y avoir des erreurs ou des bugs.

Pour ce qui concerne, la première partie, j’ai laissé tombé le type de Resa majoritaire : à moins de monter une usine à gaz, je ne vois pas par quel bout prendre le problème.

Pour la deuxième partie, la structure de tes tableaux rend également le problème très complexe.

Aussi, je me suis permis une variante.

Au lieu de fonction volatile dont je n’ai pas compris le fonctionnement, je me suis servi de mises en forme conditionnelles.

Si tu saisies ‘’J’’ ou ‘’j’’ dans une cellule, elle devient marron. Son texte aussi, ce qui fait qu’on ne le voit pas. Mais il y est. Et la macro qui se joue des couleurs peut facilement compter combien il y a de j

Pareil pour les nuitées : on tape ‘’N’’ ou ‘’n’’ et la cellule prend une autre couleur.

Cela te convient-il ?

Je n’avais pas pris connaissance de tes essais. Je vais le faire mais, à priori, je ne vois pas comment automatiser la sélection des zones où il faut chercher les journées et celles où il faut chercher les nuitées. A la main, c’est facile mais si ces zones changent d’une feuille à l’autre ….

Bye !

23sejours.zip (85.50 Ko)

Bonsoir et merci, je peux toujours compter sur toi, cela fait plaisir !

Je vais regarder cela de suite et tenter de le reproduire dans mon propre fichier test.

Je vais déjà m'attarder sur la macro des resa car contrairement aux séjours, je ne savais pas du tout comment débuter la macro.

Pour les séjours, nous y reviendrons, il faut déjà que j'en comprenne le fonctionnement.

A très vite pour les résultats.

Bonsoir !

Je n'ai pas avancé comme je l'aurai voulu aujourd'hui, pas de mal de choses à faire. Quant à hier soir, jusqu'assez tard dans la nuit, j'ai préféré terminer la macro que j'avais débutée sur les séjours.

J'ai pris acte de ta solution alternative quant aux "j" ou "n" saisis dans les cellules concernées mais cela ne convient pas au sens où, il est vrai que dans mon exemple il n'y a que la couleur grenat, mais dans la réalité, il y a 1 couleur par agent complétant ledit tableau (grenat, bleu indigo, mauve et rose).

De fait, il faudrait diverses lettres pour une même application...on se compliquerait la vie. J'ai terminé de reprendre la macro que j'avais débutée et que voici, une fois finalisée :

Sub Imports_séjours()
'
' Imports_séjours Macro
'

'
    Range("B3").Select
    ActiveCell.FormulaR1C1 = _
        "=[sejours.xlsm]Janvier!R6C33+[sejours.xlsm]Janvier!R21C33+[sejours.xlsm]Janvier!R33C33+[sejours.xlsm]Janvier!R42C33+[sejours.xlsm]Janvier!R45C33+[sejours.xlsm]Janvier!R48C33+[sejours.xlsm]Janvier!R51C33+[sejours.xlsm]Janvier!R60C33+[sejours.xlsm]Janvier!R69C33+[sejours.xlsm]Janvier!R73C33+[sejours.xlsm]Janvier!R77C33+[sejours.xlsm]Janvier!R85C33+[sejours.xlsm]Janvier!R100C33"
    Range("C3").Select
    ActiveCell.FormulaR1C1 = "=[sejours.xlsm]Janvier!R18C33+[sejours.xlsm]Janvier!R24C33+[sejours.xlsm]Janvier!R25C33+[sejours.xlsm]Janvier!R28C33+[sejours.xlsm]Janvier!R39C33+[sejours.xlsm]Janvier!R43C33+[sejours.xlsm]Janvier!R47C33+[sejours.xlsm]Janvier!R49C33+[sejours.xlsm]Janvier!R57C33+[sejours.xlsm]Janvier!R66C33+[sejours.xlsm]Janvier!R70C33+[sejours.xlsm]Janvier!R74C33+[sejours.xlsm]Janvier!R83C33+[sejours.xlsm]Janvier!R95C33+[sejours.xlsm]Janvier!R97C33"
    Range("D3").Select
    ActiveCell.FormulaR1C1 = "=SUM(RC[-2]:RC[-1])"

    Range("B4").Select
    ActiveCell.FormulaR1C1 = _
        "=[sejours.xlsm]Février!R6C30+[sejours.xlsm]Février!R21C30+[sejours.xlsm]Février!R33C30+[sejours.xlsm]Février!R42C30+[sejours.xlsm]Février!R45C30+[sejours.xlsm]Février!R48C30+[sejours.xlsm]Février!R51C30+[sejours.xlsm]Février!R60C30+[sejours.xlsm]Février!R69C30+[sejours.xlsm]Février!R73C30+[sejours.xlsm]Février!R77C30+[sejours.xlsm]Février!R85C30+[sejours.xlsm]Février!R100C30"
    Range("C4").Select
    ActiveCell.FormulaR1C1 = "=[sejours.xlsm]Février!R18C30+[sejours.xlsm]Février!R24C30+[sejours.xlsm]Février!R25C30+[sejours.xlsm]Février!R28C30+[sejours.xlsm]Février!R39C30+[sejours.xlsm]Février!R43C30+[sejours.xlsm]Février!R47C30+[sejours.xlsm]Février!R49C30+[sejours.xlsm]Février!R57C30+[sejours.xlsm]Février!R66C30+[sejours.xlsm]Février!R70C30+[sejours.xlsm]Février!R74C30+[sejours.xlsm]Février!R83C30+[sejours.xlsm]Février!R95C30+[sejours.xlsm]Février!R97C30"
    Range("D4").Select
    ActiveCell.FormulaR1C1 = "=SUM(RC[-2]:RC[-1])"

    Range("B5").Select
    ActiveCell.FormulaR1C1 = _
        "=[sejours.xlsm]Mars!R6C33+[sejours.xlsm]Mars!R21C33+[sejours.xlsm]Mars!R33C33+[sejours.xlsm]Mars!R42C33+[sejours.xlsm]Mars!R45C33+[sejours.xlsm]Mars!R48C33+[sejours.xlsm]Mars!R51C33+[sejours.xlsm]Mars!R60C33+[sejours.xlsm]Mars!R69C33+[sejours.xlsm]Mars!R73C33+[sejours.xlsm]Mars!R77C33+[sejours.xlsm]Mars!R85C33+[sejours.xlsm]Mars!R100C33"
    Range("C5").Select
    ActiveCell.FormulaR1C1 = "=[sejours.xlsm]Mars!R18C33+[sejours.xlsm]Mars!R24C33+[sejours.xlsm]Mars!R25C33+[sejours.xlsm]Mars!R28C33+[sejours.xlsm]Mars!R39C33+[sejours.xlsm]Mars!R43C33+[sejours.xlsm]Mars!R47C33+[sejours.xlsm]Mars!R49C33+[sejours.xlsm]Mars!R57C33+[sejours.xlsm]Mars!R66C33+[sejours.xlsm]Mars!R70C33+[sejours.xlsm]Mars!R74C33+[sejours.xlsm]Mars!R83C33+[sejours.xlsm]Mars!R95C33+[sejours.xlsm]Mars!R97C33"
    Range("D5").Select
    ActiveCell.FormulaR1C1 = "=SUM(RC[-2]:RC[-1])"

    Range("B6").Select
    ActiveCell.FormulaR1C1 = _
        "=[sejours.xlsm]Avril!R6C32+[sejours.xlsm]Avril!R21C32+[sejours.xlsm]Avril!R33C32+[sejours.xlsm]Avril!R42C32+[sejours.xlsm]Avril!R45C32+[sejours.xlsm]Avril!R48C32+[sejours.xlsm]Avril!R51C32+[sejours.xlsm]Avril!R60C32+[sejours.xlsm]Avril!R69C32+[sejours.xlsm]Avril!R73C32+[sejours.xlsm]Avril!R77C32+[sejours.xlsm]Avril!R85C32+[sejours.xlsm]Avril!R100C32"
    Range("C6").Select
    ActiveCell.FormulaR1C1 = "=[sejours.xlsm]Avril!R18C32+[sejours.xlsm]Avril!R24C32+[sejours.xlsm]Avril!R25C32+[sejours.xlsm]Avril!R28C32+[sejours.xlsm]Avril!R39C32+[sejours.xlsm]Avril!R43C32+[sejours.xlsm]Avril!R47C32+[sejours.xlsm]Avril!R49C32+[sejours.xlsm]Avril!R57C32+[sejours.xlsm]Avril!R66C32+[sejours.xlsm]Avril!R70C32+[sejours.xlsm]Avril!R74C32+[sejours.xlsm]Avril!R83C32+[sejours.xlsm]Avril!R95C32+[sejours.xlsm]Avril!R97C32"
    Range("D6").Select
    ActiveCell.FormulaR1C1 = "=SUM(RC[-2]:RC[-1])"

    Range("B7").Select
    ActiveCell.FormulaR1C1 = _
        "=[sejours.xlsm]Mai!R6C33+[sejours.xlsm]Mai!R21C33+[sejours.xlsm]Mai!R33C33+[sejours.xlsm]Mai!R42C33+[sejours.xlsm]Mai!R45C33+[sejours.xlsm]Mai!R48C33+[sejours.xlsm]Mai!R51C33+[sejours.xlsm]Mai!R60C33+[sejours.xlsm]Mai!R69C33+[sejours.xlsm]Mai!R73C33+[sejours.xlsm]Mai!R77C33+[sejours.xlsm]Mai!R85C33+[sejours.xlsm]Mai!R100C33"
    Range("C7").Select
    ActiveCell.FormulaR1C1 = "=[sejours.xlsm]Mai!R18C33+[sejours.xlsm]Mai!R24C33+[sejours.xlsm]Mai!R25C33+[sejours.xlsm]Mai!R28C33+[sejours.xlsm]Mai!R39C33+[sejours.xlsm]Mai!R43C33+[sejours.xlsm]Mai!R47C33+[sejours.xlsm]Mai!R49C33+[sejours.xlsm]Mai!R57C33+[sejours.xlsm]Mai!R66C33+[sejours.xlsm]Mai!R70C33+[sejours.xlsm]Mai!R74C33+[sejours.xlsm]Mai!R83C33+[sejours.xlsm]Mai!R95C33+[sejours.xlsm]Mai!R97C33"
    Range("D7").Select
    ActiveCell.FormulaR1C1 = "=SUM(RC[-2]:RC[-1])"

        Range("B8").Select
    ActiveCell.FormulaR1C1 = _
        "=[sejours.xlsm]Juin!R6C32+[sejours.xlsm]Juin!R21C32+[sejours.xlsm]Juin!R33C32+[sejours.xlsm]Juin!R42C32+[sejours.xlsm]Juin!R45C32+[sejours.xlsm]Juin!R48C32+[sejours.xlsm]Juin!R51C32+[sejours.xlsm]Juin!R60C32+[sejours.xlsm]Juin!R69C32+[sejours.xlsm]Juin!R73C32+[sejours.xlsm]Juin!R77C32+[sejours.xlsm]Juin!R85C32+[sejours.xlsm]Juin!R100C32"
    Range("C8").Select
    ActiveCell.FormulaR1C1 = "=[sejours.xlsm]Juin!R18C32+[sejours.xlsm]Juin!R24C32+[sejours.xlsm]Juin!R25C32+[sejours.xlsm]Juin!R28C32+[sejours.xlsm]Juin!R39C32+[sejours.xlsm]Juin!R43C32+[sejours.xlsm]Juin!R47C32+[sejours.xlsm]Juin!R49C32+[sejours.xlsm]Juin!R57C32+[sejours.xlsm]Juin!R66C32+[sejours.xlsm]Juin!R70C32+[sejours.xlsm]Juin!R74C32+[sejours.xlsm]Juin!R83C32+[sejours.xlsm]Juin!R95C32+[sejours.xlsm]Juin!R97C32"
    Range("D8").Select
    ActiveCell.FormulaR1C1 = "=SUM(RC[-2]:RC[-1])"

        Range("B9").Select
    ActiveCell.FormulaR1C1 = _
        "=[sejours.xlsm]Juillet!R6C33+[sejours.xlsm]Juillet!R21C33+[sejours.xlsm]Juillet!R33C33+[sejours.xlsm]Juillet!R42C33+[sejours.xlsm]Juillet!R45C33+[sejours.xlsm]Juillet!R48C33+[sejours.xlsm]Juillet!R51C33+[sejours.xlsm]Juillet!R60C33+[sejours.xlsm]Juillet!R69C33+[sejours.xlsm]Juillet!R73C33+[sejours.xlsm]Juillet!R77C33+[sejours.xlsm]Juillet!R85C33+[sejours.xlsm]Juillet!R100C33"
    Range("C9").Select
    ActiveCell.FormulaR1C1 = "=[sejours.xlsm]Juillet!R18C33+[sejours.xlsm]Juillet!R24C33+[sejours.xlsm]Juillet!R25C33+[sejours.xlsm]Juillet!R28C33+[sejours.xlsm]Juillet!R39C33+[sejours.xlsm]Juillet!R43C33+[sejours.xlsm]Juillet!R47C33+[sejours.xlsm]Juillet!R49C33+[sejours.xlsm]Juillet!R57C33+[sejours.xlsm]Juillet!R66C33+[sejours.xlsm]Juillet!R70C33+[sejours.xlsm]Juillet!R74C33+[sejours.xlsm]Juillet!R83C33+[sejours.xlsm]Juillet!R95C33+[sejours.xlsm]Juillet!R97C33"
    Range("D9").Select
    ActiveCell.FormulaR1C1 = "=SUM(RC[-2]:RC[-1])"

        Range("B10").Select
    ActiveCell.FormulaR1C1 = _
        "=[sejours.xlsm]Août!R6C33+[sejours.xlsm]Août!R21C33+[sejours.xlsm]Août!R33C33+[sejours.xlsm]Août!R42C33+[sejours.xlsm]Août!R45C33+[sejours.xlsm]Août!R48C33+[sejours.xlsm]Août!R51C33+[sejours.xlsm]Août!R60C33+[sejours.xlsm]Août!R69C33+[sejours.xlsm]Août!R73C33+[sejours.xlsm]Août!R77C33+[sejours.xlsm]Août!R85C33+[sejours.xlsm]Août!R100C33"
    Range("C10").Select
    ActiveCell.FormulaR1C1 = "=[sejours.xlsm]Août!R18C33+[sejours.xlsm]Août!R24C33+[sejours.xlsm]Août!R25C33+[sejours.xlsm]Août!R28C33+[sejours.xlsm]Août!R39C33+[sejours.xlsm]Août!R43C33+[sejours.xlsm]Août!R47C33+[sejours.xlsm]Août!R49C33+[sejours.xlsm]Août!R57C33+[sejours.xlsm]Août!R66C33+[sejours.xlsm]Août!R70C33+[sejours.xlsm]Août!R74C33+[sejours.xlsm]Août!R83C33+[sejours.xlsm]Août!R95C33+[sejours.xlsm]Août!R97C33"
    Range("D10").Select
    ActiveCell.FormulaR1C1 = "=SUM(RC[-2]:RC[-1])"

        Range("B11").Select
    ActiveCell.FormulaR1C1 = _
        "=[sejours.xlsm]Septembre!R6C32+[sejours.xlsm]Septembre!R21C32+[sejours.xlsm]Septembre!R33C32+[sejours.xlsm]Septembre!R42C32+[sejours.xlsm]Septembre!R45C32+[sejours.xlsm]Septembre!R48C32+[sejours.xlsm]Septembre!R51C32+[sejours.xlsm]Septembre!R60C32+[sejours.xlsm]Septembre!R69C32+[sejours.xlsm]Septembre!R73C32+[sejours.xlsm]Septembre!R77C32+[sejours.xlsm]Septembre!R85C32+[sejours.xlsm]Septembre!R100C32"
    Range("C11").Select
    ActiveCell.FormulaR1C1 = "=[sejours.xlsm]Septembre!R18C32+[sejours.xlsm]Septembre!R24C32+[sejours.xlsm]Septembre!R25C32+[sejours.xlsm]Septembre!R28C32+[sejours.xlsm]Septembre!R39C32+[sejours.xlsm]Septembre!R43C32+[sejours.xlsm]Septembre!R47C32+[sejours.xlsm]Septembre!R49C32+[sejours.xlsm]Septembre!R57C32+[sejours.xlsm]Septembre!R66C32+[sejours.xlsm]Septembre!R70C32+[sejours.xlsm]Septembre!R74C32+[sejours.xlsm]Septembre!R83C32+[sejours.xlsm]Septembre!R95C32+[sejours.xlsm]Septembre!R97C32"
    Range("D11").Select
    ActiveCell.FormulaR1C1 = "=SUM(RC[-2]:RC[-1])"

        Range("B12").Select
    ActiveCell.FormulaR1C1 = _
        "=[sejours.xlsm]Octobre!R6C33+[sejours.xlsm]Octobre!R21C33+[sejours.xlsm]Octobre!R33C33+[sejours.xlsm]Octobre!R42C33+[sejours.xlsm]Octobre!R45C33+[sejours.xlsm]Octobre!R48C33+[sejours.xlsm]Octobre!R51C33+[sejours.xlsm]Octobre!R60C33+[sejours.xlsm]Octobre!R69C33+[sejours.xlsm]Octobre!R73C33+[sejours.xlsm]Octobre!R77C33+[sejours.xlsm]Octobre!R85C33+[sejours.xlsm]Octobre!R100C33"
    Range("C12").Select
    ActiveCell.FormulaR1C1 = "=[sejours.xlsm]Octobre!R18C33+[sejours.xlsm]Octobre!R24C33+[sejours.xlsm]Octobre!R25C33+[sejours.xlsm]Octobre!R28C33+[sejours.xlsm]Octobre!R39C33+[sejours.xlsm]Octobre!R43C33+[sejours.xlsm]Octobre!R47C33+[sejours.xlsm]Octobre!R49C33+[sejours.xlsm]Octobre!R57C33+[sejours.xlsm]Octobre!R66C33+[sejours.xlsm]Octobre!R70C33+[sejours.xlsm]Octobre!R74C33+[sejours.xlsm]Octobre!R83C33+[sejours.xlsm]Octobre!R95C33+[sejours.xlsm]Octobre!R97C33"
    Range("D12").Select
    ActiveCell.FormulaR1C1 = "=SUM(RC[-2]:RC[-1])"

        Range("B13").Select
    ActiveCell.FormulaR1C1 = _
        "=[sejours.xlsm]Novembre!R6C32+[sejours.xlsm]Novembre!R21C32+[sejours.xlsm]Novembre!R33C32+[sejours.xlsm]Novembre!R42C32+[sejours.xlsm]Novembre!R45C32+[sejours.xlsm]Novembre!R48C32+[sejours.xlsm]Novembre!R51C32+[sejours.xlsm]Novembre!R60C32+[sejours.xlsm]Novembre!R69C32+[sejours.xlsm]Novembre!R73C32+[sejours.xlsm]Novembre!R77C32+[sejours.xlsm]Novembre!R85C32+[sejours.xlsm]Novembre!R100C32"
    Range("C13").Select
    ActiveCell.FormulaR1C1 = "=[sejours.xlsm]Novembre!R18C32+[sejours.xlsm]Novembre!R24C32+[sejours.xlsm]Novembre!R25C32+[sejours.xlsm]Novembre!R28C32+[sejours.xlsm]Novembre!R39C32+[sejours.xlsm]Novembre!R43C32+[sejours.xlsm]Novembre!R47C32+[sejours.xlsm]Novembre!R49C32+[sejours.xlsm]Novembre!R57C32+[sejours.xlsm]Novembre!R66C32+[sejours.xlsm]Novembre!R70C32+[sejours.xlsm]Novembre!R74C32+[sejours.xlsm]Novembre!R83C32+[sejours.xlsm]Novembre!R95C32+[sejours.xlsm]Novembre!R97C32"
    Range("D13").Select
    ActiveCell.FormulaR1C1 = "=SUM(RC[-2]:RC[-1])"

        Range("B14").Select
    ActiveCell.FormulaR1C1 = _
        "=[sejours.xlsm]Décembre!R6C33+[sejours.xlsm]Décembre!R21C33+[sejours.xlsm]Décembre!R33C33+[sejours.xlsm]Décembre!R42C33+[sejours.xlsm]Décembre!R45C33+[sejours.xlsm]Décembre!R48C33+[sejours.xlsm]Décembre!R51C33+[sejours.xlsm]Décembre!R60C33+[sejours.xlsm]Décembre!R69C33+[sejours.xlsm]Décembre!R73C33+[sejours.xlsm]Décembre!R77C33+[sejours.xlsm]Décembre!R85C33+[sejours.xlsm]Décembre!R100C33"
    Range("C14").Select
    ActiveCell.FormulaR1C1 = "=[sejours.xlsm]Décembre!R18C33+[sejours.xlsm]Décembre!R24C33+[sejours.xlsm]Décembre!R25C33+[sejours.xlsm]Décembre!R28C33+[sejours.xlsm]Décembre!R39C33+[sejours.xlsm]Décembre!R43C33+[sejours.xlsm]Décembre!R47C33+[sejours.xlsm]Décembre!R49C33+[sejours.xlsm]Décembre!R57C33+[sejours.xlsm]Décembre!R66C33+[sejours.xlsm]Décembre!R70C33+[sejours.xlsm]Décembre!R74C33+[sejours.xlsm]Décembre!R83C33+[sejours.xlsm]Décembre!R95C33+[sejours.xlsm]Décembre!R97C33"
    Range("D14").Select
    ActiveCell.FormulaR1C1 = "=SUM(RC[-2]:RC[-1])"

End Sub

Tu vois mieux ce que je voulais dire par des codes récurrents ? Je pense qu'on doit pouvoir alléger la formule en faisant une référence à la feuille du mois concerné, puis ensuite seulement commander les sommes de cellules au sein de ladite feuille.

Pour ta macro sur les résa, j'ai tenté quand même hier, mais il y a quelques bugs, il faut que je m'y attèle à nouveau pour voir d'où cela vient.

Enfin, quant à l'usine à gaz que provoquerait les "type de resa majoritaire", ça reste facultatif, donc on peut abandonner l'idée, aucun souci.

Je vais pouvoir attaquer ta macro sur les resa, je te redis ce qu'il en est dès que possible ! Encore un trèèès grand merci pour ton application et ton implication !

Il n'y a pas d'Ange plus heureux au Paradis

Re-bonsoir, c'est encore moi !

Alors, j'avais un premier bug par rapport à mes chemins d'accès, j'ai procédé comme sur notre projet précédent en retirant les .xls superflus et le bug à disparu.

Cependant, à peine un problème de résolu qu'un nouveau à pris sa place. Le débogueur met ceci en lumière (surligné en jaune) :

 Range("A1:E" & derLn).Sort key1:=Range("B2"), key2:=Range("A2"), Header:=xlGuess

avec pour commentaire de bug : "Pour ce faire, la taille des cellules fusionnées doit être identique".

Or, pour moi, les 4 fichiers sources sont bien identiques.

Pour info, je ne sais pas si cela est important mais le debogueur apparaît lorsque la macro ouvre automatiquement mon fichier "Source Resa".

Là, j'avoue ne pas savoir par où prendre le problème...si tu as une idée, je suis preneuse !

Edit de 20:12 :

J'ai détecté le problème, il s'agissait de mon "total des montants" situé en bas du tableau, ainsi que du "total des personnes concernées", également situé en bas de tableau. Effectivement certaines cellules étaient fusionnées pour la bonne structure du tableau. J'ai supprimé ces deux dernières lignes sur les 4 fichiers sources et là, le bug a disparu.

Je vais tenter de trouver un nouvel emplacement non bloquant pour ces deux informations..!

Edit de 20:43 :

J'ai testé la macro, elle tourne sans bug à présent. Néanmoins, si les résultats relatifs aux montants sont bons, si les résultats relatifs aux personnes concernées et au nombre de resa de janvier à novembre sont bons, il n'en reste pas moins que les résultats de décembre sont erronés.

En effet, au vu de mes fichiers sources, on devrait retrouver 3 resa pour 2 personnes concernées, or avec la macro, il trouve 54 resa pour 18 personnes concernées !

Bonjour

Nos rendez-vous du soir continuent : Super !

Si ta macro enregistrée fonctionne, celle-ci devrait fonctionner également et surtout plus élégamment :

Sub Imports_séjours()
    For lgn = 3 To 14     'On va faire une boucle pour traiter de la même manière les lignes 3 à 14 de la feuille active
        nomM = Range("A" & lgn)
        On Error GoTo fin
        derLn = 0
        Set f = Workbooks("sejours.xlsm").Worksheets(nomM)
        Range("B" & lgn) = f.Range("AG6").Value + f.Range("AG21").Value
        Range("C" & lgn) = f.Range("AG18")
        Range("D" & lgn) = "=RC[-2]+RC[-1]"

    Next lgn      'fin de la boucle
fin:
End Sub

J'ai un peu simplifié.

Je ne reporte pas les formules qui lient les 2 feuilles mais les valeurs des colonnes AG du fichier ''sejour''

Par ailleurs, j'ai remarqué aussi que tu allais chercher d'autres cellules à additionner... pour l'instant, je les ai ignorées.

Dis-moi si ça marche.

Car ta macro sur les couleurs que je ne comprends toujours pas, se mêle de la partie et me perturbe... Enfin, on fait avec !

Bye !

je viens de mettre en place la macro que tu m'as donnée pour les séjours mais, malheureusement, rien ne se passe.

Cela ne fonctionne pas !

Si rien ne se passe, essaie de m'envoyer les 2 fichiers dont celui sur lequel tu as installer la macro.

Je regarderai pourquoi cela ne va pas.

A te relire.

J'imagine que cela vient du fait que mon tableau initial des séjours, fourni ici, a été agrémenté des lignes et feuilles supplémentaires (je l'ai complété avec l'ensemble des journées et nuitées, toutes destinations confondues et ce, pour les 12 mois de l'année.

Aussi j'imagine que ta macro ne prend pas tout cela en compte et c'est sûrement ce pourquoi rien ne se passe.

Morphée étant un gars sympa qui connecte les esprits, il a su nous mettre sur la voie de la réussite.

Problème de colonnes différentes pour les totaux des séjours selon le nombre de jours dans le mois ? Résolu grâce à une idée commune : ajuster les colonnes des totaux des mois inférieurs à 30 jours en ajoutant simplement des colonnes superflues (pour que la colonne des totaux de chaque mois se retrouve en cellule AG) qu'il suffit alors de masquer car n'ayant d'autre utilité que celle de faire fonctionner la macro en l'allégeant.

Ce qui donne, grâce aux talents de Gmb :

Dim lgn, nomM, derLn, f

Sub NouvelEssaidImportDesSejours()

    For lgn = 3 To 14     'On va faire une boucle pour traiter de la même manière les lignes 3 à 14 de la feuille active
        nomM = Range("A" & lgn)
        Application.StatusBar = nomM
        On Error GoTo fin
        derLn = 0
        Set f = Workbooks("sejours.xlsm").Worksheets(nomM)
        Range("B" & lgn) = f.Range("AG6").Value + f.Range("AG21").Value + f.Range("AG33").Value + f.Range("AG42").Value _
                            + f.Range("AG45").Value + f.Range("AG48").Value + f.Range("AG51").Value + f.Range("AG60").Value _
                            + f.Range("AG69").Value + f.Range("AG73").Value + f.Range("AG77").Value + f.Range("AG85").Value _
                            + f.Range("AG100").Value
        Range("C" & lgn) = f.Range("AG18") + f.Range("AG24") + f.Range("AG25") + f.Range("AG28") + f.Range("AG39") _
                            + f.Range("AG43") + f.Range("AG47") + f.Range("AG49") + f.Range("AG57") + f.Range("AG66") _
                            + f.Range("AG70") + f.Range("AG74") + f.Range("AG83") + f.Range("AG95") + f.Range("AG97")
        Range("D" & lgn) = "=RC[-2]+RC[-1]"
    Next lgn      'fin de la boucle
fin:
    Application.StatusBar = ""
    MsgBox "Travail terminé avec succès !"
End Sub

en lieu et place de ma macro longue comme mon bras.

Et ça fonctionne comme sur des roulettes !

Reste donc à ajuster la macro des resa qui pose encore problème quant aux nombres de resa et le nombre de personnes concernées, sur le mois de décembre uniquement.

Edit de 15:44

En regardant de plus près, j'ai constaté que la macro n'était pas en cause quant aux problèmes constaté sur le mois de décembre. J'en ai donc déduit que cela provenait plutôt d'une problème inhérent à mes fichiers sources.

Aussi, je n'ai rien vu de problématique dans la construction même de mes tableaux...mais plutôt des mentions portées pour informations (texte d'explication des éléments souhaités) qui sont venus perturber la macro.

j'ai procédé à la suppression du texte informatif sur le premier fichier source et...le nombre de résa de décembre à diminué de manière significative. Aussi je l'ai appliqué à chacun de mes fichiers sources et, oh miracle ! tout est rentré dans l'ordre.

Plus de souci a déplorer. Le sujet est donc clos.

merciiiiiiiiii !

Bon !

Alors, il ne me reste plus qu'à répondre à la question sur le problème du fichier ''sejours'' qui devrait être ouvert par la macro au lieu de l'ouvrir avant de la lancer.

Rajoute cette instruction au début et remplace y la partie '' ThisWorkbook.Path'' par l'adresse exacte de ton fichier :

    'On ouvre le fichier ''sejours''
    Workbooks.Open Filename:=ThisWorkbook.Path & "\sejours.xlsm"
    For lgn = 3 To 14     'On va faire une boucle pour traiter de la même manière les lignes 3 à 14 de la feuille active
    ...
    ...

What else ?

Bye !

Merci beaucoup !

What else ? mmmmh, ma foi, George Clooney dans la hotte du Père Noël c'est une idée..

nan, j'ai déjà mon cadeau de Noël avant l'heure avec toutes ces macros, me voilà comblée, il faut savoir raison garder !

Merci 1000 fois merci gmb !

P.S : par contre, ta dernière suggestion ne fonctionne pas :

Rajoute cette instruction au début et remplace y la partie '' ThisWorkbook.Path'' par l'adresse exacte de ton fichier

Autant le tableau des séjours s'ouvre tout seul, de ce point de vue, ça marche, autant la macro n'agit plus (du fait de la lenteur du processus ?) Donc, je vais m'arranger pour dire aux personnes concernées par le tableau récapitulatif "tabresa2015' d'ouvrir le tableau des séjours d'abord (en msgbox éventuellement)

Rechercher des sujets similaires à "aide macro importations traitement conditions"