Création d'un bouton

Bonjour,

comme le précise l'intitulé je souhaiterai créer un bouton qui me permettrait d'exécuter le code ci-dessous, le problème c'est qu'il est assez particulier et je n'arrive pas à créer ce fameux bouton, la situation actuelle est la suivante :

- J'ai deux classeur l'un dans lequel j'ajoute des données, l'autre s'ouvre et ce synchronise lorsque je change de cellule. Je voudrais ne plus effectuer la synchronisation en temps réel (ce qui m'oblige à avoir les deux classeurs ouverts constamment) mais l'effectuer seulement lorsque j'appuie sur le bouton, ce qui implique que la macro doit ouvrir mon classeur à synchronisé, mettre à jour, puis le refermer. Je souhaite faire comme ceux-ci car mon classeur à synchroniser est placé sur le réseau local. Ce classeur doit pouvoir être ouvert par une autre personne tout en étant à jour.

Voici le code initale merci d'avance :

Option Explicit

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Const maj = "CopieSuivi_hebdo_beneff.xlsm"   ' nom du classeur copie à synchroniser
Dim clc As Workbook                     ' objet classeur copie à synchroniser
Dim feu As Integer                      ' index feuille
Dim cl1 As Integer, cl2 As Integer      ' index colonnes
Dim lig As Long                         ' lignes de la colonne
Dim tba()
On Error Resume Next
Set clc = Workbooks(maj)
If clc Is Nothing Then                  ' le classeur n'est pas ouvert
    Workbooks.Open ThisWorkbook.Path & "\" & maj
    Set clc = Workbooks(maj)
    If clc Is Nothing Then MsgBox "Classeur  à synchroniser absent": Exit Sub
End If
On Error GoTo 0
For feu = 1 To clc.Sheets.Count         ' boucle feuilles du classeur
    If clc.Sheets(feu).Name = Sh.Name Then
        For cl1 = 1 To clc.Sheets(feu).UsedRange.Columns.Count  ' feuille à synchroniser
            For cl2 = 1 To Sh.UsedRange.Columns.Count
                If clc.Sheets(feu).Cells(1, cl1).Value = Sh.Cells(1, cl2).Value Then
                    lig = Sh.Cells(Rows.Count, cl2).End(xlUp).Row
                    If lig > 1 Then                             ' colonne à synchroniser
                        tba = Sh.Cells(1, cl2).Resize(lig, 1).Value
                        clc.Sheets(feu).Cells(1, cl1).Resize(UBound(tba), 1).Value = tba
                    End If
                    Exit For
                End If
            Next cl2
        Next cl1
    End If
Next feu
ThisWorkbook.Activate
End Sub

Bonjour Gabich

Peut-être comme ça, code à mettre dans un module

Sub Synchro()
  Const maj = "CopieSuivi_hebdo_beneff.xlsm"   ' nom du classeur copie à synchroniser
  Dim clc As Workbook                     ' objet classeur copie à synchroniser
  Dim sh As Worksheet
  Dim feu As Integer                      ' index feuille
  Dim cl1 As Integer, cl2 As Integer      ' index colonnes
  Dim lig As Long                         ' lignes de la colonne
  Dim tba()
  ' Définir le nom de la feuille active
  Set sh = ActiveSheet
  ' En cas d'erreur on continue le code
  On Error Resume Next
  Set clc = Workbooks(maj)
  If clc Is Nothing Then                  ' le classeur n'est pas ouvert
    Workbooks.Open ThisWorkbook.Path & "\" & maj
    Set clc = Workbooks(maj)
    If clc Is Nothing Then MsgBox "Classeur  à synchroniser absent": Exit Sub
  End If
  On Error GoTo 0
  For feu = 1 To clc.Sheets.Count         ' boucle feuilles du classeur
    If clc.Sheets(feu).Name = sh.Name Then
      For cl1 = 1 To clc.Sheets(feu).UsedRange.Columns.Count  ' feuille à synchroniser
        For cl2 = 1 To sh.UsedRange.Columns.Count
          If clc.Sheets(feu).Cells(1, cl1).Value = sh.Cells(1, cl2).Value Then
            lig = sh.Cells(Rows.Count, cl2).End(xlUp).Row
            If lig > 1 Then                             ' colonne à synchroniser
              tba = sh.Cells(1, cl2).Resize(lig, 1).Value
              clc.Sheets(feu).Cells(1, cl1).Resize(UBound(tba), 1).Value = tba
            End If
            Exit For
          End If
        Next cl2
      Next cl1
    End If
  Next feu
  ThisWorkbook.Activate
End Sub

Pour le bouton tu mets la forme que tu veux, clique droit dessus -> Affecter une macro

A+

BrunoM45 a écrit :

Bonjour Gabich

Peut-être comme ça, code à mettre dans un module

Sub Synchro()
  Const maj = "CopieSuivi_hebdo_beneff.xlsm"   ' nom du classeur copie à synchroniser
  Dim clc As Workbook                     ' objet classeur copie à synchroniser
  Dim sh As Worksheet
  Dim feu As Integer                      ' index feuille
  Dim cl1 As Integer, cl2 As Integer      ' index colonnes
  Dim lig As Long                         ' lignes de la colonne
  Dim tba()
  ' Définir le nom de la feuille active
  Set sh = ActiveSheet
  ' En cas d'erreur on continue le code
  On Error Resume Next
  Set clc = Workbooks(maj)
  If clc Is Nothing Then                  ' le classeur n'est pas ouvert
    Workbooks.Open ThisWorkbook.Path & "\" & maj
    Set clc = Workbooks(maj)
    If clc Is Nothing Then MsgBox "Classeur  à synchroniser absent": Exit Sub
  End If
  On Error GoTo 0
  For feu = 1 To clc.Sheets.Count         ' boucle feuilles du classeur
    If clc.Sheets(feu).Name = sh.Name Then
      For cl1 = 1 To clc.Sheets(feu).UsedRange.Columns.Count  ' feuille à synchroniser
        For cl2 = 1 To sh.UsedRange.Columns.Count
          If clc.Sheets(feu).Cells(1, cl1).Value = sh.Cells(1, cl2).Value Then
            lig = sh.Cells(Rows.Count, cl2).End(xlUp).Row
            If lig > 1 Then                             ' colonne à synchroniser
              tba = sh.Cells(1, cl2).Resize(lig, 1).Value
              clc.Sheets(feu).Cells(1, cl1).Resize(UBound(tba), 1).Value = tba
            End If
            Exit For
          End If
        Next cl2
      Next cl1
    End If
  Next feu
  ThisWorkbook.Activate
End Sub

Pour le bouton tu mets la forme que tu veux, clique droit dessus -> Affecter une macro

A+

Je vais tester ça et je vous tiens au courant, merci beaucoup !

Re !

Donc j'ai bien essayé ton nouveau code, il est fonctionne bien merci=)

Pense-tu qu'il est possible ue le second fichier soit fermer et que lorsque j'appuie sur le bouton cela me permettrai :

- d'ouvrir mon classeur à synchronisé (situé à un chemin x)

- de le mettre à jour avec les nouvelles données

- puis de refermer le fichier

Rechercher des sujets similaires à "creation bouton"