Si mot trouver alors
Bonjour,
j'ai une macro, mais je ne sait pas comment faire pour qu'il me copie ma colonne A de la feuille 2 dans différente colonne autant de fois qu'il me trouve le mot "disque" dans la feuille 1
Pour mon exemple :
Dans la feuille 1 en colonne A, j'ai soit : format, disque, couronnes....
Dans la feuille2 en colonne A j'ai des paramètres
Mon but est celui-ci :
je cherche le mot disque dans la feuille1 colonne A, lorsque je tombe sur le mot "disque", je doit recopier la colonne A de la feuille2 dans la colonne C de la feuille2, et j'aimerais faire sa ainsi de suite pour chaque mot "disque" trouvé.
je vous joint mon fichier excel pour que vous compreniez.
Cordialement.
Merci par avance pour votre aide
Bonjour Belinda, bonjour le forum,
J'avoue que je n'ai pas compris grand chose à tes explications, ni a ton code d'ailleurs. Alors je me suis basé sur ton exemple...
Essaie comme ça :
Sub Cherche_Copie_Ligne()
Dim F1 As Worksheet 'déclare la variable F1 (onglet Feuil1)
Dim F2 As Worksheet 'déclare la variable F2 (onglet Feuil2)
Dim BE As Variant 'déclare la variable BE (Boîte d'Entrée)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Integer 'déclare la variable I (Incrément)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
Application.ScreenUpdating = False 'masque les raffraîchissements d'écran
Set F1 = Worksheets("Feuil1") 'définit l'onget F1
Set F2 = Worksheets("Feuil2") 'définit l'onget F2
BE = Application.InputBox("Texte à trouver :", "RECHERCHER", Type:=2) 'définit lla boîte d'entrée BE
If BE = False Or BE = "" Then Exit Sub 'si bouton "Annuler" ou non renseignée, sort de la procédure
F2.Rows(1).Clear 'efface la ligne 1 de l'onglet F2
DL = F1.Cells(Application.Rows.Count, "A").End(xlUp).Row 'définit la derniere ligne éditée DL de la colonne A de l'onglet F2
TV = F1.Range("A1:A" & DL) 'définit le tableau des valeurs TV
For I = 1 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV
If InStr(1, TV(I, 1), BE, vbTextCompare) <> 0 Then 'condition : si le texte de la boîte d'entrée BE est contenu dans la donnée ligne I colonne 1 de TV
''definit la cellule de destination DEST (D1 si D1 est vide, sinon la première cellule vide de la ligne 1 de l'onglet F2)
If F2.Range("D1").Value = "" Then Set DEST = F2.Range("D1") Else Set DEST = F2.Cells(1, Application.Columns.Count).End(xlToLeft).Offset(0, 1)
DEST.Value = TV(I, 1) 'renvoie dans DEST la valeur de la donnée ligne I colonne 1 de TV
End If 'fin de la condition
Next I 'prochaine ligne de la boucle
F2.Activate 'active l'onglet F2
Application.ScreenUpdating = True 'affiche les raffraîchissements d'écran
End SubBonjour Thauthème,
En fait j'aimerais que lorsque le mot" disque" dans la feuille1 est trouvé ( ici dans mon exemple on le trouve 5 fois),
il faut donc que je retrouve ma colonne A de ma feuille 2 qui soit recopié elle aussi 5 fois ( car il y a 5 fois le mot disque)
Voir fichier joint.
Re,
Le code adapté :
Sub Cherche_Copie_Ligne()
Dim F1 As Worksheet 'déclare la variable F1 (onglet Feuil1)
Dim F2 As Worksheet 'déclare la variable F2 (onglet Feuil2)
Dim BE As Variant 'déclare la variable BE (Boîte d'Entrée)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Integer 'déclare la variable I (Incrément)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
Application.ScreenUpdating = False 'masque les raffraîchissements d'écran
Set F1 = Worksheets("Feuil1") 'définit l'onget F1
Set F2 = Worksheets("Feuil2") 'définit l'onget F2
BE = Application.InputBox("Texte à trouver :", "RECHERCHER", Type:=2) 'définit lla boîte d'entrée BE
If BE = False Or BE = "" Then Exit Sub 'si bouton "Annuler" ou non renseignée, sort de la procédure
F2.Range(F2.Cells(1, "B"), F2.Cells(1, Application.Columns.Count)).EntireColumn.Clear 'efface les anciennes valeurs
DL = F1.Cells(Application.Rows.Count, "A").End(xlUp).Row 'définit la derniere ligne éditée DL de la colonne A de l'onglet F2
TV = F1.Range("A1:A" & DL) 'définit le tableau des valeurs TV
For I = 1 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV
If InStr(1, TV(I, 1), BE, vbTextCompare) <> 0 Then 'condition : si le texte de la boîte d'entrée BE est contenu dans la donnée ligne I colonne 1 de TV
''definit la cellule de destination DEST (D1 si D1 est vide, sinon la première cellule vide de la ligne 1 de l'onglet F2)
If F2.Range("C1").Value = "" Then Set DEST = F2.Range("C1") Else Set DEST = F2.Cells(1, Application.Columns.Count).End(xlToLeft).Offset(0, 2)
F2.Columns(1).Copy DEST 'copie la colonne 1 (=A) de l'onglet F1 et la colle dans dest
DEST.Value = TV(I, 1) 'renvoie dans DEST la valeur de la donnée ligne I colonne 1 de TV
End If 'fin de la condition
Next I 'prochaine ligne de la boucle
F2.Activate 'active l'onglet F2
Application.ScreenUpdating = True 'affiche les raffraîchissements d'écran
End SubMerci, je regarderais sa demain car je ne suis plus au boulot.
Cordialement.
Bonjour ThauThème,
Je viens d'essayer ton code et c'est ce qu'il me fallait.
Merci infiniment.
Re,
Si tu veux une réponse rapide, prend pour habitude de fournir un exemple qui correspond à tes besoins. Souvent mieux qu'un long discours, le fichier avec, dans un onglet, ce que tu as avant et, dans un autre, ce que tu désires après...
Bonne continuation.
D'accord pas de soucis.
Merci en tout cas d'avoir prit de ton temps pour m'aider.
Cordialement.