VBA Copie Colle sous condition

Bonjour à tous,

Je débute en VBA et bloque carrément sur la macro à réaliser.

J'ai un onglet "DEPART" qui comporte 13 colonnes et 604 lignes

Voici ce que je cherche à faire

  • Si ligne 1 contient en cellule (1;I) ou en cellule (1;L) le mot TOTO alors sélectionner l'intégralité de la ligne 1 et la copier dans l'onglet TOTO (il s'agit d'un copier/coller et pas d'un couper/coller)
  • Et répéter la manip sur les 604 lignes du fichier de départ

Le truc c'est que c'est bien contient ou non égal comme condition....

Merci pour votre aide, car je bloque dessus depuis hier, et je désespère

bonjour,

regarde du coté de InStr

exemple :

Sub test()
If InStr(1, ActiveCell, "TOTO") Then MsgBox "Ok"
End Sub

A+

Euh, je ne comprends pas. Je parle pas bien VBA... J'arrive à me débrouiller un peu parfois avec bcp bcp d'aide, mais sur cette requete je n'ai pas trouve de solutions miracle qui marche.

J'ai un code, mais il ne me sélectionne pas la ou les lignes désirées. Que faudrait-il changer pour que ca marche ??? Un grand merci par avance car vous ne vous imaginez meme pas comment ca va m'aider... Car j'ai pas que TOTO à tester, j'ai aussi TATA, TITI, TUTU, et tous leurs frères et soeurs

Ma condition est : si dans le fichier DEPART, la ligne 1 contient le mot TOTO en cellule (ligne1/colonneI) ou en cellule (ligne1/colonne M) alors l'ensemble de la ligne 1 est copiée collée dans l'onglet TOTO...

J'imagine que dans l'onglet TOTO, j'aurais à la fin des lignes vides aussi

Dim Lig As Long

Dim Col As String

Dim NbrLig As Long

Dim NumLig As Long

Sheets("TOTO").Activate ' feuille de destination

Col = "i" ' colonne données non vides à tester'

NumLig = 0 'alors là ca doit etre le N° de la 1er ligne de données en comptant la ligne 1 = 0 .... ? '

With Sheets("DEPART") ' feuille source'

NbrLig = .Cells(65536, Col).End(xlUp).Row

For Lig = 0 To NbrLig 'n° de la 1ere ligne de données'

If .Cells(Lig, Col).Value <> "" Then

.Cells(Lig, Col).EntireRow.Copy

NumLig = NumLig + 1

Sheets("TOTO").Cells(NumLig, 1).Insert Shift:=xlDown

'ici pour insérer ou .Paste pour coller'

End If

Next

End With

bonsoir,

Sur ce forum l'usage est de fournir le classeur KIVABIEN pour tester...

Il faudra préciser également ou on récupère TITI, TATA... en bref la liste des noms de toute la famille !

A+

Voila un fichier type. Le mot Toto serait à rechercher dans les colonnes D et E, mais dans mon vrai fichier (car tu vas t'en douter, c'est pas celui là) il s'agira de colonnes discontinues.

Un grand merci

Si la ligne 1 contient en cellule 1D ou 1E le mot Toto, alors la ligne entiere est copiée dansl'onglet Toto

Si la ligne 1 contient en cellule 1D ou 1E le mot chat, alors la ligne entière est copiée dans l'onglet Chat

En tout 600 lignes à faire tourner, et une famille de 50 à 100 mots à tester (chaque trimestre)

Et des lignes qui peuvent etre copiées dans différents onglets car contenant différents mots clés

Merci

Caroline

61essai1.xlsx (10.47 Ko)

Bonjour,

Tu ne précises pas ou on trouve la liste des différents mots clefs...

Peut-on considérer qu'il s'agit de la liste des onglets ?

En l'absence de cette précision la macro suivante travaille sur la liste des onglets existants

Sub galopin()
Dim i%, k%, kk%, iR%, crit$       '% = As integer      $ = As string
Dim a, b              'a et b sont des tableaux virtuels...
With Sheets("DEPART")            'feuille source
   a = .Range("D1:D7")           'Plage à analyser
   b = .Range("E1:E7")           'Autre Plage à analyser
   'Le tableau virtuel contient maintenant les données à analyser
   kk = UBound(a)   'kk est le nombre de lignes de la plage à analyser

   For i = 2 To Worksheets.Count 'Pour chaque feuille du classeur autre que "DEPART"
      iR = 1                     'on initialise le compteur de ligne
      crit = Worksheets(i).Name  'Le mot recherché est le nom de la feuille
      For k = 1 To kk            'On examine chaque ligne du tableau virtuel
         'Si l'un ou l'autre des tableaux comprend le "crit"
         If InStr(1, a(k, 1), crit, 1) Or InStr(1, b(k, 1), crit, 1) Then
            .Rows(k).Copy Worksheets(i).Cells(iR, 1)     'alors on copie la ligne correspondante
            iR = iR + 1          'et on incrémente le compteur de ligne
         End If
      Next
   Next
End With
End Sub

A+

Ca marche. C'est géant ! Merci

j'ai une question complémentaire. Dans ma vraie requete ce sont des verbes et des séquences de mot que j'aurais à chercher et non pas Toto par exemple.

Il faudra que je prenne les lignes contenant le verbe étudier dans ma colonne commentaire (la colonne G).

Si dans la plage G sélectionnée, il est noté : "votre role est d'étudier...", alors est ce que "d'étudier" sera pris en compte ou est ce qu'il faut au préalable que je sépare le "d'" et "étudier" ?

Autre exemple, est ce que je peux faire une recherche sur "étud", pour prendre en compte toutes les lignes contenant études, étudier, étude.... dans la colonne commentaire ?

Merci davance, car je bloque aussi sur ca ...

Bonjour,

est ce que je peux faire une recherche sur "étud", pour prendre en compte toutes les lignes contenant études, étudier, étude....

Oui.

Il te suffit de faire une liste de tout ce que tu veux récupérer. Ensuite (en petit nègre...)

   For "chaque mot dans ma liste..."
      For k = 1 To kk            'On examine chaque ligne du tableau virtuel
         If Instr("Utiliser un Dictionnary ou un Array") Then      'Faire la recherche dans la bonne colonne.
          .Rows(k).Copy    '=> Préciser la cible
         End If
      End For
   End for...

A+

merci de ta réponse

Mais je la comprends pas.... oll:

Je ne comprends pas non plus comment je relie les 2 macro ?

J'ai remis un fichier Excel plus proche de ce que je vais devoir traiter, avec en rouge, les éléments que je dois insérer dans ma requete.

Est-ce possible de m'aider à y voir plus clair ?

Un grand Merci encore

42testmacro2.xlsx (12.15 Ko)

bonjour,

ça c'est juste pas possible.

Excel ne connaît pas dans le scrabble et dérivés ne veut strictement rien dire pour lui...

Tu dois créer une table contenant toutes les chaines de recherche et leurs feuilles cibles

vend => récupérera "vendu, vendeur, vendeurs, vendeuses, mais aussi vendredi ou revendeur !

vente =>

Optim =>

ça doit ressembler à ça :

liste

une ligne par argument et si nécessaire plusieurs lignes par feuille cible.

Attention : plus l'argument est court plus tu risque de récolter des indésirables mais trop long tu risque d'exclure des mots pertinents...

Merci de fournir un modèle avec une liste en place.

La liste doit commencer sur la première ligne et occuper 2 colonnes consécutives.

Idéalement la liste peut se trouver sur une feuille différente. Les feuilles cibles n'ont pas besoin d'être déjà créées. La macro créera des cibles en tant que de besoin.

A+

Merci de ton aide

Voici un extrait de la liste.

Comment je fais après ?

Pour créer des onglets cibles directement à partir de cette liste ?

Et pour reboucler sur ta 1e macro ?

Que de questions !!! Faudrait que je me forme...

Bon we

8liste-type.xlsx (9.57 Ko)
11liste-type.xlsx (9.57 Ko)

bonjour,

Voir le fichier joint.

Il te suffira de créer la première feuille "ListMot" dans ton classeur.

Créer la plage Liste dans ton Gestionnaire de Fichier

Copier les 2 macros dans ton classeur

Puis lancer la macro "galopin"

A+

39caro-vg.xlsm (31.47 Ko)

Un grand merci Galopin,

Je testerai tout ca demain au bureau, en espérant ne pas faire sauter les serveurs

Bon we

merci bcp galopin. J'ai gagné un temps fou hier...

j'ai encore une question. Y A t il un moyen via vba de compter le nombre d'occurence de mots ? regarder dans liste de mots utilisés pour créer mes onglets, leur nombre de fois où ils apparaissent dans mon fichier de départ (chaque ligne ne pouvant etre comptée qu'une fois) et d'afficher ce résultat dans un nouvel onglet resume?

carovba

19caro-vg2.xlsm (23.59 Ko)

bonjour,

C'est un petit peu flou tes explications...

Dans la macro actuelle chaque ligne de "DEPART" peut être ventilée plusieurs fois soit dans la même cible, soit dans des cibles différentes, parfois même en doublons... Tout dépend de la pertinence des critères de la liste.

Exemple (imaginaire...) On peut très aisément imaginer qu'une ligne de départ soit ventilée dans "Vente" et dans "Informat"

voire même en doublon dans une même cible... si 2 mots de liste renvoient vers le même onglet.

-Faut-il interdire la ventilation vers plusieurs onglets ou faut-il interdire les doublons vers une même cible ?

-Pour le comptage faut-il compter seulement le nombre de transfert effectués pour chaque mot de liste ?

C'est à dire que si une ligne est déjà compté pour un transfert en "Vente" on ne pourra plus la compter si dans la description on rencontre un autre mot clef.

-De plus je viens de me rendre compte que la macro précédente n'était pas géniale. Il faut que je recommence tout car certains mots de "liste" ne sont pas traités...

-Faut patienter encore un peu...

A+

Merci galopin, j'ai trouvé une alternative :=)

Bonsoir,

ça y est je viens de revoir un peu TOUSSA...

A+

39caro-vg3.xlsm (25.68 Ko)
Rechercher des sujets similaires à "vba copie colle condition"