XL 2013 Boucle VBA pour faire un bon de commande

Maellou47

XLDnaute Nouveau
Bonjour

j'ai besoin de votre aide pour faire un boucle,

J'aimerai qu'elle regarde si la cellule n'est pas vide.
si la cellule ne l'est pas, elle copie le texte de la cellule dans une autre cellule d'une autre feuille, puis passe sur la cellule d'en dessous et si cette deuxième cellule n'est pas vide elle copie le texte de cette deuxième cellule dans la cellule en dessous de l'autre cellule de l'autre feuille...ect (sachant que les cellule à copier se trouve de A16 à A33 et se trouve sur la feuille 6 et la copie doit se faire sur la feuille 8).

Sinon si elle est vide,
Rien ne se copie

Merci de bien vouloir m'aider =)
 
Dernière modification par un modérateur:

CPk

XLDnaute Impliqué
Re : Boucle VBA

Bonjour, pour commencer..

Code:
Sub bidouillage()
    Dim a As Range, plage As Range
    Set plage = Sheets("feuil6").Range("A16:A33")

    For Each a In plage
        If Not IsEmpty(a) Then
            Sheets("feuil8").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) = a
        End If
    Next
set plage = Nothing
End Sub
 

raven

XLDnaute Nouveau
Re : Boucle VBA

Bonjour a tous.j'avais un problème depuis 2 semaines je suis bloquée concernant les boucles de tableaux dynamiques. J'ai rempli mes 2 tableaux M1 et M2 et je veux faire le produit matriciel. Cependant il ya errreurrrrrrr et on m'écrit IMPossible de lire la propriété MMult de la classe Worksheet function.Svp
le code est le suivant
Option Base 0
Dim c, r, i, k, l, m As Long
Dim M1(), M2(), M3() As Double

c = Range("F" & Rows.Count).End(xlUp).Row - 2

ReDim M2(3, c)
ReDim M1(c, 3)
ReDim M3(3, 3)
For i = 0 To UBound(M1) - 1
For k = 0 To 2
M1(i, k) = Cells(2 + i, 5 + k).Value
Next
Next

For l = 0 To 2
For m = 0 To UBound(M2, 2) - 1
M2(l, m) = Cells(4 + l, 9 + m).Value
Next
Next

M3 = Application.WorksheetFunction.MMult(M2, M1)
 

raven

XLDnaute Nouveau
Re : Boucle VBA

Bonjour a tous.j'avais un problème depuis 2 semaines je suis bloquée concernant les boucles de tableaux dynamiques. J'ai rempli mes 2 tableaux M1 et M2 et je veux faire le produit matriciel. Cependant il ya errreurrrrrrr et on m'écrit IMPossible de lire la propriété MMult de la classe Worksheet function.Svp
le code est le suivant
Option Base 0
Dim c, r, i, k, l, m As Long
Dim M1(), M2(), M3() As Double

c = Range("F" & Rows.Count).End(xlUp).Row - 2

ReDim M2(3, c)
ReDim M1(c, 3)
ReDim M3(3, 3)
For i = 0 To UBound(M1) - 1
For k = 0 To 2
M1(i, k) = Cells(2 + i, 5 + k).Value
Next
Next

For l = 0 To 2
For m = 0 To UBound(M2, 2) - 1
M2(l, m) = Cells(4 + l, 9 + m).Value
Next
Next

M3 = Application.WorksheetFunction.MMult(M2, M1)
 

ROGER2327

XLDnaute Barbatruc
Re : Boucle VBA

Bonsoir raven.


Gaffe aux déclarations de type et aux indices !
Essayez :​
Code:
Dim c As Long, i As Long, k As Long, l As Long, m As Long
Dim M1() As Double, M2() As Double, M3() As Variant

  c = Range("F" & Rows.Count).End(xlUp).Row - 2

ReDim M2(2, c)
ReDim M1(c, 2)
ReDim M3(2, 2)

  For i = 0 To UBound(M1): For k = 0 To 2
    M1(i, k) = Cells(2 + i, 5 + k).Value
  Next k, i

  For l = 0 To 2: For m = 0 To UBound(M2, 2)
    M2(l, m) = Cells(4 + l, 9 + m).Value
  Next m, l

  M3 = Application.WorksheetFunction.MMult(M2, M1)
Mais est-il nécessaire de se compliquer la vie avec des boucles ?
Essayez cela :​
Code:
Dim c&
Dim M1(), M2()
ReDim M3(1 To 3, 1 To 3)
  With [E2].Cells
    c = Cells(Rows.Count, .Column + 1).End(xlUp).Row - .Row + 1
    If c > 0 Then
      M1 = .Resize(c, 3).Value
      M2 = [I4].Resize(3, c).Value
      M3 = Application.WorksheetFunction.MMult(M2, M1)
    End If
  End With
ou, en condensant :​
Code:
Dim c&
ReDim M3(1 To 3, 1 To 3)
  With [E2].Cells
    c = Cells(Rows.Count, .Column + 1).End(xlUp).Row - .Row + 1
    If c > 0 Then M3 = Application.WorksheetFunction.MMult([I4].Resize(3, c).Value, .Resize(c, 3).Value)
  End With


Bonne nuit.


ℝOGER2327
#8219


Samedi 7 Pédale 143 (Saint Gavroche, forain - fête Suprême Quarte)
11 Ventôse An CCXXIV, 9,9524h - narcisse
2016-W09-2T23:53:09Z
 

