Résolu Faire correspondre les codes barres aux colonnes du stock

Mickoik

Habitué
Bonjour à tous,
je vous explique mon problème :
j'ai une feuille qui s'appelle code barres et une autre qui s'appelle entrée de stock.
j'ai créé un menu déroulant dans la feuille entrée de stock ou je sélectionne mon produit.
Ensuite, je rentre en colonne u par un les nouveaux codes barres associés à ce produit (le but si ça marche, c'est de la faire avec une douchette)
ce que je voudrait, c'est reporter les codes barres en question dans la feuille code barres ou sont rangée en colonne la liste de mes produits avec en dessous les codes barres correspondants.
J'ai essayé de faire une macro comme celle la, mais ça ne marche pas.
Si quelqu'un peut m'aider ...
Code:
Sub Copier_Coller()
 
 Dim BD As Worksheet
 Dim Q As Worksheet
 Dim i As String
 
 Dim n As String
 
 Dim j As Long
 Dim f As Long
 
 
 Set BD = Worksheets("entrée stock")
 Set Q = Worksheets("code barres")
 
 
For i = 1 To 4
    For n = 1 To 4
        If BD.Range(e11) = Q.Cells(n, 1).Value Then
            For j = 2 To 6
                Q.Cells(n, j).Copy Destination:=Q.Cells(i, j + 4)
            Next
        End If
    Next
Next
 
 End Sub
merci à tous pour votre aide.

edit modo: merci d'utiliser les balises code
 

drul

Obscur pro du hardware
Staff
Salut,
pas mal d'erreur:
notamment i et n déclaré en string mais utilisé en int !
et : "BD.Range(e11) = Q.Cells(n, 1).Value" tu compares une "range" à une "value", c'est loin d'être recommandé (même si le VB est assez permissif dans le domaine.
Vérifie l'ordre de tes boucles, trois boucles imbriqués c'est assez casse-gueule, sûr d'en avoir besoin ?
Essaie d'être plus clair dans ce que tu veux faire, j'ai pas bien compris.
 

Mickoik

Habitué


En fait le résultat que je voudrait obtenir est assez simple mais je ne sais pas le faire.
Dans la feuille "entrée stock", à la case "E11", j'indique la référence de modèle. Je voudrais que les chiffres entrés dans la colonne "F" de la feuille "entrée stock" se reportent automatiquement dans la feuille "code barres" dans la colonne qui correspond au nom indiqué en "E11"
 

drul

Obscur pro du hardware
Staff
Tu porrais mettre un print screen de tes 2 feuillent (attention s'il y a des données confidentielles) ?
 

Mickoik

Habitué


Vous devez être connecté pour voir les images.
 

Mickoik

Habitué
dans la feuille à gauche c'est là où les données saisies dans la feuille à droite se chargent
 

drul

Obscur pro du hardware
Staff
Ok, maintenant je vois ce qu'il faut faire, mais ce n'est pas moi qui vais le faire !
Explique, en français, comment tu décomposerais le problème. (parce que je vois vraiment pas comment tu as pu en arrivé à faire trois boucle imbriqué ... 2 oui, mais 3 ???). en suite on essayera ensemble de retranscrire proprement en VBA.
 

Mickoik

Habitué
En fait il faut dans un premier temps qu'il copie, dans la feuille "entrée stock" la plage de cellules où il y a des codes barres.
Ensuite, il identifie ce qu'il y a d'inscrit dans la cellule E11. Il va dans la feuille code barre et il trouve la colonne où la première ligne a la même valeur que E11. Il colle ce qu'il a copié en dessous de la dernière ligne remplie.

Je ne sais pas si c'est ce que tu as demandé quand tu m'as dit de retranscrire en français mais c'est ce que j'ai compris.
 

drul

Obscur pro du hardware
Staff
OK,
1) copie de la plage source
2) Identification de la valeur de comparaison
3) détermination de la colonne
4) Coller valeur de 1

ça me semble parfait.

Alors codons !
Commençons par 1.
Sais-tu comment définir le nombre de ligne à copier ? sinon je t'invite à lire ceci:

Ensuite complète le code suivant:
Code:
Dim BD As Worksheet
Dim Q As Worksheet
Dim TempRange As Range
Dim derniereLigne as long

Set BD = Worksheets("entrée stock")
Set Q = Worksheets("code barres")

