Boucle avec valeurs non continues

arma

XLDnaute Nouveau
Bonjour à tous,

j'ai un problème que je n'arrive pas à résoudre concernant des boucles. J'ai un tableau mensuel qui compte 1200 lignes et 30 colonnes. En m+1, ce même tableau me revient avec des modifications non marquées. Mon but est de comparer chaque cellule de chaque ligne équivalente d'un tableau à l'autre (trouver les modifications quoi!). En colonne A, il y a le critère discriminant (équivalent d'un code postal) et le reste concerne diverses données. Jusque là, ça va. Le problème est que pour raccourcir le délai de traitement, je ne vais comparer que certaines colonnes, donc ma variable « n » (voir dans fichier joint) ne va plus de 1 à 30 (désigne les colonnes) mais est égale à 1, 2, 4, 5, 6, 17, 18,… (les valeurs sont sous le bouton de commande). Comment faire un For…To qui ne soit pas continu, mais qui ne prenne en compte que certaines valeurs ? J’ai essayé d’introduire 2 variables équivalent à m=Cells(x,3).Value où x va de 3 à 18 (m donne les valeurs dans les cellules C3 à C18) mais je n’arrive pas à faire marcher ma commande.
Merci pour votre aide (j’espère que l’explication est claire :)).
 

Pièces jointes

  • Copie de Comparateur de fichiers.xls
    33.5 KB · Affichages: 51
  • Copie de Comparateur de fichiers.xls
    33.5 KB · Affichages: 50
  • Copie de Comparateur de fichiers.xls
    33.5 KB · Affichages: 61

ROGER2327

XLDnaute Barbatruc
Re : Boucle avec valeurs non continues

Bonjour arma
Code:
[COLOR="DarkSlateGray"]colonne = Array(1, 7, 8, 27) [COLOR="SeaGreen"]'liste des colonnes à tester[/COLOR]
For n = 0 To UBound(colonne)
   c = Cells(a, colonne(n))
Next n[/COLOR]
Une telle structure fera que c prendra successivement les valeurs de Cells(a, 1), Cells(a, 7), Cells(a, 8), Cells(a, 27).
Peut-être est-ce dont vous avez besoin ?​
ROGER2327
 

arma

XLDnaute Nouveau
Re : Boucle avec valeurs non continues

Tout d'abord, merci d'avoir répondu et de m'avoir appris des choses (Array et UBound). Ensuite, j'ai essayé d'intégrer ce que vous m'avez donné mais cela ne fonctionne pas (de la façon dont je l'ai intégré). Si on prend n=0 To UBound, cela signifie que c=cells(a,0) comme première valeur ce qui n'est pas possible. J'ai essayé avec c=Cells(a,colonne(n)-1) et c'était un peu mieux, sauf que n continue à prendre des valeurs continues (1, 2, 3, 4, ...).
J'ai remis en copie ce que j'ai fait car j'ai sans doute mal compris le fonctionnement de ce que vous m'avez donné :eek: (à commencer par le fait qu'on nomme la variable "colonne" puis qu'on l'utilise en "colonne(n)" dans c. Pourquoi n'a t'on pas c=Cells(a,colonne)?).
A nouveau merci pour votre temps.
 

Pièces jointes

  • Copie de Comparateur de fichiers.xls
    38.5 KB · Affichages: 57
  • Copie de Comparateur de fichiers.xls
    38.5 KB · Affichages: 63
  • Copie de Comparateur de fichiers.xls
    38.5 KB · Affichages: 57

piga25

XLDnaute Barbatruc
Re : Boucle avec valeurs non continues

Bonjour,

Il existe ceci Compare two Excel spreadsheets without programming macro nor installing software on your computer

- Il n'y a pas de code et surtout aucune installation.
- Il donne la possibilité de comparer deux fichiers XL.
- Le résultat est téléchargeable en *.csv
- Possibilité de connaitre les absents de la liste 1 ou 2 et idem pour les présents.

Il y a une discution ouverte sur ce sujet ici : www.veriti.net • Afficher le sujet - Comparateur de fichiers XL

Certains vont vite reconnaître l'origine de ce fil.

@+
 

ROGER2327

XLDnaute Barbatruc
Re : Boucle avec valeurs non continues

Re...
Plusieurs questions dans ce message...
  1. A propos de la variable colonne : colonne est le nom du tableau. pour prendre une valeur dans le tableau, on la désigne par colonne(0) (première valeur), colonne(1) (deuxième valeur), colonne(2) (troisième valeur), etc.
  2. Si on prend n=0 To UBound, cela signifie que c=cells(a,0) comme première valeur
    Il faut prendre cells(a, colonne(0)) qui signifie cellule de la ligne a et de la colonne 1ère valeur du tableau colonne, c'est-à-dire 1 dans votre exemple et non cells(a, 0) qui, effectivement, n'existe pas.
    Voila pourquoi on remplace cells(a, n) par cells(a, colonne(n)) dans le code.
  3. Votre modification de code semble correcte, mais il m'est impossible de tester car votre code fait appel à des fichiers externes.
Un problème subsiste car il est possible de numéroter les éléments d'un tableau à partir de 1 plutôt qu'à partir de 0 qui est la valeur par défaut. On peut remédier à ce problème en écrivant
Code:
[COLOR="DarkSlateGray"]For n = LBound(colonne) To UBound(colonne)[/COLOR]
au lieu de
Code:
[COLOR="DarkSlateGray"]For n = 0 To UBound(colonne)[/COLOR]
A titre de vérification du procédé, vous pouvez tester ceci dans une feuille vierge :
Code:
[COLOR="DarkSlateGray"]Sub tata()
Dim colonne(), n As Long
   Rows(1).ClearContents [COLOR="SeaGreen"]'pour effacer le contenu de la première ligne[/COLOR]
   colonne = Array(1, 2, 4, 5, 6, 17, 18, 19, 20, 21, 22, 24, 26, 28, 29, 30)
   For n = LBound(colonne) To UBound(colonne)
      Cells(1, colonne(n)).Value = n
   Next n
End Sub[/COLOR]
L'exécution de ce code devrait placer les entiers de 0 à 15 dans les seize colonnes 1, 2, 4, 5, 6, 17, 18, 19, 20, 21, 22, 24, 26, 28, 29 et 30 de la ligne 1.​
Bon courage...
ROGER2327
 

arma

XLDnaute Nouveau
Re : Boucle avec valeurs non continues

Merci à Piga25 pour les infos même si le 2ème lien ne marche pas. J'aurai toujours un plan B en cas de difficultés futures.
Un grand merci à Roger2327 pour l'enrichissante leçon :D qui en plus m'a donné la solution (car maintenant ça marche). J'ai de nouvelles flêches à mon arc.
Au plaisir de vous r-avoir.
 

Discussions similaires

Statistiques des forums

Discussions
312 680
Messages
2 090 865
Membres
104 681
dernier inscrit
Gtcheumawe