Copier les valeurs de colonnes correspondantes aux lignes "vrai"

Styla27 Messages postés 44 Date d'inscription   Statut Membre Dernière intervention   -  
Styla27 Messages postés 44 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour et merci d'avance pour votre aide.

Nous avons les colonnes A, B, C dont plusieurs lignes.

Je veux faire ce qui suit dans une cellule (H5 par exemple) :
Si plusieurs lignes de la colonne C contient le mot « oui », copier les valeurs des colonnes A et B des lignes correspondantes. (mon tableau possède beaucoup de colonnes, ceci est un exemple)

A B C
1 Test1 Test2 Oui
2 Test3 Test4 Oui
3 Test5 Test6 Non
4 Test6 Test7 Oui


Résultat dans H5 : Test1 Test2 Test3 Test4 Test6 Test7

Je ne veux pas utiliser cette fonction :
=SI(C1="Oui";A1" "B1;" ")... 

Car il y a plus d’une centaine de lignes !

1 réponse

  1. Theo.R Messages postés 585 Statut Membre 31
     
    En VBA :
    Sub test()

    Dim DernLigne as Long
    DernLigne = Range("A" & Rows.Count).End(xlUp).Row

    For i = 1 to DernLigne
    If Cells(i,3).value ="Oui" Then
    If Range("H5").value = "" Then
    Range("H5").value = Cells(i,1).value & " " & Cells(i,2).value
    Else
    Range("H5").value = Range("H5").value & " " & Cells(i,1).value & " " & Cells(i,2).value
    End If
    End If
    Next i

    End Sub
    1
    1. Styla27 Messages postés 44 Date d'inscription   Statut Membre Dernière intervention   1
       
      Merci 10000 fois pour votre aide et votre réactivité Theo !
      Mais je n'arrive pas à mettre exécution ma formule avec le code VBA que j'ai adapté :

      Sub RemplirCom()
      Dim DernLigne As Long
      DernLigne = Range("A" & Rows.Count).End(xlUp).Row

      For i = 1 To DernLigne
      If Sheets("PRI").Cells(i, 13).Value = "Oui" Then
      If Sheets("Presentation2").Range("G32").Value = "" Then
      Sheets("Presentation2").Range("G32").Value = Sheets("PRI").Cells(i, 7).Value & ": " & Sheets("PRI").Cells(i, 10).Value
      Else
      Sheets("Presentation2").Range("G32").Value = Sheets("Presentation2").Range("G32").Value & " " & Sheets("PRI").Cells(i, 7).Value & " " & Sheets("PRI").Cells(i, 10).Value
      End If
      End If
      Next i
      End Sub


      Juste pour être sûre :
      DernLigne = Range("A" & Rows.Count).End(xlUp).Row

      Est-ce qu'il faut que j'ai dans la colonne A, tous les chiffres dans l'ordre de 1 à... selon les lignes ? Car à la base, j'avais mis les chiffres pour l'exemple des lignes Excel. En tout cas, j'ai essayé, et ça ne arche tout de même pas.

      Merci encore de votre aide. C'est pour un projet très important !
      0
    2. Theo.R Messages postés 585 Statut Membre 31
       
      Deux choses pour Dernligne :
      1) ajoutez la référence de la feuille comme vous l'avez fait pour le reste du code :
      DernLigne = Sheets([votrefeuille]).Range("A" & Rows.Count).End(xlUp).Row

      2) cette variable permet d'obtenir le nombre de lignes à traiter, je me suis basé sur la colonne A d'après votre exemple mais en effet le but est de prendre une colonne où chaque ligne est renseignée sans exception si la ligne est à traiter.

      Sinon, vous avez oublié de préciser la feuille pour la ligne
        If Cells(i, 13).Value = "Oui" Then
      0
    3. Styla27 Messages postés 44 Date d'inscription   Statut Membre Dernière intervention   1
       
      J'étais tellement découragée, merci tellement pour votre réactivité. C'est la première fois que je touche au VBA... :) je fais pas mal de recherche...
      Je ne veux pas trop abusée mais vous me sauvez la mise.

      Alors j'ai fait :


      Sub RemplirCom()
      Dim DernLigne As Long
      DernLigne = Sheets([PRI]).Range("A" & Rows.Count).End(xlUp).Row

      For i = 1 To DernLigne
      If Sheets("PRI").Cells(i, 14).Value = "Oui" Then
      If Sheets("Presentation2").Range("G32").Value = "" Then
      Sheets("Presentation2").Range("G32").Value = Sheets("PRI").Cells(i, 8).Value & ": " & Sheets("PRI").Cells(i, 11).Value
      Else
      Sheets("Presentation2").Range("G32").Value = Sheets("Presentation2").Range("G32").Value & " " & Sheets("PRI").Cells(i, 8).Value & " " & Sheets("PRI").Cells(i, 11).Value
      End If
      End If
      Next i
      End Sub



      Mais Excel me dit qu'il y a une erreur :
      Erreur d'exécution " -2147352571 (80020005)) " :
      L'élément portant ce nom est introuvable.

      et me montre après débogage cette ligne en surbrillance :

      DernLigne = Sheets([PRI]).Range("A" & Rows.Count).End(xlUp).Row


      Du coup, est-ce que c'est Range "A", le nom de la colonne ou c'est la colonne A de Excel ?

      si vous me dites :
      "le but est de prendre une colonne où chaque ligne est renseignée sans exception si la ligne est à traiter. " = Est-ce que je dois faire autre chose au final ? Je suis un peu perdue.

      Au final j'ai rajouté une colonne et à l'en-tête j'ai écrit A (car range "A") et j'ai décalé d'une colonne pour les références dans le code. Exemple (i,11) --> (i,12)
      0
    4. Styla27 Messages postés 44 Date d'inscription   Statut Membre Dernière intervention   1
       
      Quand je mets mon curseur dessus :
      DernLigne = Sheets([PRI]).Range("A" & Rows.Count).End(xlUp).Row

      la bulle d'information m'indique :
      DernLign = 0

      Quand je parle de bulle, c'est comme quand vous allez sur la croix de la fenêtre et que lorsque vous attendez, c'est écrit Fermer dans la bulle. :)
      0
    5. Theo.R Messages postés 585 Statut Membre 31
       
      les accolades voulaient dire "remplacez par vos données", désolé j'aurais dû donner un exemple..

      Bref utilisez :
      DernLigne = Sheets("PRI").Range("A" & Rows.Count).End(xlUp).Row
      0