Boucle de recherche sur plusieurs feuilles

mawua

XLDnaute Occasionnel
Bonjour, bonsoir (vu comment il fait tout sombre avec ces nuages bas)

Je sais que ce problème à souvent été évoqué mais je coince sur l'adaptation de cette formule à mon cas.
pour ceux qui ont suivi mes précédents pérégrinations c'est toujours le meme fichier. Un onglet saisie, une base de données.
J'insère des feuilles au début (qui peuvent être de nombre variable et de noms plus ou moins aléatoire) pour rechercher des valeurs dedans et les rentrer dans la BDD.

Bon j'ai fait plusieurs routines de rapatriemement qui fonctionnent.
Maintenant j'ai besoin qu'elles s'automatisent un peu.
Bref , je dois scanné les onglets à partir du septième jusqu'à la fin.
Leurs noms sont variables donc je ne leur fait référence qu'avec Feuilx.
Je repère le numéro de ligne d'une chaine de caractère.
Je cherche la valeur que je veux sur la meme ligne et je balance le résultat sur la première ligne vide dans ma BDD.
Sur cette meme ligne de ma BDD j'ai besoin du contenu cellules un peu au dessus, ou un peu au dessous du resultat de ma recherche.
Du coup j'ai un peu trop de variable et ça coince.

La variable Ligne est déclarer en tête de module
J'appelle la fonction (reliée à un bouton) dans ce même module.

Private Sub rechMontSoutTrait()
Dim i As Long, k As Long
z = 44

With ThisWorkbook.Sheets("BDD")
For k = 7 To Sheets.Count
With Sheets(k)
For i = 30 To 35
If Left(Sheets(k).Range("I" & i), 5) = "Reste" Then 'Reperage de la ligne Reste à payer
.Cells(Ligne, z) = Sheets(k).Range("M" & i).Value 'Montant Sous-traitant1, 2, 3...
.Cells(Ligne, z + 1) = Sheets(k).Range("M" & i - 8).Value 'Retenue Sous-traitant1, 2, 3...
z = z + 2
End If
Next i
End With
Next k
End with
End Sub


Voilà. J'attend vos avis avec impatience.
 
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : Boucle de recherche sur plusieurs feuilles

bonjour mawua

j'espere que les feuilles parasites ne sont qu'un mauvais souvenir !!

personnellement je n'aime pas trop les With

si la Ligne appartient à la feuille BDD j'ecrirais plutot

sheets("BDD").Cells(Ligne, z)

et non

.Cells(Ligne, z)

mais un fichier exemple est toujours plus efficace !!!

A+
 

mawua

XLDnaute Occasionnel
Re : Boucle de recherche sur plusieurs feuilles

Rebonjour PierreJean,

J'ai du couper dans le vif, pour reduire ce fichier mais bon, maintenant il est là.
La soluce de ce matin semble fonctionner le test sur le nombre de feuille semble attiré l'attention d'excel le sheet.count qui est toujours à jour.

