XL 2013 boucles successives

Dicas

XLDnaute Junior
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
 

Pièces jointes

  • pour teste.zip
    1.5 MB · Affichages: 21
  • Sub datation.zip
    9 KB · Affichages: 15
Dernière édition:

Lone-wolf

XLDnaute Barbatruc
Bonjour Dicas

Moi je ne comprend pas ceci, pour commencer

VB:
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? :rolleyes: 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?? :eek:
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

Pour copier une plage définie, un exemple

Range("a2:a102").Copy
Range("l2").PasteSpecial Paste:=xlPasteValues

Pour copier une plage dans une feuille sans mise en forme
Range("a2:a102").Copy Range("l2")

D'une feuille à une autre
Sheets("COMMANDE").Range("a2:a102").Copy Sheets("Stocks") .Range("l2")
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonjour le fil, le forum, Lone-Wolf

@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.
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

@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)
 

Staple1600

XLDnaute Barbatruc
Re

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

EDITION: Bonjour job75
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

@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 ;)
 

Staple1600

XLDnaute Barbatruc
Re

@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

Mais ensuite tu veux faire quoi?
 

Dicas

XLDnaute Junior
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.
 

Staple1600

XLDnaute Barbatruc
Re,

@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
 

Dicas

XLDnaute Junior
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
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.
 

Discussions similaires

  • Question
Power Query Power Query
Réponses
14
Affichages
764

Statistiques des forums

Discussions
312 474
Messages
2 088 725
Membres
103 935
dernier inscrit
GGV