macro effacer colonnes selon critères de recherche

julielef

XLDnaute Nouveau
bonjour à tous,

J'ai une maccro qui recopie les valeurs d'un fichier A pour les coller dans un fichier B.
Pour mon travail, je souhaiterais à présent qu'elle puisse recopier les valeurs en liens avec une autre valeure.
Je m'explique. J'ai un tableau qui récapitule le stock de matériel en fonction d'un lieu.
Par exemple:
Sur le lieu Baule :
Malle pédagogique : 1
Sac pédagogique : 1
Glacière :1
etcetera...
j'ai 60 lieux différents sur 60 colonne tous avec un stock de matériel différent.
Je voudrai que la macro ne copie que la colonne" Baule", pour la coller ensuite dans la colonne B de mon fichier B.

J'ai fait un code, mais quand je la lance, elle me dit "objet requis".

Private sub()
Dim classeurSource As Workbook, calsseurDestination As Workbook, Selection As Variant
Selection = "Baule"
Set classeurSource = Application.Workbooks.Open(F:\...\Fichier matériel liens.xls", , True)
Set classeurDestination=ThisWorkbook
ClasseurSource.Sheets("Stock à l'année et pdt séjour").Cells.Find(What:="Baule",After:=ActiveCell,LookIn:=xlFormulas,LookAt_:=xlPart, SearchOrder:=xlByRows, SeaurchDirection:=xlNext, MatchCase:=_False).Select
Selection.Entirecollumns.Hidden
ClasseurSource.Sheets("Stock à l'année et pdt séjour").Cells.copy classeurDestination.Sheets("111").Range("A1")
classeurSource.close False
End Sub

Voila, j'espère que je me suis bien expliquée...
Hésitez à ma relancer si c'est confu.
Merci d'avance de votre réponse
julielef
PS : Mes fichiers étant trop lourd à envoyer, je vous ai envoyer des photos.
Exo 2 Est le classeurSource, Et Exo Excel est le classeurDestination
 

Pièces jointes

  • exo 2.jpg
    exo 2.jpg
    10.7 KB · Affichages: 102
  • exo excel.jpg
    exo excel.jpg
    56.2 KB · Affichages: 103
Dernière édition:

KenDev

XLDnaute Impliqué
Re : macro effacer colonnes selon critères de recherche

Bonjour Julie,

Sans fichier pas facile mais choisir un mot clé (Selection) comme nom de variable n'est peut-être pas une bonne idée. De plus Selection = "Baule" ne sert pas à grand chose puisque "Baule" est ensuite réutilisé après le What. La sub n'a pas de nom ?

Si il s'agit d'importer une colonne à définir à chaque fois :

VB:
Option Explicit

Sub Choisir_Lieu()
Dim s As String
s = Application.InputBox(prompt:="Lieu ?")
Call Import_Lieu(s)
End Sub

Private Sub Import_Lieu(s As String)
Dim classeurSource As Workbook, classeurDestination As Workbook
Set classeurSource = Application.Workbooks.Open("F:\...\Fichier matériel liens.xls", , True)
Set classeurDestination = ThisWorkbook
classeurSource.Sheets("Stock à l'année et pdt séjour").Cells.Find(What:=s, After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SeaurchDirection:=xlNext, MatchCase:=False).Select
Selection.Entirecollumns.Hidden
classeurSource.Sheets("Stock à l'année et pdt séjour").Cells.Copy classeurDestination.Sheets("111").Range("A1")
classeurSource.Close False
End Sub

Il y aura surement d'autres soucis à voir.. :)

Cordialement

KD
 

KenDev

XLDnaute Impliqué
Re : macro effacer colonnes selon critères de recherche

Je viens de tester le code ci après chez moi et ça à l'air de marcher. J'ai supposé que le nom de lieu (Baule dans l'exemple) se trouvait en ligne 1 et que le but est d'importer la colonne correspondante dans la feuille 111 du classeur de destination en colonne 1. Il faudra bien sûr adapter la ligne contenant le chemin vers ton classeur source. La macro à lancer est Choisir_Lieu. Et il restera à coder le cas ou le lieu entré n'est pas trouvé. Tiens moi au courant. Cordialement

KD


VB:
Option Explicit

Sub Choisir_Lieu()
Dim s As String
s = Application.InputBox(prompt:="Lieu ?")
Call Import_Lieu(s)
End Sub

Private Sub Import_Lieu(s As String)
Dim classeurSource As Workbook
Dim classeurDestination As Workbook
Dim zoneRecherche As Range
Dim feuilleSource As Worksheet
Dim c As Integer
Set classeurSource = Application.Workbooks.Open("C:\Documents and Settings\Nom\Mes documents\forums\julielef\MonDossierSource\Source.xlsx", , True)
Set feuilleSource = classeurSource.Sheets("Stock à l'année et pdt séjour")
Set classeurDestination = ThisWorkbook
Set zoneRecherche = feuilleSource.Rows(1)
c = zoneRecherche.Find(What:=s).Column
feuilleSource.Columns(c).Copy Destination:=classeurDestination.Sheets("111").Columns(1)
classeurSource.Close False
End Sub
 

julielef

XLDnaute Nouveau
Re : macro effacer colonnes selon critères de recherche

bonjour KenDev,

J'ai essayé le code que tu m'a proposer, mais il ne fonctionne pas...
Mais ne t'inqiète pas ça doit surement être de ma faute, car je l'ai recopier telle quel dans VBA. En fait je ne l'ai pas très bien compris (novice).
Du coups j'aurai plusieurs questions :
- Dois-je recopier le code telquel sans rien changer?
- Dois-je recopier les deux "Sub" dans la même fenêtre de code et sinon comment faire?
- Je voudrais rattacher cette maccro à un bouton, qu'est ce que je peux changer pour que ça marche?

merci d'avance pour tes réponses, qui m'aideraient beaucoup...
Julielef
 

KenDev

XLDnaute Impliqué
Re : macro effacer colonnes selon critères de recherche

Bonjour Julie,

Dans un premier temps on va déjà tester le code, il faut que tu adaptes quelques lignes quand même... Oui dans la même fenêtre de code du classeur de destination.

Remplace
VB:
C:\Documents and Settings\Nom\Mes documents\forums\julielef\MonDossierSource\Source.xlsx
par le chemin correspondant à ton classeur source

Vérifie que
VB:
Stock à l'année et pdt séjour
et
VB:
111
correspondent bien à tes noms de feuilles.

Normalement ça doit marcher. Tiens moi au courant. Cordialement

KD
 

julielef

XLDnaute Nouveau
Re : macro effacer colonnes selon critères de recherche

bonjour KenDev,

j'ai essayer le code que tu m'a conseillé, et je n'arrive toujours pas à le faire fonctionner.
Pourrais tu jeter un coup d'oeil à mon dossier???
Je souhaiterais te l'envoyer, mais mes deux dossiers sont trop lourd... (653 Ko et 2.23Mo)
comment faire...
julielef
 

Si...

XLDnaute Barbatruc
Re : macro effacer colonnes selon critères de recherche

Salut
tu as un problème avec cette ligne:
Code:
classeurSource.Sheets("AOUT").Range("A5:F300").Copy classeurDestination.Sheets("aaa").Range("B5")
car la feuille "AOUT" n'existe pas !
Ne serait-ce point une autre feuille que tu veux sélectionner pour la copie ?
 

KenDev

XLDnaute Impliqué
Re : macro effacer colonnes selon critères de recherche

Bonjour Julie, Si...

@Julie : Ci joint le fichier destination en retour. Je n'ai laissé que la feuille 111 pour pouvoir le poster. Les macros sont déplacées dans un module standard. Cordialement

KD

VB:
Option Explicit

Private Sub Import_Lieu_Click()
Dim s As String
s = Application.InputBox(prompt:="Lieu?")
Call Import_Lieu(s)
End Sub

Private Sub Import_Lieu(s As String)
Dim classeurSource As Workbook, classeurDestination As Workbook
Dim zoneRecherche As Range, zoneCollage As Range
Dim feuilleSource As Worksheet
Dim c As Integer
'en cas d'erreur aller à la ligne ErrTrp
On Error GoTo ErrTrp
'ouvrir le classeur source (en lecture seule)
Set classeurSource = Application.Workbooks.Open("F:\CAP EVASION\PROJET INFORMATIQUE\ESSAI\Fichier matériel lien.xls", , True)
' définir la feuille source
Set feuilleSource = classeurSource.Sheets("Stock à l'année et pdt séjour")
' Définir le classeur de destination
Set classeurDestination = ThisWorkbook
' définir la zone ou rechercher le nom du lieu (ici 2ème ligne)
Set zoneRecherche = feuilleSource.Rows(2)
'définir la zone ou coller les données (ici feuille 111, colonne 2)
Set zoneCollage = ThisWorkbook.Worksheets("111").Columns(2)
'numéro de colonne du lieu trouvé
c = zoneRecherche.Find(What:=s).Column
'copier la colonne
feuilleSource.Columns(c).Copy
'faire un collage des valeurs
zoneCollage.PasteSpecial Paste:=xlPasteValues
' vider le presse papier (pour éviter message d'alerte lors de la fermeture du classeur source)
Application.CutCopyMode = False
'Fermer le classeur source
classeurSource.Close False
'quitter la sub ici
Exit Sub
'ligne de gestion d'erreur
ErrTrp:
Select Case Err.Number 'selon n° de l'erreur
    Case 91 'on a cliqué sur Annuler ou le lieu n'a pas été trouvé
        MsgBox "Lieu non trouvé"
    Case Else 'autres cas, afficher n° et description de l'erreur
        MsgBox Err.Number & "=" & Err.Description
End Select
classeurSource.Close False
End Sub
 

Pièces jointes

  • Destination test.xls
    86.5 KB · Affichages: 82

Statistiques des forums

Discussions
312 451
Messages
2 088 519
Membres
103 875
dernier inscrit
Farouka