j'abuse, mais c'est tellement bon ces macros

M

man

Guest
bonsoir à tous,

j'ai encore un gros service à demander aux experts de VBA car même avec les formules "indirect" je ne parviens pas à faire ce que je veux.

j'ai un classeur avec une centaine feuilles dont la structure est identique (fiche produit) sauf la première qui me sert de page d'accueil et la seconde qui est vierge.
Sur cette seconde feuille intitulé « états », je tape un nom dans la cellule A1 (ex : fournisseur 1) et j’aimerai que la macro regarde dans la cellule D2 de la centaine de feuille pour déterminer si le nom quelle contient est identique à celui de spécifié en A1 de la feuille « états ».
Et si c’est le cas, la macro doit copier le contenu de la cellule A2 (contient la référence du produit) de la feuille examinée, dans la cellule A10 de la feuille « état »,
puis dans les lignes du dessous, et là ça se corse, toutes les lignes (de la colonne A à G compris) qui contiennent une valeur en F ou en G…
Et ainsi de suite à la queue leuleu, feuille après feuille.
NB : j’affecterai cette macro à un bouton.

J’espère avoir été clair et que cela est la portée d’un connaisseur.

@+
Emmannuel
 
Z

Zon

Guest
Salut Man et le forum,

Cela fait plusieurs posts Man que tu demandes des eclaircissements sur des bouts de code, à priori d'aprés ce que tu écris tu obtiens les résultats attendus.
Je comprends tout à fait que tu aies des difficultés à regrouper toutes ces infos dans une seule procédure.
Je trouverais plus logique que tu mettes un fichier exemple de quelques feuilles avec un code Vba derrière, nous dire clairement où ça plante, ce que tu n'arrives pas à mettre en place=> Et c'est là que nous interviendrons

Je trouve dommage tout ce temps que plusieurs contributeurs ont passé à te répondre pour en fin de compte dans ce post demander en somme une appli complète.

Bonne programmation


A+++
 
M

man

Guest
Re Zon, le forum,

Zon, je ne comprends pas tout à fait ta remarque parce que ce post correspond à une nouvelle macro pour laquelle je n'avais pas encore demander d'aide.
Toutes les contributions passées, m'ont effectivement beaucoup apporté et cà je vous en suis reconnaissant.
Je m'efforce dans mes demandes d'être le plus clair et précis possible en indiquant ce qui plante et où ca plante (comme ton aide pour le verrouillage des lignes).
Alors peut être que par ta derniere remarque tu trouve en fait dommage que ce que j'ai appris grace à vos aides précédentes ne me permette pas de développer cette macro seul.
Si c'est comme çà que je dois l'interprétrer, et bien il faut que tu saches un truc : je suis archi débutant en vba. à part l'enregistreur et pomper quelques codes, c'est comme une nouvelle langues que j'apprends.
Donc il est clair que la macro que je demande dépasse largement mes capacités. Je suis juste capable de comprendre (a peu prêt) ce qui se passe à chaque ligne de code.
Après hésitation et reflexion, je me suis dit qu'il vallait mieux que j'explique ce que je voulais dans son intégralité (ou presque) que de le decomposer en petites demandes qui aurait sans doute abouti à un beau merdier.
Alors effectivement, j'aurai pu mettre un fichier d'exemple, mais cela ne m'a paru nécessaire compte tenu de la description que j'ai donné (peut être que je me trompe).
Voila, alors je ne sais pas ce que tu en penses. y a t'il eu malentendu ou dois je revoir ma façon de procéder sur le forum ?

@+ emmanuel
 
Z

Zon

Guest
Salut Man et le forum,

M'ai trompat en lisant tes posts alors, désolé pour éviter tout mal entendu, colles ceci dans un module.

Option Explicit
Const NomF As String = "Etats" 'Nom de feuille ou on mets les résultats
Const Plage As String = "D1:D65536" 'Plage où on recherche la valeur à trouvée
Sub Princ()
Dim WS As Worksheet, I As Byte, Val As String, L As Long, J As Integer
J = 10 'On met à partir de A10 donc 10 eme ligne
With ThisWorkbook
With Sheets(NomF)
If .[A1] = "" Then Exit Sub Else: Val = .[A1]
'Effacement de la plage A10 à G???
.Range("A" & J, "G" & .[D10].End(xlDown).Row).ClearContents
End With
For I = 3 To .Sheets.Count ' à adapter, ici on commence à la feuille en posisiton 3
With Sheets(I)
L = Rech(Val, .Range(Plage))
If L <> 0 Then
If .Range("F" & L) <> "" Or .Range("G" & L) <> "" Then
Sheets(NomF).Range("A" & J, "G" & J) = .Range("A" & L, "G" & L).Value
J = J + 1
End If
End If
End With
Next I
End With
End Sub
Private Function Rech(RechS As String, T As Variant) As Long
On Error Resume Next
Rech = Application.Match(RechS, T, 0)
If Err <> 0 Then Rech = 0
End Function

Si ce ne sont pas les résultats escomptés envoies moi ton fichier en BAL .

A+++
 

Discussions similaires

Statistiques des forums

Discussions
314 140
Messages
2 106 291
Membres
109 554
dernier inscrit
jey