derniereLigne = BD.Range( ' Complète ici avec l'aide de la fonction end pour trouver la dernière ligne à copier 
Set TempRange = BD.Range(BD.range("F11"),  'Complète ici à l'aide de derniereligne
 

Mickoik

Habitué
Alors si je comprends bien :

sub drul ()

Dim BD As Worksheet
Dim Q As Worksheet
Dim TempRange As Range
Dim derniereLigne as long

Set BD = Worksheets("entrée stock")
Set Q = Worksheets("code barres")

derniereLigne = BD.Range(Worksheets("entrée stock").Range("f11", Range("f11").End(xlToRight))
Set TempRange = derniereLigne


 

Mickoik

Habitué
sub drul ()

Dim BD As Worksheet
Dim Q As Worksheet
Dim TempRange As Range
Dim derniereLigne as long

Set BD = Worksheets("entrée stock")
Set Q = Worksheets("code barres")

derniereLigne = BD.Range(Worksheets("entrée stock").Range("f11", Range("f11").End(xlToRight))
Set TempRange = derniereLigne.copy
 

Mickoik

Habitué
Dim BD As Worksheet
Dim Q As Worksheet
Dim TempRange As Range
Dim derniereLigne as long

Set BD = Worksheets("entrée stock")
Set Q = Worksheets("code barres")

derniereLigne = BD.Range(Worksheets("entrée stock").Range("f11", Range("f11").End(xlToRight))
Set TempRange = BD.Range(BD.range("F11"),derniereLigne).copy
 

drul

Obscur pro du hardware
Staff
Une fois ça suffit ;)
C'est un bon début, mais tu es sur de vouloir chercher le dernière cellule de droite ?
Quelques erreurs syntaxique aussi, je te corrige tout ça demain ;)
 

Mickoik

Habitué

Merci pour tout t'es une bombe !
 

drul

Obscur pro du hardware
Staff
Ok donc le résultat attendu était:
Code:
Sub drul()

Dim BD As Worksheet
Dim Q As Worksheet
Dim TempRange As Range
Dim derniereLigne As Long

Set BD = Worksheets("entrée stock")
Set Q = Worksheets("code barres")

derniereLigne = BD.Cells(BD.Rows.Count, "F").End(xlUp).Row
Set TempRange = BD.Range(Cells(11, "F"), Cells(derniereLigne, "F"))

End Sub


On regarde depuis la dernière ligne du classeur quel est le numéro de ligne le plus grand non vide (on fait depuis le bas car s'il y a une ligne vide au milieu des données, on ne perd aucune information)
Ensuite on définit la range à copier à l'aide des 2 cellules en bord.

Le point 2), je pense que va y arriver tout seul ;)
Le point 3 est très similaire au point 1 essaie de le faire toi même (en uitlisant end avec XlToRight ou XlToLeft à toi de voir)
 

Mickoik

Habitué
Merci beaucoup.

Est-ce que si je fais ça dans la suite ça va marcher ?

Sub drul()

Dim BD As Worksheet
Dim Q As Worksheet
Dim TempRange As Range
Dim derniereLigne As Long

Set BD = Worksheets("entrée stock")
Set Q = Worksheets("code barres")

derniereLigne = BD.Cells(BD.Rows.Count, "F").End(xlUp).Row
Set TempRange = BD.Range(Cells(11, "F"), Cells(derniereLigne, "F"))

TempRange.copy

If Q.Range(A2).Value = BD.Range(E11)
Then TempRange.past


End Sub

???
 

drul

Obscur pro du hardware
Staff
Compare toujours des variables de même type:

If Q.Range("A2").Value = BD.Range(E11).Value (attention au "")

Ensuite il faut comparer E11 avec chacune des têtes de colonnes, pas seulement avec A2
Et finalement la synthaxe à utiliser pour copy est:
Code:
maSource.copy destination:= maDestination 'N.B. "destination:=" est optionnel , pas besoin de l'écrire, VB comprendra quand même
il faut toujours utiliser cette syntaxe afin d'éviter de passer par le presse papier.

Donc essaies encore !
 

Mickoik

Habitué
je ne sais pas comparer avec toute les tetes des colonnes.
J'ai essayé ça :



Sub drul()

Dim BD As Worksheet
Dim Q As Worksheet
Dim TempRange As Range
Dim derniereLigne As Long
Dim Plage as Range
Dim colonneDestination As Columns
Dim maDestination As Range


Set BD = Worksheets("entrée stock")
Set Q = Worksheets("code barres")
Set Plage = Q.Range("A2:V2")


derniereLigne = BD.Cells(BD.Rows.Count, "F").End(xlUp).Row
Set TempRange = BD.Range(Cells(11, "F"), Cells(derniereLigne, "F"))

TempRange.select

If Plage.Value = BD.Range("E11").Value
Then TempRange.past


End Sub
 

drul

Obscur pro du hardware
Staff
Meilleure réponse
Non ça ne marchera pas, la il faut impérativement une boucle ...
p. ex:
Code:
Sub drul()

Dim BD As Worksheet
Dim Q As Worksheet
Dim TempRange As Range
Dim Cellule As Range
Dim derniereLigne As Long
Dim Plage As Range


Set BD = Worksheets("entrée stock")
Set Q = Worksheets("code barres")
Set Plage = Q.Range("A2:V2")


derniereLigne = BD.Cells(BD.Rows.Count, "F").End(xlUp).Row
Set TempRange = BD.Range(Cells(11, "F"), Cells(derniereLigne, "F"))

For Each maCellule In Plage
    If maCellule.Value = BD.Range("E11").Value Then
        TempRange.Copy Destination:=maCellule.Offset(1, 0)
    End If
Next

End Sub
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 128
Messages
6 717 845
Membres
1 586 373
Dernier membre
https://forum.tomshardwar
Partager cette page
Haut