Problème avec une boucle

Bonjour à tous,

Par macro j'alimente des tableaux dans un fichier DESTINATION à partir de requête exportées au format Excel.

j'ai un souci de reconnaissance d'en-tête de ligne qui fait que les données viennent toujours s’insérer dans le 1er tableau de ma feuille

j'ai plusieurs tableaux (avec des en-têtes de lignes identiques) positionnés les un sous les autres

Le problème : cela me copie toujours les données dans le 1er tableau de la feuille "résultat" au lieu du 2ème tableau , du 3éme etc...

Je joint un fichier démo simplifié où j'ai placé le résultat des requêtes dans 2 onglets pour simplifier au maximum

Avez-vous une solution à me soumettre svp ?

merci d'avance

Mag

Bonjour,

Cheminement un peu tortueux, je ne comprends pas tous ces détours. Il me semble qu'il s'agit d'un transfert de données ?

On monte un tableau à partir de la source et on l'affecte à la plage destination ! Cela paraît le plus simple, et si les plages cibles sont nommées, aucun risque d'aller ailleurs.

Tout du long, il y a un mélange de recherches de ligne ou colonne avec des indications en dur ! Ce n'est pas très cohérent, soit c'est en dur, parce que ça doit être là et on le sait, soit c'est variable et on doit chercher le positionnement en entier.

Ce pourquoi nommer règle ce type de problèmes incertains, on n'a plus à se préoccuper de savoir où c'est ! Le nom y amène : la première ligne de la plage sera toujours 1, et de même pour la première colonne !

J'illustre l'aspect tortueux : au démarrage de la macro :

If Month(Date) - 1 = 0 Then MM = 12 Else MM = Month(Date) - 1
If MM < 10 Then MM = "0" & MM
AA = Right(Year(Date), 2)
If MM = 12 Then AA = AA - 1
dat = MM & AA

On peut écrire ça en une ligne ! Moins de place et plus rapide :

Teste donc :

Sub test()
    Dim DAT
    DAT = Format(DateAdd("m", -1, Date), "mmyy")
    MsgBox DAT
End Sub

Je n'ai pas compris l'histoire de libellé contrôle qui n'apparaît pas dans ton tableau...

Je pense qu'il faut réécrire à partir d'une description précise de l'opération... le problème de détection d'un point de départ de boucle ne se posera plus, si l'on n'a pas besoin de le chercher, et si on ne fait plus de boucle d'affectation !

Cordialement.

Bonjour mag13180, bonjour le fil, bonjour le forum,

Je vais laisser MFerrand te torturer pour améliorer ton code. Il est peta.fois meilleur que moi.

Pour ce qui est du changement de tableau, en feuille RESULTAT, une façon de faire est d'ajouter 16 lignes à la ligne trouvée par FIND.

COL = Rows("23").Find("*4 mois*").Column
COL = Range(Cells(24, COL), Cells(24, 200)).Find(MMMM).Column  'Find(MMMM & " " & AAAA).Column si janvier 2017 dans tableau requête BOXI
Cells(24, COL).Select

For X = 1 To 20
    If ADR1(X) = "" Then Exit For ' car intitulé de ADR1 DE LA FEUILLE GESTION

    'cherche la ligne pour ADR1 (NICE, MARSEILLE  ....) à  partir e la ligne 23 pour ne pas me retourner le 1er résultat (NICE, MARSEILLE  ....) trouvé à partir de la ligne 9
    ' LE PROBLEME EST ICI
    ' cela me copie toujours les données dans le 1er tableau de la feuille résultat au lieu du 2ème :

    L = Columns(1).Find(ADR1(X)).Row + 16  ''' ajout  de 16 lignes ICI
    Cells(L, COL) = N(X): N(X) = 0
Next X

Bonne continuité.

Joseph

Bonjour à tous les 2 !

merci pour vos conseils et solutions !

Je reconnais très humblement que la totalité du fichier aurait été + explicite ...

Je suis rodée sur la "torture" de Mferrand, c'est grâce à ses châtiments que je grandie en VBA !

  • merci pour la récup de la date
  • je vais travailler le code avec des plages nommées (je cherche avec en-tête de ligne et de colonne parce que ma responsable à une fâcheuse tendance à déplacer les tableaux, y ajouter des lignes et à piquer sa crise après car l'alimentation auto ne fonctionne plus ... alors je me torture avant qu'elle me torture elle, c'est moins pénible pour tout le monde .... sauf pour vous !)
  • merci Joseph pour le + 16

Bon dimanche !

Bonjour mag13180, bonjour le fil, bonjour le forum,

En ce dimanche matin (c'est le matin ici), voici une version où je me suis amusé (au lieu d'aller à la grand-messe).

En utilisant le bouton REMPLIR, il donne comme avant le mois précédent au mois en cours, sans le Input et le msgbox.

Si tu cliques sur un mois de la ligne 8, tu auras les données de ce mois-là.

Joseph

c'est génial !

Tu peux t'amuser avec mes fichiers quand tu veux !!!!!!

Non sérieux le top, c'est qu'en désactivant la ligne

' RAZ.REMISE_A_0

ça me permet d'effectuer dans certains cas la régul sur les mois antérieurs.

Suivant que je doive conserver les données au dernier rafraichissement je les maintiens chaque mois, mais si je dois prendre en compte le stock réel de dossiers, le fait de réajuster le mois en cliquant sur sa cellule me permet d'intégrer les "retours contrôle" sans avoir à modifier la date dans l'inputbox. Il y a souvent un écart de stock pour les mois antérieurs lorsque la requête est rafraichie sous BOXI, et que la bascule du mois M vers M+1 se fait le 1er jour du mois M+1 au lieu du dernier jour du mois M.

Bon mon explication est pas terrible mais je t'assure que ton code l'est !

Merci Merci Merci

Bonjour mag13180, bonjour le fil, bonjour le forum,

Une autre version avec un peu de poudre de perlimpinpin ... :

clique une fois sur le mois pour avoir les données ...

clique une 2e fois sur le même mois, les données sont disparues ... ... Maagiiiiie ...

Joseph

j'adore en + d'être magique c'est pratique !

ça me motive à aller bosser demain

je sens que je vais adapter à toutes les sauces !

Merci !

Rechercher des sujets similaires à "probleme boucle"