VBA EXCEL-combiner fonction VLOOKUP et IF

anana49 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention   -  
anana49 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je souhaiterais rechercher une valeur déterminée( Etape : Tour) dans ma première colonne "A" et à partir de cette valeur, copier une valeur définie (Tour) sur la 1ère cellule vide qu'il rencontre dans la même colonne. et ainsi de suite : recherche valeur déterminée(Etape : Port)=> cellule vide=>copier valeur définie (Port)...

Ci dessous mon code qui ne fonctionne pas mais je ne sais pas adapter une formule Recherchev() avec formule If.

ActiveCell.FormulaR1C1 = _
        "=IF(VLOOKUP(""Etape : Tour"",Rapports!A1,1,FALSE)<>"""",Sheets("Rapports").Range("A3").End(xlDown).Offset(1, 0) = "Tour")" 
     End if


Merci beaucoup pour votre aide.

5 réponses

  1. M-12 Messages postés 1349 Statut Membre 285
     
    Bonjour

    Cette formule
    ActiveCell.FormulaR1C1 = _
    "=IF(VLOOKUP(""Etape : Tour"",Rapports!A1,1,FALSE)<>"""",Sheets("Rapports").Range("A3").End(xlDown).Offset(1, 0) = "Tour")" 

    est tirée d'une macro enregistrée modifiée
    donc le END IF à la fin est inutile

    Mais la formule ne fonctionnera pas vu comme elle est structurée
    0
  2. anana49 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
     
    Bonjour M-12,

    Oui je sais mais il faut que je combine 2 fonctions et je ne sais pas.. d'où mon problème..
    J'ai refait un bout de code mais je souhaite que s'il trouve la valeur définie ( "Etape : Tour") dans la colonne A, il ajoute à la 1ère cellule vide une autre valeur ( "Tour") et toujours à partir de la valeur définie.
    ensuite il faut rechercher une autre valeur définie ("Etape : Port") et à partir de cette valeur, récupérer la cellule vide et ajouter une autre valeur ("Port") etc....

    Merci de m'aider

    Sub test6()
    
     i = 3
       
            With Sheets("TEST2")
                
                If Sheets("TEST2").Cells(i, 1).Value = "Etape : Tour" Then
                   .Cells(i, "A").End(xlDown).Offset(1, 0).Value = "Tour"
                End If
                If Sheets("TEST2").Cells(i, 1).Value = "Etape : Port" Then
                   .Cells(i, "A").End(xlDown).Offset(1, 0).Value = "Port"
                End If
                
             End With
                
               
    End Sub
    0
    1. M-12 Messages postés 1349 Statut Membre 285
       
      Re,
      Un p’tit classeur avec 10/15 données serait mieux pour régler le soucis :yum:

      Tu vas dans https://www.cjoint.com/
      Tu cliques sur "PARCOURIR" pour sélectionner ton fichier
      Clic le bouton "CREER LE LIEN"
      Clic droit quand le lien est créé "COPIER LE LIEN"
      Sur ton message Clic droit "Coller".
      0
  3. anana49 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
     
    https://www.cjoint.com/c/HIlqy3JMtJ0

    Voici mon fichier, encore merci..
    0
    1. M-12 Messages postés 1349 Statut Membre 285
       
      Bonjour,

      Teste ce code
      Sub test6()
        Dim i%, Dl%
        
        Dl = Range("A" & Rows.Count).End(xlUp).Row
          For i = 3 To Dl
            With Sheets("TEST2")
              If Sheets("TEST2").Cells(i, 1).Value = "Etape : Tour" Then
                .Cells(i, "A").End(xlDown).Offset(1, 0).Value = "Tour"
              ElseIf Sheets("TEST2").Cells(i, 1).Value = "Etape : Port" Then
                .Cells(i, "A").End(xlDown).Offset(1, 0).Value = "Port"
              ElseIf Sheets("TEST2").Cells(i, 1).Value = "Etape : Château" Then
                .Cells(i, "A").End(xlDown).Offset(1, 0).Value = "Château"
              End If
            End With
          Next i
      End Sub
      0
  4. anana49 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
     
    Bonjour,

    Un grand merci pour ton aide M-12, le code fonctionne parfaitement.
    Par contre, j'avais oublié une étape et en relançant le code, il est revenu au début "Etape : Tour" et a indiqué "Tour" dans la cellule vide or c'était une autre étape (Etape : Ecole).
    Est-il possible d'indiquer une condition supplémentaire ?
    Comme si : il ne trouve pas l'étape que la cellule reste vide ?
    Si pas de solution, je ferais en sorte de ne pas oublier... A bientôt..
    0
    1. M-12 Messages postés 1349 Statut Membre 285
       
      Re,

      Tu peux ajouter comme ceci
      Sub test6()
        Dim i%, Dl%
        
        Dl = Range("A" & Rows.Count).End(xlUp).Row
          For i = 3 To Dl
            With Sheets("TEST2")
              If Sheets("TEST2").Cells(i, 1).Value = "Etape : Tour" Then
                .Cells(i, "A").End(xlDown).Offset(1, 0).Value = "Tour"
              ElseIf Sheets("TEST2").Cells(i, 1).Value = "Etape : Port" Then
                .Cells(i, "A").End(xlDown).Offset(1, 0).Value = "Port"
              ElseIf Sheets("TEST2").Cells(i, 1).Value = "Etape : Château" Then
                .Cells(i, "A").End(xlDown).Offset(1, 0).Value = "Château"
              ElseIf Sheets("TEST2").Cells(i, 1).Value = "Etape : Ecole" Then
                .Cells(i, "A").End(xlDown).Offset(1, 0).Value = "Ecole"
              End If
            End With
          Next i
      End Sub
      


      Mais si des étapes se rajoute au fur et à mesure, il faut faire autrement et créer un petit tableau contenant les différentes etapes et faire une double boucle

      EDIT : Ajout des balises de code (la coloration syntaxique).
      Explications disponibles ici : ICI

      Merci d'y penser dans tes prochains messages.
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. anana49 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
     
    Comment dois-je indiquer que je suis très satisfaite sur le forum ?
    0