Parcourir un tableau recursivement - VB/VBA/VBS - Programmation
Marsh Posté le 25-01-2010 à 14:05:04
Pas besoin de récursion. Deux boucles imbriquées suffisent :
1. Loop until on n'a rien trouvé à supprimer
2. Loop from 1 to n until il faut supprimer quelque chose
Marsh Posté le 25-01-2010 à 14:20:07
Comment je fais alors pour relire mon tableau avec les nouvelles valeurs?
Ce que je cherche à faire c'est comment regenerer le tableau en fait sans les valeurs de la ligneSupprime et la colonneSupprime
LireTableau
Parcourir tableau(i,j)
Si tableau(i,j) > tableau (i+1,j+1)
genererUnNouveauTableau(sans la ligne i+1 et colonne j+1)
FinSi
Marsh Posté le 25-01-2010 à 14:43:43
Quel genre de tableau est-ce ?
Un tableau d'entiers basic, ou un tableau Excel, ou une table Access ?
Si c'est un tableau basic, on supprime une ligne (ou une colonne) en faisant un décalage, lequel se fait en recopiant la ligne (ou la colonne) suivante à l'emplacement de la ligne (ou de la colonne) suprimée, idem pour la ligne (ou la colonne) voisine, etc., et on diminue le nombre total de lignes (ou de colonnes). On peut faire un redim, mais ce n'est peut-être pas nécessaire.
Marsh Posté le 25-01-2010 à 14:51:16
Au final ca sera un tableau excel...
Mais je veux pouvoir le faire avec un tableau d'entier basic
Justement c'est ça que je n'arrive pas à faire.
Marsh Posté le 25-01-2010 à 15:14:22
Avec un tableau Excel, c'est plus facile, car il existe des commandes pour effacer une ligne (ou une colonne), et on n'a donc pas besoin de programmer le décalage.
Qu'est qui est difficile ?
L'algorithme a été défini. Chaque partie de l'algorithme est faisable. Où est le blocage ? Dans quel partie ?
Marsh Posté le 25-01-2010 à 17:20:10
olivthill a écrit : Avec un tableau Excel, c'est plus facile, car il existe des commandes pour effacer une ligne (ou une colonne), et on n'a donc pas besoin de programmer le décalage. |
Genre avec un Worksheets.range(H6).value = null ?
Mieux montrer mon sale code... et je pense que tu vas vite comprendre pourquoi je m'embrouille...
JE fais plein de SI imbriquer...
Code :
|
Marsh Posté le 26-01-2010 à 13:19:02
olivthill a écrit : Pas besoin de récursion. Deux boucles imbriquées suffisent : |
Loop from 1 to n unti
n represente quoi...
BOn j'ai recommencé un exemple test mais je ne vois pas ou est ce que je dois supprimer une ligne :
Code :
|
Marsh Posté le 26-01-2010 à 15:36:57
Voici le code qui correspond à l'exemple, mais il faudra peut-être l'adapter un peu.
Sub ReduireTableau() |
Marsh Posté le 26-01-2010 à 18:55:15
olivthill a écrit : Voici le code qui correspond à l'exemple, mais il faudra peut-être l'adapter un peu.
|
Merci beaucoup je pense que je dois l'adapter evidemment mais je ne vois pas à quel moment tu lui passe les valeurs du tableau en fait...
Dois je remplacer Cells(1,j) avec Tableau(i,j) ?
Marsh Posté le 27-01-2010 à 09:46:51
Citation : Dois je remplacer Cells(1,j) avec Tableau(i,j) ? |
Ca dépend dans quellle ligne.
Dans la ligne If (Cells(1, j) <= Cells(i, j)) Then , Cells(1, j) désigne le contenu de la cellule de la ligne 1, colonne j. Donc, ici, on peut effectivement remplacer la cellule Excell par une cellule de tableau basic.
Dans la ligne Cells(i, 1).EntireRow.Delete, Cells(i, 1) désigne un objet qui n'a pas d'équivalent en basic. Cette ligne devra être remplacée par une boucle pour faire le décalage dont je parlais plus haut.
Marsh Posté le 25-01-2010 à 13:56:55
Bonjour,
Je souhaire en VBA uniquement pouvoir generer un tableau dynamiquement.
Je connais :
Je voudrai lire les valeurs de ce tableau et comparer chaque ligne.
Si une ligne ENTIERE est > à une ligne --> on supprimer la ligne et la colonne correspondante
Exemple :
Je parcours mon tableau :
Premier passage : on compare ligne1 et ligne2 --> ligne 1 est inférieur.
Deuxieme passage : on compare ligne1 et ligne3 --> toute la ligne 1 est superieur à la ligne 3
Donc je veux regénérer un tableau sans la ligne 3 et ni la colonne 3 ce qui veut dire que mon tableau devient en dimension (7,7).
Et je recommence jusqu'a ce qu'il n'y est plus de ligne superieur.
Je n'y arrive pas algorythmiquement
Je peche sur comment generer le tableau
Je pensai à un programme principal avec 2 fonction
Un petit coup de pouce...