Résolu Remplir plusieurs feuilles Excel à partir d'une feuille source contenant toutes les informations

  • Auteur de la discussion Molkec
  • Date de début

Molkec

Nouveau membre
Bonjour,

Je bloque depuis un moment sur une feuilles de calculs. Comme je n'ai plus fait de VB depuis 15 ans environ je fais toutes mes manips sur Excel avec des formules mais là je n'y arrive pas.

Sur la première feuille appelé "Export" j'ai des informations sur les colonnes B à I avec les titres des colonnes sur la première ligne.
Ensuite j'ai 10 feuilles sur lesquelles je copie les informations nécessaires (colonnes D à I) provenant de la feuille "Export".
Le nom de chaque feuille correspond à une information que je retrouve dans la colonne D du fichier "Export" par exemple : sur la feuille "HCl" je veux ramener toutes les lignes de la feuille Export où il est écrit HCl dans la colonne D. Je tiens à préciser que HCl est écrit au milieu d'autres caractères alphanumériques dans la colonne D exemple : "XXX17/HCl/55".
Sur ma feuille "HCl" l'information de la colonne D de la feuille "Export" doit aller en colonne B, la colonne E de la feuille "Export" doit aller en colonne C, ... et la colonne I de la feuille "Export" doit aller en colonne G.
La première ligne dans laquelle je veux que les informations viennent se remplir est la ligne 3 sur chaque feuille (donc première case remplie B3).
Le nombre de lignes contenant HCl est aléatoire est c'est pareil pour les autres noms recherchés et il peut y en avoir aucune.

J'ai essayé avec des formules mais je n'y suis pas arrivé. Depuis ce matin j'essaye avec VB.

Voici ce que j'ai tapé et qui ne marche pas :

Sub Export()
Dim sheetsource As Worksheet
Dim shetttarget1 As Worksheet
Dim linesource As Range
Dim celltarget As Range
Dim zonesource As Range
Set sheetsource = Worksheets("Export")
Set sheettarget1 = Worksheets("HCl")
Set celltarget1 = sheettarget1.Cells(3, "B")
Set zonesource = sheetsource.Range("D2:i65536")

For Each linesource In zonesource.Rows

If linesource.Cells(4).Value = "HCl" Then
linesource.Copy Destination = celltarget1
End If

Next

End Sub

D'avance merci.
 

drul

Obscur pro du hardware
Staff
Salut,
il y a de l'idée ...

essaie ça:

Code:
Sub Export()
Dim sheetsource As Worksheet
Dim cellsource As Range
Dim zonesource As Range

Set sheetsource = Worksheets("Export")
Set zonesource = sheetsource.Range(sheetsource.Cells(2, "D"), sheetsource.Cells(Rows.Count, "D").End(xlUp))

For Each cellsource In zonesource.Cells
    If cellsource.Value Like "*HCl*" Then 'Attention au majuscule !
        sheetsource(cellsource, cellsource.Offset(0, 5)).Copy Destination = Sheets("HCl").Cells(Rows.Count, "B").End(xlUp).Offset(1, 0)
    End If
Next

End Sub

 

drul

Obscur pro du hardware
Staff
Meilleure réponse
Salut, Bug de ma part ...

Code:
Sub Export()
Dim sheetsource As Worksheet
Dim cellsource As Range
Dim zonesource As Range

Set sheetsource = Worksheets("Export")
Set zonesource = sheetsource.Range(sheetsource.Cells(2, "D"), sheetsource.Cells(Rows.Count, "D").End(xlUp))

For Each cellsource In zonesource.Cells
    If cellsource.Value Like "*HCl*" Then 'Attention au majuscule !
        sheetsource.Range(cellsource, cellsource.Offset(0, 5)).Copy Sheets("HCl").Cells(Rows.Count, "B").End(xlUp).Offset(1, 0)
    End If
