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

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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

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 !..
 
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
 
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
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
2
Affichages
842
Retour