Code de transfert qui ne fonctionne plus

Bonjour le forum

j'ai un code de transfert qui retourne un vide sans connaitre la cause

la première partie du code de la commande "transfert" du classeur "calcul" fait la somme des cellules U9 jusqu'à U21 de chaque feuille du classeur production mois par mois et l'envoie vers le classeur " calcul" à la ligne 10 mais ça me retourne un vide depuis un temps

ci joint les fichiers

15calcul.xlsm (21.32 Ko)
5production.xlsm (76.41 Ko)

merci de m'aider svp

merci beaucoup

cordialement

Bonjour,

a priori ça n'a jamais fonctionné parce que :

1) on ne balaye pas toutes les feuilles

    For i = 1 To .Sheets.Count - 1 'la dernière feuille n'est pas lue

2) dans le nom des feuilles, le mois est sur un ou deux caractères ( ex: 27-3-2021 , 26-10-2021...)

      If CInt(Mid(.Sheets(i).Name, 4, 2)) = mois - 1 Then

ne fonctionnera que pour les mois sur 2 caractères.

Si on modifie en ....Name, 4, 1))... ça fonctionnera pour les mois sur 1 caractère et le résultat des mois sur 2 caractères sera reporté sur janvier....

un essai de modification:

For mois = 2 To 13
   With Workbooks("production.xlsm")
    For i = 1 To .Sheets.Count '- 1  pourquoi ne pas vouloir prendre la derniere feuille
      If Right(.Sheets(i).Name, 4) = ActiveSheet.Name Then
        T = Split(.Sheets(i).Name, "-")
            If T(1) = mois - 1 Then
                Set maplage = .Sheets(i).Range("u9:u21")
                Cells(10, mois).Value = Cells(10, mois).Value + Application.WorksheetFunction.Sum(maplage)
            End If
      End If
    Next i
   End With

  ' adapter éventuellement pour l'autre classeur
    .../...
Next mois

A+

Bonjour AlgoPlus

merci beaucoup de votre aide

j'ai essayé votre code mais ça me retourne un message d'erreur : variable non défini T

je veux traiter la totalité des feuilles y inclue la dernière et attribuer à chaque mois sa valeur pour pouvoir ensuite calculer la pourcentage à la ligne 12

merci de m'aider

bien cordialement

Le message d'erreur est clair ! La variable T n'est pas définie....

Alors il faut rajouter sa déclaration avec les autres variables, en début de macro :

Dim i As Integer, maplage As Range, mois As Integer, T

Bonjour,

merci de votre réponse

en exécutant la macro le message d'erreur suivant s'affiche:

erreur d'exécution 1004: impossible de lire la propriété Sum de la classe worksheetFunction

ceci le code inséré:

Option Explicit

Private Sub CommandButton1_Click() 'transfert
Dim i As Integer, maplage As Range, mois As Integer, T

 For mois = 2 To 13
   With Workbooks("production.xlsm")
    For i = 1 To .Sheets.Count '- 1  pourquoi ne pas vouloir prendre la derniere feuille
      If Right(.Sheets(i).Name, 4) = ActiveSheet.Name Then
        T = Split(.Sheets(i).Name, "-")
            If T(1) = mois - 1 Then
                Set maplage = .Sheets(i).Range("u9:u21")
                Cells(10, mois).Value = Cells(10, mois).Value + Application.WorksheetFunction.Sum(maplage)
            End If
      End If
    Next i
   End With

   With Workbooks("Rapport journalier.xlsm")
    For i = 1 To .Sheets.Count
     If Right(.Sheets(i).Name, 4) = ActiveSheet.Name Then
     T = Split(.Sheets(i).Name, "-")
     If T(1) = mois - 1 Then
       Set maplage = .Sheets(i).Range("D26:Q26, D27:Q27,S42:S47")
       Cells(10, mois).Value = Cells(10, mois).Value + Application.WorksheetFunction.Sum(maplage)
      End If
     End If
    Next i
   End With
  Next mois
End Sub

j'ai aussi modifié les noms des feuilles en ajoutant 0 aux mois à un seul chiffre pour que tous les mois soient à deux chiffres

une solution svp

merci beaucoup

Sur quelle ligne utilisant WorksheetFunction.Sum est l'erreur ?

impossible de reproduire l'erreur...

Peut-être qu'avec le classeur Rapport journalier.xlsm ??

Attention, les deux parties de votre code écrivent sur la même ligne : Cells(10, mois).Value

ma proposition initiale avait pour but de s'affranchir des N° de mois sur un ou 2 caractères, cela ne provient pas de là...

En dernier recours, on peut ne pas utiliser WorksheetFunction.Sum puisque la somme est déjà calculé (du moins sur le classeur production.xlsm )

Bonjour

l'erreur est sur la ligne de la partie qui concerne le classeur "production"

je ne sais pas comment modifier le code pour qu'il fonctionne

faire la somme mois par mois à partir du classeur production et éviter les messages d'erreurs

j'ai fourni des classeurs modèles pour simuler la partie concernée par le classeur "production" en mettant le reste du code comme commentaire par exemple

merci encore

...je ne sais pas comment modifier le code pour qu'il fonctionne ...

Désolé..., avec ce code et les classeurs fournis ça fonctionne chez moi ....

si les classeurs réels ne sont pas ceux fournis, ça provient de ce(s) classeur(s) réel(s) ....

Sans le(s) voir, impossible de déceler l'origine du souci.

Dans le classeur "production", sous la plage dont on veut faire la somme, il y a une cellule qui fait la somme de cette plage.

2ème édition : plutôt que d'utiliser WorksheetFunction.Sum on peut récupérer directement le contenu de la cellule contenant déjà la somme

Bonjour,

alors comment utiliser la cellule U22 qui fait la somme

et effacer le contenu des lignes 10 et 11 a chaque activation de la commande transfert pour éviter le cumul des calculs

merci beaucoup

Pour effacer les lignes 10 et 11, l'instruction est utilisée dans la macro du fichier joint au premier post ....

Pour la cellule U22 (pour le classeur production) :

Cells(10, mois).Value = Cells(10, mois).Value +  .Range("U22").Value

A tester

Rechercher des sujets similaires à "code transfert qui fonctionne"