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
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.