Pour ce qui est de ce nouvel os, j'ai supprimé la boucle with comme tu me soumettait l'idée mais rien à faire. C'est d'autant plus étrange que je n'ai pas de message d'erreur. Simplement les données ne sont pas copiées. :(

Je crois que je vais laisser le week-end passer la dessus.

Edit: Aide à la localisation, le code est dans le module 1
 

Pièces jointes

  • BDD_mawua.zip
    23.8 KB · Affichages: 51
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : Boucle de recherche sur plusieurs feuilles

bonsoir mawua

petite lecture rapide

cette ligne est plutot suspecte

For k = 7 To Sheets.Count

comme cela ou comme

For k = 7 To Sheets.Count Step -1

je suggererais plutot

for n=1 to sheets.count
if sheets(n).name <> "BDD" etc.
........
end if
next n

mais ce n'est qu'une 1ere approche

par contre ce WE je suis loin de mon clavier alors a lundi
 

Gorfael

XLDnaute Barbatruc
Re : Boucle de recherche sur plusieurs feuilles

mawua à dit:
Rebonjour PierreJean,

J'ai du couper dans le vif, pour reduire ce fichier mais bon, maintenant il est là.
La soluce de ce matin semble fonctionner le test sur le nombre de feuille semble attiré l'attention d'excel le sheet.count qui est toujours à jour.

Pour ce qui est de ce nouvel os, j'ai supprimé la boucle with comme tu me soumettait l'idée mais rien à faire. C'est d'autant plus étrange que je n'ai pas de message d'erreur. Simplement les données ne sont pas copiées. :(

Je crois que je vais laisser le week-end passer la dessus.

Edit: Aide à la localisation, le code est dans le module 1
Salut
question : qu'est-ce que tu veux faire dans valider ;
Code:
        For i = 15 To 25
            If Left(Feuil4.Range("B" & i), 6) = "MARCHE" Then  'va chercher la ligne marché
                .Cells(Ligne, 2) = Feuil4.Range("D" & i).Value 'numéro du marché
                .Cells(Ligne, 3) = Feuil4.Range("F" & i).Value2 'date du marché
                .Cells(Ligne, 6) = Feuil4.Range("D" & i + 3).Value2 'date de notification
                .Cells(Ligne, 11) = Feuil4.Range("D" & i - 3).Value 'Nom/N° Lot
                .Cells(Ligne, 34) = Feuil6.Range("D" & i + 2).Value2 'date de transmission du marché
            End If
        Next i
soit il n'y a qu'une seule série et pourquoi tu ne mets pas un Exit For juste avant End If, puisque tu sais l'utiliser
Soit tu en a plusieurs et dans ce cas, où veux-tu les coller
Idem pour toutes tes séries

--------------------------------------------
Dans l'organisation de tes macros :

Perso, Quand j'utilise des fonction agissant sur Excel (comme DisplayAlerts), je gére obligatoirement les erreurs :
Quand Excel rencontre une erreur dans l'exécution d(une macro, il quitte la macro à la ligne d'erreur, il avertit et il effectue un end sub.
Si ta remise en action de la fonction est entre la ligne d'erreur et la fin de la macro, elle ne sera pas effectuée et comme c'est sur Excel, tant que tu ne la remettra pas en route soit par macro, soit par fermeture/ouverture d'Excel, Quelque soit le classeur actif, tu n'aura plus d'alerte

Tu déclares certaines variables et d'autres pas. Il faut toutes les déclarer (c'est le mieux) ou aucune (beuuurk)

Je n'ai pas assez d'infos sur le fonctionnement de ton fichier, alors j'ai fait queque modifs de ce que je comprenais j'ai mis '* pour les montrer et quand j'ai modifier une instruction :
'* ancienne instruction
nouvelle instruction
'* commentaires

A+
 

Pièces jointes

  • BDD_mawua Mod.zip
    22.6 KB · Affichages: 54
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : Boucle de recherche sur plusieurs feuilles

bonjour mawua, salut Gorfael

je te confirme ma 1ere impression

cette version fonctionne pour la macro rechMontSoutTrait()

Attention une ligne (necessaire pour test ) est a effacer

A+
 

Pièces jointes

  • mawua.zip
    23.1 KB · Affichages: 47

mawua

XLDnaute Occasionnel
Re : Boucle de recherche sur plusieurs feuilles

Bonjour et bon début de semaine.
Bonjour Gorfael, Bonjour PierreJean.

Après avoir pris le temps de jeter un oeil sur vos propositions, j'avoue être de plutôt bonne humeur. PierreJean ton adaptation est encore une fois très pertinente. Cela fonctionne même au milieu de mes formulaire plutôt complexe bien que je ne saisisse pas tout à fait ce qui à débloquer la prise en compte des cellules. (J'avais essayé de faire un step-1 vendredi mais ça n'avait rien donnné). Ca me parait étrange de ne pas pouvoir faire une boucle sur le Sheets.Count en partant du chiffre que l'on veut, ça évite les itérations superflues, non?
Déjà qu'il y en a à revendre.

Gorfael:
Pour ce qui est de la procédure de recherche de la dernière ligne vide.
Je crois que là c'est une opposition de style. Non pas que j'ai fait un choix personnellement mais PierreJean m'a filé tellement de coup de main que ça transparait dans le code. Effectivement ta méthode est plus courte.

Merci de tes conseils pour blinder un peu le code, il en a besoin et tes procédures de sécurité vont m'être très utiles. Je dois peut être préciser que je ne pratique le VBA que depuis la date de mon inscription sur le forum. J'avais jamais pratiqué avant, donc ne présume pas trop de mes capacités

pourquoi tu ne mets pas un Exit For juste avant End If, puisque tu sais l'utiliser

Cependant, la solution que tu me propose bute apparement sur le même problème. pas de rapatriement des données !!!

Pour repondre à tes questions:

Le bouton valider set à transmettre les données collectées sur les onglets inserés.(Nombre d'onglet variable) selon la présence de sous-traitant ou non.
Le fait qu'il y ait plusieurs series est un peu bizarre je le concoit, ce sont des regroupement de mon fait, là où j'ai repéré qu'il ne pouvait y avoir de différence.
Pour etre clair: Il n'y a pas de modele de document unique là où je bosse donc tout le monde fait sa popotte avec les fichiers du mois précédent effacé puis re-rempli, d'où la présence de recherche ponctuelle sur des parties d'onglet.

Merci pour tout à tout les deux et à la prochaine, ce qui ne devrait tarder.

PierreJean, je ne sais pas à quelle heure tu te lève mais ta reponse etait postée avant que je n'arrive au boulot :cool: .
Mes respects. Moi je vais aller prendre un café.
 
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : Boucle de recherche sur plusieurs feuilles

re mawua

je pense que tu fais un fixation sur le sheets.count=3
ce n'est vrai que lorsqu'il n'y a plus que 3 feuilles
d'ou l'impossibilité de faire une boucle evoquant des N° de feuille avec un chiffre superieur à sheets.count
tu pourrais a la rigueur faire
for n= 4 to sheets.count
si tu avais la certitude que tes 3 feuilles BDD Saisie et Rapport sont bien:
Feuil1(BDD)
Feuil2(Saisie)
Feuil3(Rapport)
Mais d'apres ce que tu dis,apres divers "tripotages" on ne sait plus bien ou l'on en est
pou ce qui est de mon reveil c'est 6h30
mais je n'ais pas de trajet puisque je fais partie des heureux retraités et que donc je m'occupe chez moi
 

Discussions similaires

Réponses
4
Affichages
213
Réponses
2
Affichages
154

Statistiques des forums

Discussions
312 320
Messages
2 087 226
Membres
103 497
dernier inscrit
JP9231