Maellou47

XLDnaute Nouveau
Re : Boucle VBA

Bonjour, Merci beaucoup pour votre réponse! ça marche très bien!
Maintenant, J'aimerai insérer à cette boucle une autre donnée en cellule B14 qui se copierait automatiquement dans la première colonne juste avant les autres valeurs déjà copiées. Le VBA que vous m'avez donné est utilisée pour des produits d'une commande et je voudrai que devant ces produits se mettent le numéro de commande qui correspond (il se trouve en B14 en feuille "bon de commande"=feuil6) et on veut le mettre sur la feuille "Gestion " en 1r colonne. Voici ce qu'on a déja fait:

Sub Copieproduit()
Dim a As Range, plage As Range
Set plage = Sheets("Bon de commande").Range("A16:A33")

For Each a In plage
If Not IsEmpty(a) Then
Sheets("Gestion ").Cells(Rows.Count, 2).End(xlUp).Offset(1, 0) = a
End If
Next
Set plage = Nothing
End Sub

Sub Copienumcom()
Dim a As Range, plage As Range
Set plage = Sheets("Bon de commande").Range("B14")

For Each a In plage
If Not IsEmpty(a) Then
Sheets("Gestion ").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) = a
End If
Next
Set plage = Nothing
End Sub

Notre problème est que les deux VBA ne marche pas en même temps et que les numéros de commande se décalent et restent uniquement devant les produits qui lui sont associés.
J'espère que vous pourrez m'aider....
 

Maellou47

XLDnaute Nouveau
Re : Boucle VBA

Bonjour, oui pas de soucis voici le fichier.
Je vous explique mon problème au complet; j'ai un bon de commande et j'ai créé un bouton "archiver" qui me permet de copier la date, le fournisseur, le demandeur,...etc. de ce bon de commande dans un tableau sur une autre feuille (historique de commande). Mais mon soucis c'est que dans mon tableau d'archivage il manque les produits ainsi que leur quantité. Et je n'arrive pas à trouver une macro qui copie tous les produits et leur quantité (avec un produit qui se copie dans une ligne et la quantité dans la case de droite) ainsi que toutes les infos précédentes (date, fournisseur...). Je vous joint une capture d'écran de ce qu'il faudrait que j'obtienne (dans la forme) quand je clic sur archivage.
Help me!!!!
Merci d'avance pour toutes vos réponses!!
 

Pièces jointes

  • commande 2.xlsm
    286.8 KB · Affichages: 59
  • commande 2.xlsm
    286.8 KB · Affichages: 70
  • Capture d’écran (55).jpg
    Capture d’écran (55).jpg
    59.5 KB · Affichages: 66

CPk

XLDnaute Impliqué
Re : Boucle VBA

Faites moi s'il vous plait une petite feuille excel (comme sur la photo jointe à se message) la liste des champs à importer et leur emplacement dans la feuille de commande (ex le N° de commande est en B14)
 

Pièces jointes

  • Sans titre.jpg
    Sans titre.jpg
    18.8 KB · Affichages: 51
  • Sans titre.jpg
    Sans titre.jpg
    18.8 KB · Affichages: 51

CPk

XLDnaute Impliqué
Re : Boucle VBA

Bonjour, voici une proposition. J'ai modifié un peu la feuille "historique des commandes" pour rajouter un champs (la référence) (histoire que les infos soient complètes) et j'ai défusionné certaines cellules car en programmation, c'est vecteurs de problème.

Un clic sur la forme bleu pour lancer la macro
 

Pièces jointes

  • commande 2.xlsm
    273 KB · Affichages: 66
  • commande 2.xlsm
    273 KB · Affichages: 72

Maellou47

XLDnaute Nouveau
Re : Boucle VBA

Merci beaucoup c'est génial!!!! =D
Mais il manque la quantité de chaque produit dans le tableau "historique de commande", comment je fais pour l'ajouter?
Merciii encore mille fois!!!!!
 

Pièces jointes

  • 357797d1457005293-boucle-vba-commande-2.xlsm
    266.2 KB · Affichages: 92

CPk

XLDnaute Impliqué
Re : Boucle VBA

j'ai corrigé le code et rétabli le calcul du % qui ne fonctionnait plus (en colonne n)

Code:
Sub transfert()
    Dim f As Worksheet, dlhc&
    Set f = Feuil6

    With f
        For Z = 16 To 33
            dlhc = Feuil8.Cells(Rows.Count, 1).End(xlUp).Row + 1
            If .Cells(Z, 1) <> "" Then
                a = Array(.[B14].Value, CLng(.[F3]), .[A8].Value, .[F7].Value, .[F6].Value, .[A5].Value, .[G36].Value, .[G35].Value, .Cells(Z, 1), .Cells(Z, 6), .Cells(Z, 5) + 0)
                For y = 1 To 11
                    Feuil8.Cells(dlhc, y) = a(y - 1)
                Next y
                Feuil8.Cells(dlhc, 14) = Feuil8.Cells(dlhc, 8) / Feuil8.Cells(dlhc, 7)
            End If
        Next Z
    End With
End Sub
 
Dernière modification par un modérateur:

Discussions similaires

Réponses
0
Affichages
153

Membres actuellement en ligne

Statistiques des forums

Discussions
312 229
Messages
2 086 425
Membres
103 206
dernier inscrit
diambote