Next
End Sub
N.B. il serait pas mal de vider la feuille HCl en début de macro aussi ...
 

Molkec

Nouveau membre
Cela ne fonctionne pas et comme je ne connais vraiment plus rien à VB je ne trouve pas ce qui ne va pas.
c'est la ligne suivante qui ne fonctionnerait pas.
sheetsource(cellsource, cellsource.Offset(0, 5)).Copy Destination = Sheets("HCl").Cells(Rows.Count, "B").End(xlUp).Offset(1, 0)

Pour t'expliquer rapidement j'ai créé mon code à partir d'autres discussions trouvées sur le forum je ne comprend donc pas parfaitement ce que j'avais codé.
Pourquoi dans le code que tu m'as proposé on ne définit pas la sheettarget?
Que font les fonctions Rows.count et (xlUp).Offset(1, 0) ?
Merci.
 

Molkec

Nouveau membre
Oups je viens de voir ta nouvelle réponse après mon nouveau message.
Ne tiens pas compte de mon dernier message.
 

drul

Obscur pro du hardware
Staff
Rows.count donne la dernière ligne possible sur la feuille en cours. (dépendant de la version d'excel)
end(xlUp) cherche la première cellule non vide au dessus.
Quand on combine les deux on obtient la dernière cellule utilisé dans une colonne ...
La première cellule non utilisé est donc une ligne plus bas d'ou le offset(1,0)
 

Molkec

Nouveau membre
Magnifique cela marche ... presque
Je m'explique : la récupération marche et c'est envoyé sur la bonne feuille mais il n'arrive pas à récupérer les lignes où HCl apparaît (152 à 173) au milieu d'autres caractères alphanumériques.
Mais ce ne sont pas les caractères alphanumériques qui bloquent car je viens de faire plusieurs petites tests et : HCl, HCl/38, XXX17/HCl & XXX17/HCl/38 marche quand je le tape en ligne 8 (XXX17/HCl/38 est exactement une des valeurs non-trouvées en lignes 154 & 155).
Je viens également de tenter de coller toutes mes cases contenant HCL (lignes 152 à 173) dans les lignes 2 à 23 et cela ne marche pas par contre si je tape exactement la même chose cela marche.
Cela viendrait du format de ma case? je vais continuer à chercher en faisant différent tests

Petite précision : je n'aurai pas besoin de vider le fichier je vais garder une version vierge et je la mettrai dans chaque dossier dans lequel j'en aurai besoin
 

drul

Obscur pro du hardware
Staff
Pas de cellule fusionnée ? ou de problème de majuscule ?
Tente un

sub test()
msgbox Worksheets("Export").Cells(154,"D").value
end sub

pour voir si la cellule contient bien ce que tu penses ...
 

Molkec

Nouveau membre
Superbe idée cela m'a permis de trouver qu'il y a une erreur dans la nomination de mon fichier de base
Mon fournisseur n'écrit pas HCl mais HCI !!!!!!! :pt1cable:
On ne voit pas la différence dans Excel ni dans le forum comme tu peux le remarquer mais dans VB cela m'a montré qu'il a rentré un i majuscule au lieu d'un L minuscule.
Je vais de ce pas lui faire un e-mail pour qu'il me corrige ça et je vais tester toutes les autres appellations à chercher
Merci beaucoup.
 

Molkec

Nouveau membre
Bonjour Drul,

Je suis en train de terminer ma feuille et je voudrai ajouter une chose. Mes cases de destination ont un format défini et je voudrai garder le format de la case de destination quand la macro s'effectue alors que pour l'instant lors du copier/coller de la macro cela colle le format des cases sources.

Merci
 

drul

Obscur pro du hardware
Staff
3 solutions:
1) copier la .value de chaque cellule une à une ...
2) passer par un tableau
3) Utiliser pastespecial
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 128
Messages
6 717 832
Membres
1 586 367
Dernier membre
ramkin
Partager cette page
Haut