XL 2013 Supprimer ligne en fonction de la valeur d'une cellule

damient

XLDnaute Nouveau
Bonjour,

Je ne comprends vraiment rien aux VBA.
J'ai mis un bouton sur une feuille. J'ai besoin qu'en cliquant sur ce bouton, les lignes de mon tableau soient effacées ou non en fonction de la valeur d'une cellule ("Oui") dans une autre feuille.
J'ai essayé d'affecter une macro à ce bouton. avec une formule mais je ne parviens pas à l'adapter à mon besoin.

Si quelqu'un peut m'aider en m'expliquant ce que chaque charabia signifie, ce serait super sympa !

Merci beaucoup,

Damien
 

Calvus

XLDnaute Barbatruc
Bonjour,

Quelque chose dans ce genre, mais à adapter hein :
VB:
For i = sheets(feuil1).cells.count.end(xlup).row to 1 step -1
For j = 1 to sheets(feuil3).cells.count.end(xlup).row 
If sheets(feuil3).cells(j,2) = "oui"  and sheets(feuil1).cells(i,1) =sheets(feuil3).cells(j,2) then
sheets(feuil1).cells(i,1).entirerow.delete
end if
next j
Next i

A+
 

damient

XLDnaute Nouveau
Bonjour et merci de ta réponse.

J'ai essayé de l'adapter mais comme je n'y comprends rien, ça n'a évidemment pas fonctionné.
J'ai déduis que : i et j représentaient des colonnes (mais je ne comprends pas que vient faire "i" ici.
Je ne comprends pas non plus ce que représentent tout le reste (cells.count, xlup down etc.) mais peu importe...
J'ai remplacé les noms des feuillets et "j" par la valeur "v" qui représente la colonne dans laquelle sont mes "Oui".
Ça donne :

Sub SuppressionLIRefusees()
For i = Sheets("Projets complets").Cells.Count.End(xlUp).Row To 1 Step -1
For v = 1 To Sheets("Lettres d'intention").Cells.Count.End(xlUp).Row
If Sheets("Lettres d'intention").Cells(v, 2) = "Oui" And Sheets("Projets complets").Cells(i, 1) = Sheets("Lettres d'intention").Cells(v, 2) Then
Sheets("Projets complets").Cells(i, 1).EntireRow.Delete
End If
Next v
Next i
End Sub

Dès que je fais "affecter une macro" au bouton et sélectionne la macro, il me dit "dépassement de capacité"

J'aimerais me débrouiller tout seul mais je ne trouve vraiment pas grand chose sur l'explication des codes VBA sur le net. Et je ne comprends pas comment peut fonctionner l'enregistrement de macro puisque je veux quelque chose de conditionnel...
Bref suis un peu coincé, désolé
 

Calvus

XLDnaute Barbatruc
Re,

Sans fichier je ne peux pas aller plus loin.


Essaye tout de même comme ceci:

VB:
Sub SuppressionLIRefusees()
For i = Sheets("Projets complets").Cells(Rows.Count, 2).End(xlUp).Row To 1 Step -1
For v = 1 To Sheets("Lettres d'intention").Cells(Rows.Count, 2).End(xlUp).Row
If Sheets("Lettres d'intention").Cells(v, 2) = "Oui" And Sheets("Projets complets").Cells(i, 1) = Sheets("Lettres d'intention").Cells(v, 2) Then
Sheets("Projets complets").Cells(i, 1).EntireRow.Delete
End If
Next v
Next i
End Sub

A+
 

damient

XLDnaute Nouveau
J'ai lu des cours de VBA ce matin.

Je comprends que :
- For est pour déterminer une variable, "i" et "v" sont leurs noms.

- i consiste à identifier le feuillet "projets complets" et à remonter ligne par ligne depuis la fin.

- v consiste à identifier le feuillet "lettres d'intention" et à remonter ligne par ligne depuis la fin.

- If est une condition qui dit "SI dans mon feuillet "lettre d'intention" les cellules de la variable v dans la colonne 2 (que j'ai modifié par 22 où il y a le "oui") sont égales à "Oui"...

