Code vba a modifier

kit2412

XLDnaute Nouveau
Bonjour à tous,

J'ai ce code vba :

Private TEST As Boolean
Private O1 As Object
Private PL As Range

Private Sub UserForm_Initialize()
Dim DL As Integer
Dim PLD As Range
Dim D As Object
Dim CEL As Range

Set O1 = Sheets("Commande-Controle")
DL = O1.Cells(Application.Rows.Count, 1).End(xlUp).Row
Set PLD = O1.Range("A3:A" & DL)
Set PL = O1.Range("D3:I" & DL)
Set D = CreateObject("Scripting.Dictionary")
For Each CEL In PLD
D(CEL.Value) = ""
Next CEL
Me.ComboBox1.List = D.keys
End Sub

Private Sub ComboBox1_Change()
Dim O2 As Object
Dim PLV As Range
Dim N As String

If TEST = True Then Exit Sub
TEST = True
Application.ScreenUpdating = False
Me.ComboBox1.Value = DateSerial(Year(Me.ComboBox1.Value), Month(Me.ComboBox1.Value), Day(Me.ComboBox1.Value))
N = Replace(Me.ComboBox1.Value, "/", "_")
On Error Resume Next
Set O2 = Sheets(N)
If Err = 0 Then MsgBox "Date déjà effectuée !": End
If Err <> 0 Then
Err.Clear
Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = N
Set O2 = ActiveSheet 'définit l'onglet O2
End If
On Error GoTo 0
O1.Range("D2:I2").Copy O2.Range("A1")
O1.ListObjects("RECAP").Range.AutoFilter Field:=1, Criteria1:=Me.ComboBox1.Value
Set PLV = PL.SpecialCells(xlCellTypeVisible)
PLV.Copy O2.Cells(Application.Rows.Count, 1).End(xlUp).Offset(1, 0)
O1.Range("A3").AutoFilter
Unload Me
O2.Select
Application.ScreenUpdating = True
End Sub


Il fonctionne bien, soit userform qui ouvre une liste déroulante dans laquelle, je choisis une date et les colonnes D à I sont copiées dans une nouvelle feuille qui est créée.

Mon problème est que j'ai des formules dans certaines colonnes et ce sont les formules qui sont copiées et non les valeurs


Merci de votre aide.:)
 

camarchepas

XLDnaute Barbatruc
Re : Code vba a modifier

Bonjour ,

Le rouge est qu'en, même à éviter ,

Et un petit fichier établit aurait été un plus .

Bon donc sans pouvoir tester , je pense qu'en ajoutant .value derriére les range , ça devrait le faire

Code:
Private TEST As Boolean
Private O1 As worksheet ' en utilisant le bon objet , l'aide dynamique est plus fournie ' Object
Private PL As Range

Private Sub UserForm_Initialize()
Dim DL As long ' Peut éviter des problème si plus de 32000 lignes plutot qu' Integer
Dim PLD As Range
Dim D As Object
Dim CEL As Range

Set O1 = Sheets("Commande-Controle")
DL = O1.Cells(Application.Rows.Count, 1).End(xlUp).Row
Set PLD = O1.Range("A3:A" & DL)
Set PL = O1.Range("D3:I" & DL)
Set D = CreateObject("Scripting.Dictionary")

'For Each CEL In PLD
D(CEL.Value) = ""
'Next CEL
D.clear
Me.ComboBox1.List = D.keys
End Sub

Private Sub ComboBox1_Change()
Dim O2 As Object
Dim PLV As Range
Dim N As String

If TEST = True Then Exit Sub
TEST = True
Application.ScreenUpdating = False
Me.ComboBox1.Value = DateSerial(Year(Me.ComboBox1.Value), Month(Me.ComboBox1.Value), Day(Me.ComboBox1.Value))
N = Replace(Me.ComboBox1.Value, "/", "_")
On Error Resume Next
Set O2 = Sheets(N)
If Err = 0 Then MsgBox "Date déjà effectuée !": End
If Err <> 0 Then
Err.Clear
Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = N
Set O2 = ActiveSheet 'définit l'onglet O2
End If
On Error GoTo 0
O1.Range("D2:I2").Copy O2.Range("A1").value
O1.ListObjects("RECAP").Range.AutoFilter Field:=1, Criteria1:=Me.ComboBox1.Value
Set PLV = PL.SpecialCells(xlCellTypeVisible)
PLV.Copy O2.Cells(Application.Rows.Count, 1).End(xlUp).Offset(1, 0).value
O1.Range("A3").AutoFilter
Unload Me
O2.Select
Application.ScreenUpdating = True
End Sub
 

kit2412

XLDnaute Nouveau
Re : Code vba a modifier

Bonjour le forum et Camarchepas,

Désolé pour le rouge mais c'était pour faire ressortir mon code du reste du texte.
J'ai essayé d'ajouter ".value" mais cela ne fonctionne pas.
Ci-joint mon fichier.
Il faut appuyer sur le bouton "Préparation étiquettes colis" sur la page démarrage pour que l'userform3 s'exécute et mon problème c'est qu'il copie les formules et non les valeurs.
Merci par avance de votre aide.:)
 

Paf

XLDnaute Barbatruc
Re : Code vba a modifier

Bonjour à tous

peut-être en utilisant le collage spécial

au lieu de
Code:
O1.Range("D2:I2").Copy O2.Range("A1")

mettre
Code:
O1.Range("D2:I2").Copy 
O2.Range("A1").PasteSpecial Paste:=xlPasteValues

si toutefois c'est bien la ligne de code en cause.

A+

Edit : correction faute de "frappe"
 
Dernière édition:

kit2412

XLDnaute Nouveau
Re : Code vba a modifier

Re-bonjour,

Effectivement il manquait la pièce jointe mais j'ai du la réduire.
Et voilà, merci.
 

Pièces jointes

  • Demande 14-10-2014.xlsm
    234.2 KB · Affichages: 29
  • Demande 14-10-2014.xlsm
    234.2 KB · Affichages: 34
  • Demande 14-10-2014.xlsm
    234.2 KB · Affichages: 30

Discussions similaires

Statistiques des forums

Discussions
312 201
Messages
2 086 171
Membres
103 152
dernier inscrit
Karibu