Boucle dans un tableau / Resize dans la colonne désirée

Bonjour à tous,

Je travaille actuellement sur une grosse base de données dans laquelle je vérifie à laide d'une boucle For, les données qui sont dans une colonne pour ensuite inscrire un "oui" ou "non" dans une autre colonne.

Pour faire simple, j'ai trois colonnes à "tester" et les résultats sont inscrits dans trois autres colonnes respectivement.

Voici mon code qui m'a été grandement donné sur ce forum :

Option Explicit

Sub Test_Fonctions()

'Vérification Entrepôt
Dim Tableau
Dim x As Long

With Worksheets("SO Net Volume FRANCE pour Excel")
    Tableau = .Range("A2:S" & .Range("S" & Rows.Count).End(xlUp).Row).Value

    For x = 1 To UBound(Tableau, 1)
        Tableau(x, 1) = IIf(InStr(Tableau(x, 7), "MAGASIN") > 0 Or InStr(Tableau(x, 7), " MAG") > 0 Or InStr(Tableau(x, 7), " MAG.") > 0 Or InStr(Tableau(x, 7), " MA") > 0 Or InStr(Tableau(x, 7), "ECHANTILLONS") > 0, "NON", "OUI")
    Next

End With
Worksheets("SO Net Volume FRANCE pour Excel").Range("A2").Resize(UBound(Tableau, 1), 19).Value = Tableau

'Vérification volume <50kg
With Worksheets("SO Net Volume FRANCE pour Excel")
    Tableau = .Range("A2:S" & .Range("S" & Rows.Count).End(xlUp).Row).Value

    For x = 1 To UBound(Tableau, 1)
        Tableau(x, 1) = IIf(Tableau(x, 19) > 50, "NON", "OUI")
    Next

End With
Worksheets("SO Net Volume FRANCE pour Excel").Range("B2").Resize(UBound(Tableau, 1), 19).Value = Tableau

End Sub

Mon problème, c'est qu'avec ce code, lorsque je vérifie si mon volume est <50kg et que je resize ma colonne B pour y affecter les valeurs trouvées dans ma boucle, j'ai certes bien les valeurs "oui"/"non" qui se mettent dans ma colonne B, mais les données du reste de mon tableau excel se décalent d'une colonne sur la droite : mes en-têtes ne se décalent pas (puisque je commence mes range à 2) mais les données à partir la ligne 2 se décalent une colonne à droite... Je dois sûrement pas bien écrire mon code.

je suis débutante en vba et j'apprends en faisant ^^

Je vous remercie par avance pour votre aide précieuse ! N'hésitez pas à commenter mon code pour m'expliquer où se trouve mon erreur et ainsi je pourrais mieux progresser

Victoire

Bonjour,

De ce que je crois comprendre:

  • tu copies, dans un tableau en mémoire, une plage de cellules de A2 à Sxx
  • dans ce même tableau, tu inscris tes OUI/NON en première colonne (mais qu'y avait-il en colonne A, à l'origine ??? )
  • tu colles le tableau ainsi modifié dans la plage de départ (A2:Sxx)
  • tu recommences ensuite une manipulation similaire en remplaçant -dans le tableau en mémoire- les OUI/NON liés à la présence d'une mention "Magasin", par d'autres OUI-NON liés au volume (<50 kg)
  • tu colles ce nouveau tableau à partir de la colonne B

Je dois avouer (pour autant que j'aie bien compris !?) que la logique m'échappe un peu et, sans fichier exemple à se mettre sous la dent, on ne peut que se perdre en conjectures

Salut U.Milité

Deux post pour le prix d'un !

https://forum.excel-pratique.com/viewtopic.php?f=2&t=136027

Tsss, tsss...

A+

Salut curulis57

Ouuupss, pas vu celui-là ... mais c'est l'occasion de te croiser

Ça faisait longtemps, en effet...

Tout baigne à Namur ?

A+

Tout baigne à Namur ?

Sur ce coup-là, tu dois me confondre avec quelqu'un d'autre (je vis dans la Botte du Hainaut)

@+

Ah?

Non, je ne confonds pas mais mon souvenir s'est manifestement décalé de quelques kilomètres...

Je m'en vais recadrer le GPS !

A+

Bonjour U.Milité,

Je te remercie pour ton retour ! Oui peut être ma logique peut être optimisée, tu as bien décris ce que je souhaitais faire et pour préciser en amont :

J'ai une base donnée de je récupère et que je souhaite "affiner" en rajoutant des indicateurs (mes fameux oui/non) pour ensuite créer des TCD avec ma nouvelle base de données.

Du coup :

1) je récupère cette base de données dont les colonne vont de A jusqu'à R

2) je la "nettoie" en supprimant 2 colonnes et en en insérant 3 nouvelles au début du tableau (qui sont donc vides) dans lesquelles j'inscrirait "oui"/"non" à mes tests (magasin/<50 kg/<300kg) --> j'ai donc un nouveau tableau sur excel avec des colonnes de A à S

3) je fais mes trois tests et remplie mes colonnes avec "oui"/"non" --> comme mon tableau a plus de 100 000 lignes, je crée une liste dans mon vba (tTab) pour optimiser la vitesse de traitement de mon code

Je ne suis pas encore à l'étape de mon TCD, mais peut être as-tu une meilleure approche pour traiter mon problème ? Je serais ravie que tu me la partage si c'est le cas car je suis en quête d'optimiser en automatisant le traitement, les fichiers excel de ma boîte pour éviter trop de manuelle...

J'espère que j'ai éclairé mon problème

Pour info, le code que m'a donné curulis57 fonctionne !

Merci

Victoire

Bonjour,

La question de curulis57 demeure: pourquoi avoir ouvert un nouveau sujet ? Pour autant qu'on puisse en juger, il s'agit toujours de la même question

Par ailleurs, si tu veux gagner du temps, pourquoi ne pas faire tes différents tests (et compléter tes OUI/NON) en ne parcourant qu'une seule fois ton tableau et en complétant tes 2 ou 3 colonnes en un seul passage ?

Pour une bonne compréhension, pourquoi ne pas joindre un extrait de ton tableau, tel qu'il existe après tes suppressions/insertions de colonnes ? Supprime les données qui pourraient être confidentielles et ne joins qu'une cinquantaine de lignes qui représentent les différents cas de figure, s'il y en a. Pense à laisser les titres des colonnes, également.

curulis57 avait proposé une simplification de ton premier test, en vérifiant la présence de "MA", au lieu de tester la présence de "MA", "MAG", "MAG.", ou "MAGASIN" ... tu sembles ne pas en avoir tenu compte; il y a une raison particulière ?

Rechercher des sujets similaires à "boucle tableau resize colonne desiree"