L'idée est simple en théorie mais malgré plusieurs tentatives, je sèche.
Lorsque je clique sur un bouton, la macro me créé une feuille, mais je souhaite que si cette feuille existe, ça ne fasse rien. Je suppose du coup qu'il faut utiliser la fonction If... Then mais je pèche... Pour le moment, voici mon code :
VB:
Sub creation_feuille()
If Not Worksheets("Dossiers Clients") = True Then
Sheets.Add.Name = "Dossiers Clients"
Worksheets("Dossiers Clients").Move _
after:=Worksheets("EXPORT")
End If
End Sub
De plus, je souhaiterais rajouter un code pour que, toujours en cliquant sur ce bouton, toutes les données présentes dans la feuille "EXPORT" à partir de la ligne 2 des colonnes B à O et ce, jusqu'à la dernière ligne ayant des données, soient copiées dans la feuille "Dossiers Clients" dans les colonnes B à O à partir de la première ligne n'ayant pas de données dans ces colonnes.
L'idée est simple en théorie mais malgré plusieurs tentatives, je sèche.
Lorsque je clique sur un bouton, la macro me créé une feuille, mais je souhaite que si cette feuille existe, ça ne fasse rien. Je suppose du coup qu'il faut utiliser la fonction If... Then mais je pèche... Pour le moment, voici mon code :
VB:
Sub creation_feuille()
If Not Worksheets("Dossiers Clients") = True Then
Sheets.Add.Name = "Dossiers Clients"
Worksheets("Dossiers Clients").Move _
after:=Worksheets("EXPORT")
End If
End Sub
De plus, je souhaiterais rajouter un code pour que, toujours en cliquant sur ce bouton, toutes les données présentes dans la feuille "EXPORT" à...
L'idée est simple en théorie mais malgré plusieurs tentatives, je sèche.
Lorsque je clique sur un bouton, la macro me créé une feuille, mais je souhaite que si cette feuille existe, ça ne fasse rien. Je suppose du coup qu'il faut utiliser la fonction If... Then mais je pèche... Pour le moment, voici mon code :
VB:
Sub creation_feuille()
If Not Worksheets("Dossiers Clients") = True Then
Sheets.Add.Name = "Dossiers Clients"
Worksheets("Dossiers Clients").Move _
after:=Worksheets("EXPORT")
End If
End Sub
De plus, je souhaiterais rajouter un code pour que, toujours en cliquant sur ce bouton, toutes les données présentes dans la feuille "EXPORT" à partir de la ligne 2 des colonnes B à O et ce, jusqu'à la dernière ligne ayant des données, soient copiées dans la feuille "Dossiers Clients" dans les colonnes B à O à partir de la première ligne n'ayant pas de données dans ces colonnes.
Salut, en me basant sur tes explications, voici ce que je te propose:
VB:
Sub creation_feuille()
Dim ws As Worksheet
Dim wsExport As Worksheet
Dim wsDC As Worksheet
Dim rngToCopy As Range
Dim rngDest As Range
' Définir la feuille EXPORT
Set wsExport = ThisWorkbook.Sheets("EXPORT")
' Vérifier si la feuille Dossiers Clients existe déjà
On Error Resume Next
Set ws = ThisWorkbook.Sheets("Dossiers Clients")
On Error GoTo 0
' Si la feuille n'existe pas, la créer
If ws Is Nothing Then
Set wsDC = ThisWorkbook.Sheets.Add(After:=wsExport)
wsDC.Name = "Dossiers Clients"
Else
Set wsDC = ws
End If
' Définir la plage à copier à partir de la feuille EXPORT
Set rngToCopy = wsExport.Range("B2:O" & wsExport.Cells(wsExport.Rows.Count, "B").End(xlUp).Row)
' Trouver la première ligne vide dans la feuille Dossiers Clients
Dim FirstEmptyRow As Long
FirstEmptyRow = wsDC.Cells(wsDC.Rows.Count, "B").End(xlUp).Row + 1
' Définir la plage de destination dans la feuille Dossiers Clients
Set rngDest = wsDC.Range("B" & FirstEmptyRow)
' Copier les données
rngToCopy.Copy rngDest
End Sub
Option Explicit
Function Feuille_Existe(Nom As String) As Boolean
Dim Sh As Object
For Each Sh In Sheets
If UCase(Sh.Name) = UCase(Nom) Then
Feuille_Existe = True
Exit For
End If
Next
End Function
Sub Creation_feuille()
Dim DerligSrc&, DerligDst&
With Worksheets("EXPORT")
DerligSrc = .Range("B" & Rows.Count).End(xlUp).Row
If Not Feuille_Existe("Dossiers Clients") Then
Sheets.Add(After:=Worksheets("EXPORT")).Name = "Dossiers Clients"
Worksheets("Dossiers Clients").Range("B2:O" & DerligSrc) = .Range("B2:O" & DerligSrc).Value
Else
DerligDst = Worksheets("Dossiers Clients").Range("B" & Rows.Count).End(xlUp).Row + 1
Worksheets("Dossiers Clients").Range("B" & DerligDst & ":O" & DerligDst + DerligSrc - 2) = .Range("B2:O" & DerligSrc).Value
End If
End With
End Sub
Salut, en me basant sur tes explications, voici ce que je te propose:
VB:
Sub creation_feuille()
Dim ws As Worksheet
Dim wsExport As Worksheet
Dim wsDC As Worksheet
Dim rngToCopy As Range
Dim rngDest As Range
' Définir la feuille EXPORT
Set wsExport = ThisWorkbook.Sheets("EXPORT")
' Vérifier si la feuille Dossiers Clients existe déjà
On Error Resume Next
Set ws = ThisWorkbook.Sheets("Dossiers Clients")
On Error GoTo 0
' Si la feuille n'existe pas, la créer
If ws Is Nothing Then
Set wsDC = ThisWorkbook.Sheets.Add(After:=wsExport)
wsDC.Name = "Dossiers Clients"
Else
Set wsDC = ws
End If
' Définir la plage à copier à partir de la feuille EXPORT
Set rngToCopy = wsExport.Range("B2:O" & wsExport.Cells(wsExport.Rows.Count, "B").End(xlUp).Row)
' Trouver la première ligne vide dans la feuille Dossiers Clients
Dim FirstEmptyRow As Long
FirstEmptyRow = wsDC.Cells(wsDC.Rows.Count, "B").End(xlUp).Row + 1
' Définir la plage de destination dans la feuille Dossiers Clients
Set rngDest = wsDC.Range("B" & FirstEmptyRow)
' Copier les données
rngToCopy.Copy rngDest
End Sub
la solution fonctionne mais du coup, mon bouton étant sur la feuille d'où l'on copie les données, le bouton est collé sur la feuille de destination. Peut-on faire un coller de type collage spécial "mise en forme des valeurs et des nombres" ?
la solution fonctionne mais du coup, mon bouton étant sur la feuille d'où l'on copie les données, le bouton est collé sur la feuille de destination. Peut-on faire un coller de type collage spécial "mise en forme des valeurs et des nombres" ?
Je ne comprends pas bien ce que tu veux, quand j'utilise la macro, la plage "B2:O" de "EXPORT" est recopiée vers "Dossiers Clients" avec les formats de cellule et de nombre.
@Phil69970 je comprends l'intérêt d'un fichier mais je ne peux pas mettre les données qui ne sont pas diffusables. J'avais pris le code de Franc avant que tu ne postes le tien mais je vais faire des essais comparatifs.
@Franc58 en fait j'ai le bouton cliquable qui exécute la macro sur la feuille "EXPORT" pour des questions de facilités, du coup ça me copie-colle le bouton sur la feuille de destination "Dossiers clients". Mais je vais creuser en partant sur vos deux propositions, ça va me faire comprendre certains fonctionnements.
Merci à tous les deux pour votre temps, et un bon dimanche à vous.
J'ai trouvé la solution à ma problématique, je le partage au cas où d'autres utilisateurs chercheraient.
Le bouton cliquable exécutant ma macro étant une image, pour ne pas qu'elle soit copiée par la macro lors de l'exécution de celle-ci, il suffit de modifier les paramètres de l'image (donc rien n'avoir avec le code de la macro). Il suffit donc de faire un clic droit sur l'image, puis "Taille et propriété" et de cocher dans le menu Propriétés l'option "ne pas déplacer ou dimensionner avec les cellules".