Aide pour un problème de tableau avec macros
Bonsoir à tous,
Cela faisait pas mal de temps que je n'ai pas posté ici
Mais voilà j'ai une nouvelle fois besoin de vos lumières:
Voilà je souhaite partir d'un tableau à 2 colonnes (bien évidemment en automatisant la chose)
Produit Marque
TOTO BIDULE
TITI BIDULE
TATA BIDULE
J'ai un tableau de données (ou il y a une croix dans certaines colonnes et cela dépendra de la marque mais mes fichiers seront pour une seule marque ça simplifie la chose)
Marque 0 3 6 9 10 12
BIDULE x x x x
Je voudrais que le résultat final soit:
Produit Marque infos
TOTO BIDULE 0 ml
TOTO BIDULE 3 ml
TOTO BIDULE 6 ml
TOTO BIDULE 10 ml
TATA BIDULE 0 ml
TATA BIDULE 3 ml
TATA BIDULE 6 ml
TATA BIDULE 10 ml
TITI BIDULE 0 ml
TITI BIDULE 3 ml
TITI BIDULE 6 ml
TITI BIDULE 10 ml
TUTU BIDULE 0 ml
TUTU BIDULE 3 ml
TUTU BIDULE 6 ml
TUTU BIDULE 10 ml
En gros qu'en fonction du nombre de colonnes cochées cela me fasse un autre tableau en y insérant des lignes entières.
En pièce jointe le modèle
Merci pour votre aide les amis !!!!
Bonjour Niko94100
Si tu veux que l'on te fasse un bout de code,
il faut déjà commencé par nous présenter la vrai forme de tes données et pas des bouts de tableaux un peu partout
sinon sera tu capables alors de modifier le code en fonction de ce que tu as !!!????
A+
Coucou
Alors je ne vois pas comment présenter mes tableaux différemment
C est ça que j ai
Un premier tableau sans doublon
Un deuxième tableau avec dedans des croix qui vont correspondre à une quantité
Je souhaite que en fonction du nombre de croix (imaginons qu il y ait 5 croix)
Que soit inséré 4 autres Lignes pour faire au total 5 lignes par produit
Je ne sais pas si c est assez clair.
Ensuite pour modifier le code ça devrait le faire, je n arrive pas à trouver une méthode...
Je suppose qu il faudra compter le nombre de "x" dans les cellules ou ils peuvent se trouver
Merci
- Messages
- 1'123
- Excel
- 2013 FR
- Inscrit
- 18/09/2015
- Emploi
- Développeur Bureautique Indépendant (Excel)
Bonjour nico94100, (BrunoM45)
Si j'ai tout (presque bien) compris...
andrea73 a écrit :Bonjour nico94100, (BrunoM45)
Si j'ai tout (presque bien) compris...
Andrea73 un immense merci !!!!! c'est exactement ça
j'avais réalisé ça
Sub test1()
nbprod = Range("AH1").Value
nbre = Sheets("Feuil3").Range("W2").Value
nbprod2 = nbprod + 2
For l = 0 To nbprod - 1
Rows((nbprod + 1) * l + 3).Select
For i = 1 To nbre - 1
Selection.Insert Shift:=xlUp
Next i
ligne = ActiveCell.Row - 1
Range("A" & ligne & ":B" & ligne).AutoFill Destination:=Range("A" & nbprod2 & ":B" & nbprod2), Type:=xlFillDefault
Next l
End Sub
Il me restait 2 chose:
1) résoudre l'erreur de la méthode autofill de la class range (je ne comprends pas pourquoi ça me met cette erreur)
2) faire les ml
Je vais regarder ta solution afin de progresser car elle a l'air plus classe que la mienne
Merci 10000 fois
Une dernière question:
Si je veux que le tableau sélection soit sur la feuille 3 et que le tableau initial soit sur la feuille 2 (le tableau final est sur la feuille 1)
Désolé mais je ne fais que bidouiller et mes connaissances sont limitées.
Merci andréa
- Messages
- 1'123
- Excel
- 2013 FR
- Inscrit
- 18/09/2015
- Emploi
- Développeur Bureautique Indépendant (Excel)
Bonjour (tous)
niko94100 a écrit :Andrea73 un immense merci !!!!! c'est exactement ça
à toi de voirniko94100 a écrit :Je vais regarder ta solution afin de progresser car elle a l'air plus classe que la mienne
- Messages
- 1'123
- Excel
- 2013 FR
- Inscrit
- 18/09/2015
- Emploi
- Développeur Bureautique Indépendant (Excel)
Bonjour nico94100
Pour répondre à ta question en MP...
"Une dernière question si je souhaite que mes tableaux soient sur des feuilles différentes ?
J'ai essayé de modifier le code afin d'initialiser les tableaux sur des feuilles différentes mais sans succès "
Il y en fait 2 solutions
La première (la plus simple - même devrais-je dire la plus simpliste)
Tu nommes chaque cellule de départ de tes tableaux avec un nom significatif
Dans mon PJ il s'agit donc des cellules L3C2, L3C5 et L3C17 et ainsi tu adaptes le code de cette manière
' Initialiser le Tableau Initial
colDeb = Range("depDebut").Column ' depDebut étant la cellule (nommée) de départ du tableau Initial
colFin = 3
ligDeb = Range("depDebut").Row
ligFin = Cells(Rows.Count, colDeb).End(xlUp).Row
tabDebut = Range(Cells(ligDeb, colDeb), Cells(ligFin, colFin))
et cela pour tous les tableaux
Mais comme je le disais ce n'est pas la plus "académique au sens Excel"
La deuxième solution (beaucoup plus "dans les règles de l'art"...)
Tu déclares tes feuilles et tu y fais référence ensuite dans les affectations des tableaux
Dim wsDebut As Object
Dim wsSelec As Object
Dim wsFinal As Object
Set wsDebut = Worksheets("TABLO DEBUT") ' il s'agit ici de nom fictif
Set wsSelec = Worksheets("TABLO SELEC") ' à toi d'adapter en fonction
Set wsFinal = Worksheets("TABLO FINAL") ' des noms réels de tes onglets
With wsDebut
colDeb = 2 ' si le tableau commence en colonne 2
ligDeb = 3 ' si le - - en ligne 3
colFin = 3 ' si le - comporte 2 colonne (3 étant la dernière colonne du tableau)*
ligFin = Range(.Cells(ligDeb, colDeb), .Cells(ligFin, colFin))
' tu noteras qu'il y a des . (point) avant les Cells(..)
' cela indique que les Cells(..) en question font référence
' à l'onglet "en cours" - celui du With
' autrement dit et dans ce cas à celui quyi contient le tableau initial
End With
et tu répètes cette opération pour l'ensemble des tableaux...
Fabuleux merci Andrea encore 100000 fois
Je suis un bidouilleur d Excel autodidacte et franchement j aimerais maîtriser à ce point
Merci encore !!!!
Dans le code en surligné ce ne serait pas plutôt ça ?
J'ai testé avec ce code ça marche mais uniquement pour le premier produit ....
car ligFin = 1 alors que mon tableau "tabDebut" est bon avec plusieurs produits ...
Je continues à chercher !
Dim wsDebut As Object
Dim wsSelec As Object
Dim wsFinal As Object
Set wsDebut = Worksheets("TABLO DEBUT") ' il s'agit ici de nom fictif
Set wsSelec = Worksheets("TABLO SELEC") ' à toi d'adapter en fonction
Set wsFinal = Worksheets("TABLO FINAL") ' des noms réels de tes onglets
With wsDebut
colDeb = 2 ' si le tableau commence en colonne 2
ligDeb = 3 ' si le - - en ligne 3
colFin = 3 ' si le - comporte 2 colonne (3 étant la dernière colonne du tableau)*
ligFin = Cells(Rows.Count, colDeb).End(xlUp).Row
tabDebut = Range(.Cells(ligDeb, colDeb), .Cells(ligFin, colFin))
' tu noteras qu'il y a des . (point) avant les Cells(..)
' cela indique que les Cells(..) en question font référence
' à l'onglet "en cours" - celui du With
' autrement dit et dans ce cas à celui quyi contient le tableau initial
End With
J'ai trouvé !!!!
ligFin = .Cells(Rows.Count, colDeb).End(xlUp).Row
Par contre dans
With wsSelec
colDeb = 1 ' si le tableau commence en colonne 1
ligDeb = 2 ' si le - - en ligne 2
colFin = 17 ' si le - comporte 2 colonne (3 étant la dernière colonne du tableau)*
ligFin = Cells(Rows.Count, colDeb).End(xlUp).Row
tabSelec = Range(.Cells(ligDeb, colDeb), .Cells(ligFin, colFin))
Je pensais aussi mettre un point devant Cells .... mais ça ne fonctionne pas et sans le point oui ....
en tous les cas ça marche !!!
Merciiiiii
- Messages
- 1'123
- Excel
- 2013 FR
- Inscrit
- 18/09/2015
- Emploi
- Développeur Bureautique Indépendant (Excel)
Bonjour niko94100
niko94100 a écrit :Fabuleux merci Andrea encore 100000 fois
Effectivement il faut écrire .Cells (point Cells) parce que le point indique que l'on fait référence à "l'onglet du With" et non à "l'onglet actuellement affiché à l'écran"... ce procédé est en réalité une "ruse" Excel pour accélérer les traitements puisqu'il n'y a pas de "swapping" entre les différentes feuilles du classeur...
Bon courage pour la suite... au plaisir de te relire...