Bouton plusieurs onglets - glisser formules vba

sebgacs

XLDnaute Nouveau
Bonjour à tous,

à partir d'un bouton de commande situé sur un onglet "Report", je souhaite glisser les formules d'une colonne vers une autre, et copier-coller en valeur les données de la colonne précédente.

Le code fonctionne bien lorsque l'onglet traité est le même que celui ou il y a le bouton mais pas lorsque l'onglet est différent (malgrès les dénominations: ActiveWorkbook.Sheets("Report")...)

Quelqu'un aurait-il une piste ??
Ci-joint le fichier avec des commentaires dans le code.

à noter que la colonne à glisser est défini par un numéro de semaine rempli par l'utilisateur en B2 onglet report.
la hauteur va de la 5eme à la derniere ligne non vide

merci à vous
en espérant avoir été clair
Sebastien
 

Pièces jointes

  • ESSAI.xlsm
    56.5 KB · Affichages: 90
  • ESSAI.xlsm
    56.5 KB · Affichages: 81
  • ESSAI.xlsm
    56.5 KB · Affichages: 78
C

Compte Supprimé 979

Guest
Re : Bouton plusieurs onglets - glisser formules vba

Salut Sebgacs,

Perso, je n'ai pas rencontré de problème particulier, en revanche j'ai quelque peu modifié le code
VB:
Private Sub MAJ_click()
  Dim N As String
  Dim NumColEcart As Integer
  Dim iEcart As Integer
  Dim LastEcart As Integer
  ' Variables pour Feuille ANO
  Dim NumColANO As Integer
  Dim iANO As Integer
  Dim LastAno As Integer


  'récupère la valeur de la semaine remplie dans l'onglet Report en B2
  N = ActiveWorkbook.Sheets("Report").Range("B2").Value
  'N = "12 S35"


  '******onglet Report***********
  With ActiveWorkbook.Sheets("Report")
    .Activate
    'recherche le numéro de colonne de la semaine en cours
    NumColEcart = .Rows(4).Find(N, lookat:=xlWhole).Column - 1
    'définit la variable de boucle et le numéro de la derniere ligne
    LastEcart = .Range("A" & Rows.Count).End(xlUp).Row
    'glisse la formule de la semaine précédente à la semaine en cours pour chaque cellule de la ligne 5 à la dernière ligne
    'colle en valeur la semaine précédente
    For iEcart = 5 To LastEcart
      .Range(.Cells(iEcart, NumColEcart), .Cells(iEcart, NumColEcart + 1)).FormulaLocal = .Cells(iEcart, NumColEcart).Formula
      .Cells(iEcart, NumColEcart - 1).Copy
      .Cells(iEcart, NumColEcart - 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Next
  End With


  '******onglet ANO***********
  With ActiveWorkbook.Sheets("ANO")
    .Activate
    'recherche le numéro de colonne de la semaine en cours
    NumColANO = .Rows(4).Find(N, lookat:=xlWhole).Column - 1
    'définit la variable de boucle et le numéro de la derniere ligne
    LastAno = .Range("A" & Rows.Count).End(xlUp).Row
    'glisse la formule de la semaine précédente à la semaine en cours pour chaque cellule de la ligne 5 à la dernière ligne
    'colle en valeur la semaine précédente
    For iANO = 5 To LastAno
      .Range(.Cells(iANO, NumColANO), .Cells(iANO, NumColANO + 1)).FormulaLocal = .Cells(iANO, NumColANO).Formula
      .Cells(iANO, NumColANO - 1).Copy
      .Cells(iANO, NumColANO - 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Next
  End With
End Sub

a+
 

sebgacs

XLDnaute Nouveau
Re : Bouton plusieurs onglets - glisser formules vba

Et bien écoute ça fonctionne très bien maintenant :) merci c'est top!
C'était bien un soucis de gestion d'onglet, ton "with" marche nickel
(mais à vrai dire je ne comprends pas bien pourquoi)
a +
 
C

Compte Supprimé 979

Guest
Re : Bouton plusieurs onglets - glisser formules vba

Re,

Désolé de na pas avoir été plus explicite :eek:

Ton problème venait de ce début de ligne
Code:
ActiveWorkbook.Sheets("ANO").Range(Cells(iANO, NumColANO), Cells(iANO, NumColANO + 1)).FormulaLocal
Les "Cells" ne sont pas liée à un objet conteneur !

Il aurait fallu mettre
Code:
ActiveWorkbook.Sheets("ANO").Range(ActiveWorkbook.Sheets("ANO").Cells(iANO, NumColANO), ActiveWorkbook.Sheets("ANO").Cells(iANO, NumColANO + 1)).FormulaLocal

Avec mon With et les points partout, cela fait la même chose

a+
 

sebgacs

XLDnaute Nouveau
Re : Bouton plusieurs onglets - glisser formules vba

Merci encore Bruno45 je comprends la méthode with et je la réutiliserai ;)

J'ai désormais un soucis avec mon SOMMEPROD!

Le code permet de glisser les formules automatiquement, en revanche la formule "SOMMEPROD" est transformée en "SUMPRODUCT" et des #NOM? apparraissent alors que mon sommeprod marche très bien. (j'ai essayé de glisser les formules avec différentes méthodes: range, fillright, autofill, PasteSpecial Paste:=xlPasteValues... mais à chaque fois le sommeprod est transformé).

==> Quelqu'un saurait-il comment faire en sorte que la formule sommeprod soit conservée et non remplacée par sumproduct ??

merci pour votre aide :)
 

sebgacs

XLDnaute Nouveau
Re : Bouton plusieurs onglets - glisser formules vba

J'ai trouvé une solution je ne sais pas si c'est la meilleure mais ça fonctionne :)

la fonction replace !
.Cells(iANO, NumColANO + 1).FormulaLocal = Replace(.Cells(iANO, NumColANO + 1).FormulaLocal, "SUMPRODUCT", "SOMMEPROD")
 
C

Compte Supprimé 979

Guest
Re : Bouton plusieurs onglets - glisser formules vba

Salut ;)

Si tu utilises "FormulaLocal" tu dois mettre dans ta formule "SOMMEPROD"
Code:
.Cells(iANO, NumColANO + 1).FormulaLocal = "=SOMMEPROD(...)"


A+
 

Discussions similaires

Statistiques des forums

Discussions
312 687
Messages
2 090 951
Membres
104 705
dernier inscrit
Mike72