Besoin d'aide code simple en VBA excel, travail urgent

Résolu
diabolo5495 Messages postés 119 Statut Membre -  
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour tout le monde,

Voici mon problème. Je dois réaliser un petit programme en VBA qui doit faire les instructions suivantes :
- Vérifier dans les cellules d'une colonne si le mot "mot_chercher" apparait
- Si c'est le cas, copier le contenu de la cellule qui se trouve deux colonne devant
- Coller ce contenu dans une cellule vide d'une autre feuille.

Voici le code que j'ai donc utilisé :

Sub test()

Dim i As Double
Dim j As Double
Dim mot_chercher As String

For i = 0 To 5
If Cells(i, 1) = mot_chercher Then Cells(j, 2) = Cells(j, 3)
i = i + 1
j = i
Next

End Sub


Le problème est que je suis totalement novice en VBA, et que je dois réaliser cela pour mon travail. Je fait donc appelle à vous en espérant avoir était compréhensible dans mon explication. ^^

2 réponses

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Effectivement cela ne fonctionne pas du tout comme cela...
    Regarde ce code :
    Sub test()
    Dim RngCherche As Range
    Dim mot_chercher As String, firstAddress As String
    Dim i As Integer
    
    i = 1 'le premier mot trouvé sera placé en A1 de la Feuil3
    mot_chercher = "Fayer"
    Set RngCherche = Sheets("Feuil1").Cells.Find(mot_chercher, lookat:=xlWhole)
    If Not RngCherche Is Nothing Then
        firstAddress = RngCherche.Address
        Sheets("Feuil3").Range("A" & i) = RngCherche.Offset(0, -2).Value
        i = i + 1
        Do
            Set RngCherche = Sheets("Feuil1").Cells.FindNext(RngCherche)
            Sheets("Feuil3").Range("A" & i) = RngCherche.Offset(0, -2).Value
            i = i + 1
        Loop While Not RngCherche Is Nothing And RngCherche.Address <> firstAddress
    Else
         MsgBox "Mot non trouvé."
    End If
    Set RngCherche = Nothing
    End Sub


    !!! ATTENTION!!! Si le mot est trouvé en colonne A et/ou B, la macro plante!
    1
    1. diabolo5495 Messages postés 119 Statut Membre 27
       
      Exactement ce que je chercher, j'ai plus qu'a faire quelques modifications et tout sera parfait ! Merci beaucoup de votre aide, pijaku :)

      Bonne journée
      0
    2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Mais de rien.
      Bonne journée également,
      A+
      0
    3. diabolo5495 Messages postés 119 Statut Membre 27
       
      J'ai de nouveau une question pour vous ! Si je dois réaliser la recherche du mot dans une colonne bien défini, où dois-je le spécifier dans le code :

      Sub Fayer()
      Dim RngCherche As Range
      Dim mot_chercher As String, firstAddress As String
      Dim i As Integer
      
      i = 2 'le premier mot trouvé sera placé en A1 de la Feuil3
      mot_chercher = "*" + "Fayer" + "*"
      Set RngCherche = Sheets("Pilotage").Cells.Find(mot_chercher, lookat:=xlWhole)
      If Not RngCherche Is Nothing Then
          firstAddress = RngCherche.Address
          Sheets("Fayer").Range("B" & i) = RngCherche.Offset(0, -2).Value
          i = i + 1
          Do
              Set RngCherche = Sheets("Pilotage").Cells.FindNext(RngCherche)
              Sheets("Fayer").Range("B" & i) = RngCherche.Offset(0, -2).Value
              i = i + 1
          Loop While Not RngCherche Is Nothing And RngCherche.Address <> firstAddress
      Else
           MsgBox "Pas de tâche pour" + mot_chercher
      End If
      Set RngCherche = Nothing
      End Sub


      Ne serait-ce pas ici :
      Set RngCherche = Sheets("Pilotage").Cells.Find(mot_chercher, lookat:=xlWhole)


      Cordialement
      0
    4. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      C'est tout à fait ça. Exemple d'une recherche uniquement en colonne E (5) :
      Set RngCherche = Sheets("Pilotage").Columns(5).Cells.Find(mot_chercher, lookat:=xlWhole)
      0
    5. diabolo5495 Messages postés 119 Statut Membre 27
       
      Merci bien :) bonne journée
      0
  2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,

    Pour chercher un mot dans une colonne, tu peux utiliser la méthode Find. Celle-ci va te renvoyer l'objet Range ou est situé ton mot, ou pas.
    Comme ceci :
    Sub test()
    Dim RngCherche As Range
    Dim mot_chercher As String
    
    mot_chercher = "MonMot"
    Set RngCherche = Sheets("Feuil1").Columns(5).Cells.Find(mot_chercher, lookat:=xlwhole)
    If Not RngCherche Is Nothing Then
        'traitement si le mot est trouvé
        Sheets("Feuil3").Range("A11") = RngCherche.Offset(0, -2).Value
    Else
        'traitement si le mot n'est pas trouvé
        MsgBox "Mot non trouvé."
    End If
    Set RngCherche = Nothing
    End Sub


    Complément d'information
    0
    1. diabolo5495 Messages postés 119 Statut Membre 27
       
      Merci pour votre réponse, votre code correspond parfaitement à ce que je cherchais. Cependant, il me reste un problème que je n'avais pas résolu. Je dois réaliser cette action sur un tableau complet. Pour être plus précis, je dois dans un tableau trouvé le "MonMot" et à chaque fois qu'il apparait, copier donc la fameuse cellule dans un autre tableau. Le fait est que j'ai l'impression que l'action ne réalise qu'une seule fois. Faudrait-il utiliser une boucle ?
      0
    2. diabolo5495 Messages postés 119 Statut Membre 27
       
      J'ai réaliser les modifications :

      Sub test()
      
      Dim RngCherche As Range
      Dim mot_chercher As String
      
      mot_chercher = "Fayer"
      Set RngCherche = Sheets("Feuil1").Columns(5).Cells.Find(mot_chercher, lookat:=xlWhole)
      If Not RngCherche Is Nothing Then
          Sheets("Feuil3").Range("A1") = RngCherche.Offset(0, -2).Value
          Set RngCherche = .FindNext(RngCherche)
      Else
           MsgBox "Mot non trouvé."
      End If
      Set RngCherche = Nothing
      
      End Sub


      Cependant, il m'affiche une erreur de compilation. Aurais-je oublier quelque chose ?
      0