Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
Je corrige mes pièces jointes... Elles me sont personnelles .. mais quand-même...
Je ne vous avais pas fréquenté depuis longtemps, je dois reprendre les bonnes pratiques...
En pièces jointes mon développement et mon cade
With Range("bo" & i)
If Range("bq" & i) <> "" Then
Range("bl" & i).Select
Selection.Copy
Range("ca" & i).Select
Selection.Copy
Range("cc" & i).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("bl" & i).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("bq" & i) = ""
Range("bo" & i) = ""
End If
End With
Et voici un bout de code que j'ai corrigé. Il faudra en faire de même pour le reste de ce code. Mais, je ne sais pas si tu veux faire ceci sur la même feuille oubien d'une feuille à une autre.
VB:
With Sheets("Stocks")
derlig = .Range("a" & Rows.Count).End(xlUp).Row
If .Range("bo" & derlig) <> "" Then
.Range("bl" & derlig).Copy
.Range("c9").PasteSpecial Paste:=xlPasteValues
Range("bo" & derlig).Copy
.Range("bl9").PasteSpecial Paste:=xlPasteValues
With .Range("bo" & derlig)
If .Range("bq" & derlig) <> "" Then
.Range("bl" & derlig).Copy
.Range("cc9").PasteSpecial Paste:=xlPasteValues
End If
End With
'LE RESTE DU CODE +
Application.CutCopyMode = 0
Application.Goto .Range("a1") 'pour enlever la sélection
End With
Et où il est ce code au juste? Il y a 20 modules dans ton classeur. Ensuite, je viens de voir ceci
Sheets(Array("Edition Ordonnance", "Stocks", "COMMANDE")).Select
Comment peux-tu sélectionner 3 feuilles en même temps??
Sheets("Edition Ordonnance").Activate
Tu met tout simplement
With Sheets("Edition Ordonnance") tu fait ceci
With Sheets("Stocks") tu fait celà
With Sheets("COMMANDE") tu fait autre chose
@Dicas
Tu es sur qu'il est judicieux diffuser tel quel ton fichier ?!?
1)
Sera enlevée par (ou pour) M. L***S Bernard - tél. 0* 2* 2* 96 03 ou 0* 1* 4* 61 *0
2) Signature originale scannée dans le fichier...
Bref quelques données confidentielles, non ?
A mettre en corrélation avec ceci peut-être ?
extrait de la charte
5 – La possibilité de joindre des fichiers est donnée sur ce forum.
Ne pas hésiter à utiliser cette fonction, tout en veillant que les données soient bidons et donc qu’aucune donnée confidentielle, nominative ne soit dans le fichier.
PS: Il est de coutume de jamais joindre une application en version originale.
(surtout si elle est issu du "monde du travail")
On privilégie le fichier (allégé/anonymisé/spécifiquement créé) pour illustrer la problématique rencontrée.
NB: Pour remplacer un fichier, il suffit de cliquer sur Editer (dans ton premier message) puis ensuite de suivre les instructions qui s'afficheront.
@Dicas
Tu es sur qu'il est judicieux diffuser tel quel ton fichier ?!?
1)
Sera enlevée par (ou pour) M. L***S Bernard - tél. 0* 2* 2* 96 03 ou 0* 1* 4* 61 *0
2) Signature originale scannée dans le fichier...
Bref quelques données confidentielles, non ?
A mettre en corrélation avec ceci peut-être ?
extrait de la charte
@Dicas
Voir je que j'ai ajouté dans l'édition de mon précédent message
Sinon pour ta question, si tu postes une copie anonymisée de ton fichier, veille à faire le ménage dans tes modules
(comme l'a remarqué Lone-Wolf, ils sont très nombreux)
Suggestion: Il y a beaucoup d’allègement possible dans tes codes VBA
(Suppression des Select et Activate etc... comme Lone-Wolf a commencé à le faire)
Premier exemple de simplification
(j'ai changé les références des cellules pour faire mes tests)
VB:
Sub Copie_BL_vers_CA_a()
' Copie_BL_vers_CA Macro
Range("A1").Copy
Range("C1").PasteSpecial Paste:=xlPasteValues
End Sub
Sub Copie_BL_vers_CA_b()
' Copie_BL_vers_CA Macro
Range("C1") = Range("A1")
End Sub
Sub Copie_BL_vers_CA_c()
' Copie_BL_vers_CA Macro
With Sheets(1)
.[C1] = .[A1]
End With
End Sub
Second exemple
VB:
Sub Mardipremierjour()
With Sheets("Stocks")
If .[D4] = 3 Then .[G11] = .[D2]
End With
End Sub
@Dicas
Tu as bien anonymisé ton fichier mais tu as laissé tes 20 modules
Ce qui fait qu'on ne sait pas dans quel module il faut regarder ni quel est le nom de la macro qui te pose problème.
EDITION; Désolé, je n'avais pas vu le fichier Word
Maintenant c'est plus clair
@Dicas
Je suis pas sur de comprendre ce que tu veux que ta macro Sub datation_cde_pharma() fasse ?
Personnellement, pour ce point*, je ferai comme cela
*:'identifie date à copier
VB:
Sub MacroTEST()
Dim Ligne As Long
Ligne = Cells(Rows.Count, "B").End(xlUp).Row
Range("B1:B" & Ligne).AutoFilter Field:=1, Criteria1:=xlFilterToday, Operator:=xlFilterDynamic
End Sub
La première étape est celle de l'enregistrement des date et N° de commande. Dans l'exemple donné , en appuyant sur le bouton "FIXER DATE" de la feuille"ENREGISTREMENT CDE" on obtient à l'enregistrement 14, la date du 29 avril 2018 et le N°14-43210.
L'objectif déclaré c'est d'enchainer sur la feuille "Stocks" sur chaque ligne qui porte une qté en colonne "BT", un calcul en "BP" tel que "BT"*"BU" pour confirmer la qté officiellement en commande et préparer ainsi les calculs ultérieurs de réception des livraisons. qui se feront en appuyant cette fois sur le bouton "Confirmation des entrées" de la feuille "Stocks".
Il s'git donc d'articuler ces deux actions sur deux feuilles distinctes.
@Dicas
NB: Masquer des feuilles, n'enlève pas les données pour autant...
Quitte à faire le ménage, autant les supprimer
Pour ta macro Fixer Date
Personnellement, je ferai comme cela
VB:
Sub datation_cde_pharma()
Dim Ligne As Long
Ligne = Cells(Rows.Count, "B").End(xlUp).Row + 1
With Cells(Ligne, 1)
.Value = Ligne
.Offset(, 1) = VBA.Date
.Offset(, 2) = Ligne & "-" & VBA.CLng(VBA.Date)
End With
End Sub
Ou en version plus courte
VB:
Sub VersionCourte()
Dim Ligne As Long
Ligne = Cells(Rows.Count, "B").End(xlUp).Row + 1
Cells(Ligne, 1).Resize(, 3) = Array(Ligne, VBA.Date, Ligne & "-" & VBA.CLng(VBA.Date))
End Sub
Sub VersionCourte() Dim Ligne AsLong
Ligne = Cells(Rows.Count, "B").End(xlUp).Row + 1
Cells(Ligne, 1).Resize(, 3) = Array(Ligne, VBA.Date, Ligne & "-" & VBA.CLng(VBA.Date)) EndSub
OUI !! c'est en effet plus direct !! merci !
toutefois, ceci fait, il reste que la seconde phase de calcul sur feuille "Stocks" n'est pas engagée !!!
Il est impératif que ce calcul clôture ce code, c'est sa raison d'être.
Ce site utilise des cookies pour personnaliser le contenu, adapter votre expérience et vous garder connecté si vous vous enregistrez.
En continuant à utiliser ce site, vous consentez à notre utilisation de cookies.