XL 2010 Copier des ligne grace à un mot clé d'une feuille à une autre

Micka52

XLDnaute Nouveau
Bonjour à tous,

Je ne suis pas un habitué de excel mais en cherchant on peu ce débrouiller, mais la je calle complètement je n'arrive pas à adapter ce que je peux trouver sur le forum pour mon cas. Je ne comprends pas tous le language vba.

Je vous explique ce que je souhaiterais arriver à faire.
_En cliquant, dans la page "Suivi Intervention" sur le bouton "Recherche par FI" un userform s'ouvre, ensuite que l'on puise noté le mot-clé. (plus ou moins réaliser)
_Je souhaiterais copier toutes les lignes qui ce trouvent dans le tableau sur la feuille "Fiche Sortie" qui contienne le mot-clé rechercher.
_Le mot-clé se trouve uniquement dans la colonne D.
_Une fois là ou les lignes trouvées je souhaiterais quelles soit copier dans le tableau qui est dans la feuille "Suivi Intervention"

J'espère avoir été claire dans mon explication.

Merci d'avance pour vos réponses et votre aide !
 

Pièces jointes

  • Projet Magasin 2.0.xlsm
    63.7 KB · Affichages: 18

danielco

XLDnaute Accro
J'ai changé les propriétés du textbox :
MultiLine à True
EnterKeyBehaviour à True
Ainsi, tu peux entrer plusieurs mots-clés en appuyant sur la touche Entrée.

Voici le code du bouton "Recherche" :

VB:
Private Sub CommandButton1_Click()
Dim dl As Integer
Dim MotCle
Dim I As Long
Dim C As Range
Dim Plage As Range
Dim Ligne As Long
  'On définit les mots clés
  MotCle = Split(Me.txt_fi.Text, vbCrLf)
  With Sheets("Fiche Sortie")
    Set Plage = .Range("D6", .Cells(.Rows.Count, 4).End(xlUp))
  End With
  Sheets("Suivi Intervention").Range("B6:I6").Resize(10000).ClearContents
  Ligne = 5
  For I = 0 To UBound(MotCle)
    With Sheets("Suivi Intervention")
      For Each C In Plage
        If C.Value = MotCle(I) Then
          Ligne = Ligne + 1
          .Cells(Ligne, 2).Value = C.Value
          .Cells(Ligne, 3).Value = C.Offset(, -2).Value
          .Cells(Ligne, 4).Resize(, 6).Value = C.Offset(, 1).Resize(, 6).Value
        End If
      Next C
    End With
  Next I
End Sub
Si tu ne comprends pas le code, dis-le.

Daniel
 

Pièces jointes

  • Micka52 Projet Magasin 2.0.xlsm
    58.9 KB · Affichages: 13

Micka52

XLDnaute Nouveau
Bonjour Daniel,

Après plusieurs lectures de ton code j'arrive à comprendre une grande partie.
J'ai juste une question, je ne comprends pas pourquoi là dans la date copier le mois et le jour sont-ils inversés ?
Tu as fait un super travail merci beaucoup.

Micka
 

danielco

XLDnaute Accro
Bonjour,

Effectivement. les dates de la feuille Fiche Sortie sont au format texte et les cellules de la feuille Suivi Intervention sont au format standard. Excel fait (mal) la conversion. On peut au choix changer le format de la feuille d'origine ou de la feuille de destination ou modifier la macro. Dis ce que tu préfères.

Daniel
 

Micka52

XLDnaute Nouveau
Pour la date j'ai essayé de changer le format dans la feuille d'origine comme dans la feuille destinataire mais rien n'y fait.
Je pense qu'il faudrait modifier la macro.
J'ai trouvé ce poste mais comme on copie une plage de cellule je vois pas ou modifier la macro.

Cette partie n'est pas très claire pour moi :
For I = 0 To UBound(MotCle)
With Sheets("Suivi Intervention")
For Each C In Plage
If C.Value = MotCle(I) Then

Encore une fois ça déplace de long mais compétence !
Merci pour ton aide !

Micka
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re,

Pourquoi tu as du changer l'écriture de la macro de add_sortie ?

C'était juste pour moi - pour essayer de ne l'écrire qu'avec la notion de tableau structuré( pour ne pas perdre la main). N'en tiens pas compte.

Pour la macro contenue dans add_fi, elle est commentée dans le fichier joint (juste modifié deux lignes de code pour plus de propreté d'écriture)

nota : j'ai modifié les commentaires du fichier afin que ces derniers soient compréhensibles et bien orthographiés!
 

Pièces jointes

  • Micka52- Projet Magasin- v1a (comment).xlsm
    64.3 KB · Affichages: 8
Dernière édition:

danielco

XLDnaute Accro
Pour continuer avec mon code, remplace :

VB:
.Cells(Ligne, 3).Value = C.Offset(, -2).Value
par
Code:
.Cells(Ligne, 3).Value = C.Offset(, -2).Value2
Pour la date j'ai essayé de changer le format dans la feuille d'origine comme dans la feuille destinataire mais rien n'y fait.
Je pense qu'il faudrait modifier la macro.
J'ai trouvé ce poste mais comme on copie une plage de cellule je vois pas ou modifier la macro.

Cette partie n'est pas très claire pour moi :
For I = 0 To UBound(MotCle)
With Sheets("Suivi Intervention")
For Each C In Plage
If C.Value = MotCle(I) Then

Encore une fois ça déplace de long mais compétence !
Merci pour ton aide !

Micka
Je vais te poster des explications. Il me faut un peu de temps pour les rédiger.

Daniel
 

danielco

XLDnaute Accro
Mettons que tu veuilles faire une recherche sur les mots clé "19BCT00014" et "19BCT00016". Tu entres le premier mot clé, tu appuies sur la touche Entrée, tu entres le second et tu cliques sur le bouton "Recherche". Chaque mot clé est stocké dans la variable tableau "MotCle" :

Annotation 2019-08-12 101926.png


"UBound(MotCle)" représente le plus grand indice de la table, soit "1".
VB:
For I = 0 To UBound(MotCle)
initie donc une boucle sur les valeurs MotCle(0) et MotCle(1).
Code:
With Sheets("Suivi Intervention")
est une syntaxe qui permet d'éviter les répétitions. Ainsi, au lieu d'écrire :
Code:
         Sheets("Suivi Intervention") .Cells(Ligne, 2).Value = C.Value2
         Sheets("Suivi Intervention") .Cells(Ligne, 3).Value = C.Offset(, -2).Value2
        Sheets("Suivi Intervention")  .Cells(Ligne, 4).Resize(, 6).Value = C.Offset(, 1).Resize(, 6).Value
Il suffit d'écrire :
Code:
    With Sheets("Suivi Intervention")
    .Cells(Ligne, 2).Value = C.Value2
    .Cells(Ligne, 3).Value = C.Offset(, -2).Value2
    .Cells(Ligne, 4).Resize(, 6).Value = C.Offset(, 1).Resize(, 6).Value
Jusqu'à l'instruction "End With".
J'ai défini "Plage" comme la plage de cellules de la colonne D de la feuille "Fiche Sortie" (de D6 à D22).
For Each C In Plage
Code:
For Each C In Plage
initie donc une boucle sur chaque cellule de cette plage. Et
Code:
If C.Value = MotCle(I) Then
teste si la valeur de cette cellule est égale au mot clé.

Si tu as des questions supplémentaires, n'hésite pas.

Daniel
 

Discussions similaires

Statistiques des forums

Discussions
312 113
Messages
2 085 422
Membres
102 886
dernier inscrit
eurlece