Feuil de commande

  • Initiateur de la discussion pias
  • Date de début
P

pias

Guest
Bonjour, le forum

Je souhaite faire une macro pour appliquer dans une feuille de commandes.
Après plusieurs tentatives je n’y arrive pas, il y a toujours quelque chose que ne vas pas !

Alors je demande l’aide du forum et pour une meilleure compréhension j’envoie un fichier joint avec tous les détails.

Merci d’avance et bon dimanche a tous.
Amicalement

...On se lasse de tout sauf d’apprendre !..
 

Pièces jointes

  • feuildecommande.zip
    13 KB · Affichages: 12
M

myDearFriend

Guest
Bonjour Pias, le Forum

Tu trouveras ci-joint une possibilité pour ta feuille de commandes.

Cordialement.
Didier
 

Pièces jointes

  • PourPias.zip
    16.5 KB · Affichages: 11
  • PourPias.zip
    16.5 KB · Affichages: 14
  • PourPias.zip
    16.5 KB · Affichages: 11
L

Lord Nelson

Guest
Salut Pias,

Ta procédure pourrait ressembler à ceci :

Private Sub CommandButton1_Click()
Dim Ligne As Integer
Dim CL As Range
'Recherche de la première ligne vide :
Ligne = Worksheets("commandes").Range("A65536").End(xlUp).Row + 1
'Recherche des quantités commandées :
For Each CL In Range("B9:B28")
If CL.Value > 0 Then
'Passage des données à la feuille Commandes :
Worksheets("commandes").Range("A" & CStr(Ligne)) = CL.Offset(0, -1)
Worksheets("commandes").Range("B" & CStr(Ligne)) = Range("B1")
Worksheets("commandes").Range("C" & CStr(Ligne)) = Range("B3")
Worksheets("commandes").Range("D" & CStr(Ligne)) = Range("B5")
Worksheets("commandes").Range("D" & CStr(Ligne)).NumberFormat = Range("B5").NumberFormat
Worksheets("commandes").Range("E" & CStr(Ligne)) = CL
CL.Value = ""
'Passage à la ligne suivante :
Ligne = Ligne + 1
End If
Next
'Effacement des données
Range("B1").Value = ""
Range("B3").Value = ""
End Sub

A+
LN
 

Pièces jointes

  • feuildecommande2.zip
    15.2 KB · Affichages: 12
P

pias

Guest
Rebonjour Didier, Lord Nelson et le forum

Les deux solutions fonctionnent parfaitement.
Merci infiniment a vous deux.
Bonne soirée a tous.

Amicalement

...On se lasse de tout sauf d’apprendre !..
 
I

Inspecteur_Des_Travaux_Finis

Guest
Bonsoir Pias, MDF, LN, le Forum,

Oui tu as de la chance Pias, deux Excellentes solutions de deux Excellents Contributeurs de ce Forum et bravo à vous deux...

Mais en tant qu'Inspecteur des Travaux Finis (lol) voici mes commentaires :

Pour Mon Cher Ami et pour Mon Amiral !! Aucun des deux n'a mis un test pour vérifier si un Client, une Ref et une Date était présente avant de lancer le report !!!
Style un petit truc comme ceci en début de procédure :
Dim Cell As Range
For Each Cell In Application.Union(Range("B1"), Range("B3"), Range("B5"))
If Cell = "" Then Exit Sub
Next

Pour Mon Cher Ami, VoumFré 100 Lignes !!!
Dim C As Integer alors que C sert à : For C = 1 To 5 !
Dim DebDetailCom As Long alors qu'il sert à : DebDetailCom = 9 !
(Pour l'autre Long je dis rien mais la tableau actuel fait 20 lignes)

Pour Mon Amiral, VoumFré 100 Lignes (plus vite comme ceci d'ailleurs :)
With Worksheets("commandes")
.Range("A" & CStr(Ligne)) = CL.Offset(0, -1)
.Range("B" & CStr(Ligne)) = Range("B1")
.Range("C" & CStr(Ligne)) = Range("B3")
.Range("D" & CStr(Ligne)) = Range("B5")
.Range("D" & CStr(Ligne)).NumberFormat = Range("B5").NumberFormat
.Range("E" & CStr(Ligne)) = CL
CL.Value = ""
Ligne = Ligne + 1
End With

Mais bon ce n'est pas grand chose, mais c'est pour faire avancer le chimilimilishclimblick !!!

Bonne Soirée
@+Thierry
 
@

@+Thierry

Guest
Re Bonsoir à tous

Très belle boucle Didier !

Private Sub btnGo_Click()
Dim i As Byte
Dim T As Double
For i = 1 To 100
Cells(i, 1).Value = "C'est promis, je ne le ferai plus, Thierry !"
T = Timer + 0.2
Do
Loop While Timer < T
If i Mod 20 = 0 Then
If MsgBox("C'est bon maintenant..., je continue ?", vbYesNo, "myDearFriend !") = vbNo Then Exit Sub
End If
Next i
End Sub

Surtout ce If dans la boucle qui permet une interruption toutes les fois où i est divisable par 20...
If i Mod 20 = 0 Then
If MsgBox("C'est bon maintenant..., je continue ?", vbYesNo, "myDearFriend !") = vbNo Then Exit Sub
End If

Moi aussi j'apprends plein de trucs grâce à vous.
Bonne Nuit et merci
@+Thierry
 
L

Lord Nelson

Guest
With C'est promis
. je n'oublierai plus le With.... End With
. je n'oublierai plus le With.... End With
. je n'oublierai plus le With.... End With
. je n'oublierai plus le With.... End With
...
End With

Juste un petit grain de sel au sujet de Timer :
Ce compteur revient à 0 à minuit, donc, si la procédure est lancée à 23 h 59' 59,99, Timer ne sera jamais supérieur à T !
Cela m'est arrivé et j'avais l'impression d'être planté.
La solution est de retenir la valeur de départ de Timer :
Dim T as Single
T = Timer
Do
If Timer < T Then Exit Do
Loop While Timer < T + 0.2

Excellente nuit à tous.
LN
 

Discussions similaires

Réponses
8
Affichages
330
Réponses
3
Affichages
431
Réponses
21
Affichages
1 K
Réponses
2
Affichages
582

Statistiques des forums

Discussions
312 392
Messages
2 087 992
Membres
103 691
dernier inscrit
christophe89