Aide pour un problème de tableau avec macros

10pb-niko94100.xlsx (40.74 Ko)

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

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

Bonjour (tous)

niko94100 a écrit :

Andrea73 un immense merci !!!!! c'est exactement ça

niko94100 a écrit :

Je vais regarder ta solution afin de progresser car elle a l'air plus classe que la mienne

à toi de voir

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

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

Rechercher des sujets similaires à "aide probleme tableau macros"