- ET SI (ça, je suis pas sûr de comprendre l'utilité) dans le feuillet "projets complets", les cellules de la variable i dans la colonne 1 sont égales à celles dans le feuillet "lettres d'intention"... ALORS supprimer la ligne.

Je ne comprends pas ce "et si" car je n'ai rien à comparer en colonne 1
?
En fait, j'ai un feuillet "projets complets", un autre "lettres d'intention". Je voudrais que si dans la colonne 22 de ce dernier feuillet il y a autre chose que "Oui" (c'est autre chose en fait, et pas "égal à" mais j'aurais pu modifier), alors on supprime la ligne correspondante dans le premier feuillet.

Je ne peux pas partager le fichier car il y a des données confidentielles mais je peux essayer de reproduire quelque chose à l'identique si besoin ?

Merci encore
 

Calvus

XLDnaute Barbatruc
Bonjour,

Alors, si j'ai bien compris, voici :

VB:
Sub SuppressionLIRefusees()
'Suppression de la ligne si la lettre d'intention a été refusée

For i = Sheets("Projets complets").Cells(Rows.Count, 2).End(xlUp).Row To 3 Step -1
For j = Sheets("Lettres d'intention").Cells(Rows.Count, 2).End(xlUp).Row To 3 Step -1
If Sheets("Lettres d'intention").Cells(i, 22) <> "Oui" And Sheets("Lettres d'intention").Cells(i, 22) <> "" Then
Sheets("Projets complets").Cells(i, 22).EntireRow.Delete
End If
Next j
Next i
End Sub

Mais ça va mettre le bazar dans ton tableau de droite..

Teste et dis moi.

A+
 

Calvus

XLDnaute Barbatruc
Re,

Voici une autre méthode, plus appropriée à ce que tu veux faire.

Code à placer dans un module.

VB:
Option Explicit
Option Base 1

Sub Trier()
Dim i As Long, j As Long, n As Long, k As Byte, t, a(), f1 As Worksheet, f2 As Worksheet

Set f1 = Sheets("Lettres d'intention")
Set f2 = Sheets("Projets complets")

t = f1.Range("B3:V" & f1.Range("B" & Rows.Count).End(xlUp).Row)
ReDim a(UBound(t), 15)

For i = 1 To UBound(t)
    If t(i, 21) = "Oui" Then
        n = n + 1
            For j = 1 To 10
                a(n, j) = t(i, j)
            Next j
            For j = 19 To 21
'                For k = 11 To 13
                a(n, j - 6) = t(i, j)
 '               Next k
            Next j
    End If
Next i
Range("B3").Resize(UBound(a), 15) = a
End Sub

A+
 

Pièces jointes

  • Tableau de bord_anonTableau.xlsm
    291.5 KB · Affichages: 3

damient

XLDnaute Nouveau
Merci beaucoup pour vos propositions !

J'ai essayé et rien ne fonctionne. Pire encore, j'avais tout un tas de formules pour récupérer les données de mon tableau et elles se sont effacées, j'ai quitté sans enregistré mais elles n'y sont tout de même plus.

Il faudrait que je comprenne quelque chose pour essayer d'adapter mais je n'ai pas les compétences, donc j'abandonne.
Merci quand même !!
 

Calvus

XLDnaute Barbatruc
Re, bonjour Roblochon,

Attends !

J'ai essayé et rien ne fonctionne.

De quoi parles tu ? car chez moi ça fonctionne parfaitement.
Pire encore, j'avais tout un tas de formules pour récupérer les données de mon tableau et elles se sont effacées,

Oui, c'est une façon de faire, mais tu n'as pas besoin des formules à ce stade. Ce dont tu as besoin, c'est de récupérer les données non ?
Maintenant, on peut aussi les remettre les formules, mais je n'en voit nullement l'utilité.

A+
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re bonjour,

Nous avons fait avec les informations que vous nous avez communiquées même si certaines étaient ambigües.
Peut-être devriez-vous reformuler votre demande avec plus de précision.
Par exemple:
Comment faire pour supprimer toutes les lignes du tableau de la feuille "Projets complets" et pour lesquelles le N°de projet a une (ou plusieurs) correspondances dans le tableau de la feuille "Lettres d'intention". La suppression est conditionnée par la présence d'un "oui" dans la cellule de la colonne 'Sélectionné ?' du tableau de "Lettres d'intention".
C'est comme ça que j'ai interprété votre demande.

Apprendre à formuler ses demandes et souvent 90% de la résolution du problème.

A vous relire
 

damient

XLDnaute Nouveau
Merci encore pour votre retour. Je viens de demander l'accord pour partager le fichier source, afin qu'il n'y ait plus d'erreur de correspondance. Je joins donc le document sur lequel je suis en train de travailler. Il n'y a aucune information personnelle.

J'aimerais faire beaucoup de choses dessus pour automatiser le process, notamment celle dont je vous ai parlé et que Roblochon a très bien repris.


En fait, l'idée serait d'avoir un fichier "vide" dans lequel il ne suffirait que d'inscrire quelques données pour que tout se mette à jour automatiquement.

J'ai sûrement les yeux plus gros que le ventre puisque je suis (comme vous avez pu le constater) assez limité techniquement.
J'ai pour habitude de me débrouiller seul le plus possible mais là je bloque et ce serait très sympa si vous pouviez m'expliquer les codes dans les macros afin que je puisse devenir autonome au fur et à mesure.

Bref, dans le fichier que je joins, j'aimerais faire ce que décrit Roblochon :
Comment faire pour supprimer toutes les lignes du tableau de la feuille "Projets complets" et pour lesquelles le N°de projet a une (ou plusieurs) correspondances dans le tableau de la feuille "Lettres d'intention". La suppression est conditionnée par la présence d'un "oui" dans la cellule de la colonne 'Sélectionné ?' du tableau de "Lettres d'intention".

Peut-être est-ce dû à une modification de colonne que j'ai effectué après coup... mais comme je n'arrive pas à identifier celles-ci dans le code VBA...


La prochaine étape serait de reprendre automatiquement le nom des experts depuis la feuille "Experts" vers la feuille "Projets complets" lorsque leur Statut est "OK"... mais je vais sûrement trouver avec les formules NB.SI.ENS et RECHERCHEV... il me faut juste un peu de temps pour bricoler... et je suppose que cela nécessiterait l'ouverture d'un autre post si je n'y parviens pas.

Il y a encore beaucoup d'autres choses à faire mais je vais essayer de me débrouiller pour la plupart. La plus importante et plus difficile serait notamment de terminer par la création d'un bouton qui me permettrait d'effacer le contenu de certaines cellules pour rendre le fichier "vierge de nouveau" tout en conservant sa structure et toutes les formules incluses mais je n'en suis pas encore là...

J'abuse de votre patience et vous en remercie une nouvelle fois !
 

Pièces jointes

  • Tableau de bord AAP.xlsm
    391.4 KB · Affichages: 4

Discussions similaires

Statistiques des forums

Discussions
314 628
Messages
2 111 339
Membres
111 107
dernier inscrit
cdel