Copier les valeurs de colonnes correspondantes aux lignes "vrai"

Fermé
Styla27 Messages postés 44 Date d'inscription mardi 16 février 2016 Statut Membre Dernière intervention 18 mars 2016 - 16 févr. 2016 à 15:52
Styla27 Messages postés 44 Date d'inscription mardi 16 février 2016 Statut Membre Dernière intervention 18 mars 2016 - 23 févr. 2016 à 20:20
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 !
A voir également:

1 réponse

Theo.R Messages postés 575 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 30 mars 2016 31
16 févr. 2016 à 16:06
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
Styla27 Messages postés 44 Date d'inscription mardi 16 février 2016 Statut Membre Dernière intervention 18 mars 2016 1
Modifié par Styla27 le 17/02/2016 à 11:10
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
Theo.R Messages postés 575 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 30 mars 2016 31
17 févr. 2016 à 11:05
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
Styla27 Messages postés 44 Date d'inscription mardi 16 février 2016 Statut Membre Dernière intervention 18 mars 2016 1
17 févr. 2016 à 11:30
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
Styla27 Messages postés 44 Date d'inscription mardi 16 février 2016 Statut Membre Dernière intervention 18 mars 2016 1
17 févr. 2016 à 11:37
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
Theo.R Messages postés 575 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 30 mars 2016 31
17 févr. 2016 à 13:36
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