VBA ne pas dépasser ligne X, renvoi auto 3 colonnes plus loin

Bonsoir les excelleurs,

Étant jeune Padawan en VBA je m’en remet à nouveau à votre expertise et votre bonne volonté.

Je suis en train de concevoir grâce à Excel un bon de commande de matériel de ski. En sachant que certains matériels ne se commandent jamais tout seuls( des skis nécessitent des chaussures et des bâtons, etc):

J’ai une macro qui en fonction de deux cellules d’une même rangée (nom/prénom et matériel) auto remplie les lignes du dessous en réécrivant nom/prénom et accessoires(autant de ligne que de matériels associés).

J’ai également une formule En « C » qui en fonction du nom/prénom et du matériel va piocher dans le premier onglet de data le numéro de l’objet.

Mon problème :

Mon vrai tableau(celui là étant une version allégée) ne permet pas de dépasser la rangée 15. Il faut donc que les données renseignées par la macro basculent toutes seules de (‘´A15:B15’’) a (‘´E2:F2’’)

Voilà j’espère être clair dans ma demande et je vous ci joint le Excel avec la macro, ainsi qu’un screen des plages qui devraient être remplies in fine par la macro ou manuellement

Pour ceux qui veulent plus d’infos voici le post initial qui m’a permis de créer ma macro finale(pas tout seul bien sûr...)

https://forum.excel-pratique.com/viewtopic.php?p=835657#p835657

a17fa3c0 325c 474b af31 92e6729b1030

Bonsoir paul, bonsoir le forum,

Mon problème :

Mon vrai tableau(celui là étant une version allégée) ne permet pas de dépasser la rangée 15. Il faut donc que les données renseignées par la macro basculent toutes seules de (‘´A15:B15’’) a (‘´E2:F2’’)

Pourquoi tous ce laïus pour finalement ne même pas nous fournir la macro ?!...

Y'a des fois, j'm'demande (Coluche)

Eh bien je trouvais ça plus simple d’aller la regarder dans son milieu... mais je peux la copier coller, ça je sais faire

Private Sub worksheet_change(ByVal target As Range)

If target.Column = 2 Then

Ligne = target.Row

LigneSup = 0

If IsEmpty(Cells(target.Row + 1, target.Column)) = True Then

If target.Value = "SKI" Then

Set NomDansAttribution = Worksheets("ATTRIBUTION").Range("B1:B500").Find(Cells(target.Row, target.Column - 1).Value, LookIn:=xlValues)

If NomDansAttribution Is Nothing Then

Exit Sub

Else

For AccessoireSki = 1 To 3

If IsEmpty(Sheets("ATTRIBUTION").Cells(NomDansAttribution.Row, NomDansAttribution.Column + 1 + AccessoireSki)) = False Then

Accessoire = Sheets("ATTRIBUTION").Cells(1, NomDansAttribution.Column + 1 + AccessoireSki).Value

LigneSup = LigneSup + 1

Application.EnableEvents = False

Sheets("BON DE PREPARATION").Cells(target.Row + LigneSup, 1).Value = NomDansAttribution.Value

Sheets("BON DE PREPARATION").Cells(target.Row + LigneSup, 2).Value = Accessoire

Application.EnableEvents = True

End If

Next

End If

End If

If target.Value = "RAQUETTES" Then

Set NomDansAttribution = Worksheets("ATTRIBUTION").Range("B1:B500").Find(Cells(target.Row, target.Column - 1).Value, LookIn:=xlValues)

If NomDansAttribution Is Nothing Then

Exit Sub

Else

For AccessoireRaquettes = 1 To 2

If IsEmpty(Sheets("ATTRIBUTION").Cells(NomDansAttribution.Row, NomDansAttribution.Column + 6 + AccessoireRaquettes)) = False Then

Accessoire = Sheets("ATTRIBUTION").Cells(1, NomDansAttribution.Column + 6 + AccessoireRaquettes).Value

LigneSup = LigneSup + 1

Application.EnableEvents = False

Sheets("BON DE PREPARATION").Cells(target.Row + LigneSup, 1).Value = NomDansAttribution.Value

Sheets("BON DE PREPARATION").Cells(target.Row + LigneSup, 2).Value = Accessoire

Application.EnableEvents = True

End If

Next

End If

End If

End If

End If

If Err <> 0 Then Application.EnableEvents = True

End Sub

Sub test()

Application.EnableEvents = True

End Sub

Bonjour,

Peux-tu nous expliquer la structure des données dans la feuille Attribution ?

Pourquoi avons nous des en-têtes identiques ?

Exemple : Bâton zag…

Cdlt.

Re,

Ce code ne correspond pas du tout avec la configuration du fichier .xlsx que tu proposes ?!... Tu nous montres une capture où il y a Nom / Prénom / Objet / Nº et ton fichier se compose de Objet / Nom / Prénom / Nº?!...

J'aurais presque envie de dire : c'est quoi ce bo***l ?!...

C'eut été tellement plus simple de fournir le filchier .xlsm directement ! Non ?

Ah oui effectivement... vraiment désolé! Je me suis trompé j’ai fourni le fichier Excel avant la macro(et avant la macro les noms prénoms n’étaient pas concatenés...)

N’hésitez pas à aller voir le topic que j’ai mis en lien, vous y trouverez les éléments qui vous manquent potentiellement. Mais sinon je suis disponible, hésitez pas à me demander.

Pour répondre à Jean-eric,

En fait dans attribution j’ai du matériel qui est attribué à certains clients. C’est à dire que lorsqu’ils voudront des skis ils auront toujours les mêmes. Ensuite chaque catégorie de matériel est indissociable des accessoires. Donc si monsieur X a des ski, il a forcément des bâtons et des chaussures. Sauf qu’il existe plusieurs marques de bâtons et j’ai besoins’ que chaque marque soit dissociée. Et il y a plusieurs colonnes « bâtons zag » car monsieur X peut avoir bâtons zag avec ses ski, mais aussi une paire de bâtons rossignol pour sa paire de raquettes. Et j’ai besoin de savoir quels bâtons sont associés à quel matériels.

J’espère avoir été plus clair.

Merci en tout cas de votre interet

Alors vous avez des idées? J’envisageais pour contourner mon problème de faire la macro suivante(désolé je la en langage courant car je maîtrise pas encore assez le VBA)

-si (« A16 »: « B16 ») non vide alors

Copier (« A16 »: « B16 ») dans (« E16 »: « F16 »)

Et répéter cette macro pour les lignes 17à20(car j’ai Max 4accessoires qui pourraient dépasser de mon tableau). Et mettre l’écriture de ces cases en blancs pour qu’elles soient invisibles.

Rechercher des sujets similaires à "vba pas depasser ligne renvoi auto colonnes loin"