Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Bouton plusieurs onglets - glisser formules vba

  • Initiateur de la discussion Initiateur de la discussion sebgacs
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

S

sebgacs

Guest
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

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+
 
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 +
 
Re : Bouton plusieurs onglets - glisser formules vba

Re,

Désolé de na pas avoir été plus explicite 😱

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+
 
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 🙂
 
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")
 
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+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
4
Affichages
311
Réponses
5
Affichages
665
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…