Supprimer les anciennes données a chaque activation d'une liste

Signaler
Messages postés
26
Date d'inscription
dimanche 5 février 2012
Statut
Membre
Dernière intervention
4 novembre 2013
-
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
bonjour à tous et bonne années
voici mon problème
je vais chercher dans une liste en c2 des noms
une fois un nom sélectionner il me donne tous les prénoms etc lié a ce nom
jusque là c'est OK
mais je voudrais lorsqu'un nouveau nom est sélectionner que la macro m’efface les anciennes données puis mette les nouvelles données affectées au nom
voici le code:
Sub recherche_nom()
'
Dim Nom As String
Dim i, j As Integer
Dim wb, ws_recherche, ws_resultat As String
'
wb = "tennis.xls"
ws_recherche = "BD Adhérent"
ws_resultat = "Cotisation"
'
Nom = Workbooks(wb).Sheets(ws_resultat).Cells(2, 3)
j = 5
For i = 2 To 98
    If Workbooks(wb).Sheets(ws_recherche).Cells(i, 2) = Nom Then
    Workbooks(wb).Sheets(ws_resultat).Cells(j, 2) = Workbooks(wb).Sheets(ws_recherche).Cells(i, 2)
    Workbooks(wb).Sheets(ws_resultat).Cells(j, 3) = Workbooks(wb).Sheets(ws_recherche).Cells(i, 3)
    Workbooks(wb).Sheets(ws_resultat).Cells(j, 4) = Workbooks(wb).Sheets(ws_recherche).Cells(i, 4)
    Workbooks(wb).Sheets(ws_resultat).Cells(j, 5) = Workbooks(wb).Sheets(ws_recherche).Cells(i, 5)
    Workbooks(wb).Sheets(ws_resultat).Cells(j, 6) = Workbooks(wb).Sheets(ws_recherche).Cells(i, 10)
    j = j + 1
    End If
Next i
End Sub

merci pour la réponse

11 réponses

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
Dim i, j As Integer
Dim wb, ws_recherche, ws_resultat As String

de quel type penses tu que sont

i, wb et ws_recherche ?


Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
Bonjour,

Je ne suis pas certain d'avoir compris.
Que cherches-tu à faire ?
Si à effacer ce que tu as écrit précédemment : utilise ClearContents appliqué à la plage remplie
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
33
Date d'inscription
mercredi 6 octobre 2010
Statut
Membre
Dernière intervention
9 janvier 2012

Comment sais tu que se sont des anciennes données puis ou sont les nouvelles données ?
Les nouvelles données sont elle dans : Sheets(ws_recherche).Cells(i, x) ?
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
Pour ne pas trop chambouler ton code, et l'améliorer un brin :

Sub recherche_nom()
Dim Nom As String
Dim i As Integer, j As Integer
Dim wb As Workbook
Dim ws_recherche As Worksheet
Dim ws_resultat As Worksheet
    Set wb = ActiveWorkbook 'Workbooks("tennis.xls")
    Set ws_recherche = wb.Worksheets("BD Adhérent")
    Set ws_resultat = wb.Worksheets("Cotisation")
    
    For i = 5 To 103
        If LenB(ws_resultat.Cells(i, 2)) Then
            ws_resultat.Rows(i).Delete
        Else
            Exit For
        End If
    Next
    
    Nom = ws_resultat.Range("C2")
    j = 5
    For i = 2 To 98
        If ws_recherche.Cells(i, 2) = Nom Then
            ws_resultat.Cells(j, 2) = ws_recherche.Cells(i, 2)
            ws_resultat.Cells(j, 3) = ws_recherche.Cells(i, 3)
            ws_resultat.Cells(j, 4) = ws_recherche.Cells(i, 4)
            ws_resultat.Cells(j, 5) = ws_recherche.Cells(i, 5)
            ws_resultat.Cells(j, 6) = ws_recherche.Cells(i, 10)
            j = j + 1
        End If
    Next i
End Sub



Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
Bonjour, RenField

A lire et relire les bornes (toujours les mêmes) de sa boucle,
Il me semble que

Range(Cells(5, 2), Cells(101, 5)).ClearContents

devrait remplacer ta boucle liminaire.
En effaçant, on plutôt qu'en supprimant des rangs, on évite en plus de déplacer d'éventuelles données au delà de l limite.

En précisant que 101 = 5 + (98-2)


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
26
Date d'inscription
dimanche 5 février 2012
Statut
Membre
Dernière intervention
4 novembre 2013

merci de m'avoir tous répondu
j'ai trouvé la solution
dans une autre macro j'ai mis le code suivant
Range("C2,B5:F10").Select
    Selection.ClearContents
    Range("C2").Select

et cela me pause plus de problème
pourquoi compliquer les choses quant elle sont simples
merci encore de votre aide
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
pas utile de selectionner !

Range("C2,B5:F10").ClearContents

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
hé bé !
- un La plage Range("C2,B5:F10") n'est finalement rien d"'autre que la plage Range("B5:F10") !
- Je ne vois vraiment pas comment l'une ou l'autre de ces deux plages (la même, de surcroît) pourrait représenter la plage remplie par ta boucle :
j = 5
For i = 2 To 98
    If Workbooks(wb).Sheets(ws_recherche).Cells(i, 2) = Nom Then
    Workbooks(wb).Sheets(ws_resultat).Cells(j, 2) = Workbooks(wb).Sheets(ws_recherche).Cells(i, 2)
    Workbooks(wb).Sheets(ws_resultat).Cells(j, 3) = Workbooks(wb).Sheets(ws_recherche).Cells(i, 3)
    Workbooks(wb).Sheets(ws_resultat).Cells(j, 4) = Workbooks(wb).Sheets(ws_recherche).Cells(i, 4)
    Workbooks(wb).Sheets(ws_resultat).Cells(j, 5) = Workbooks(wb).Sheets(ws_recherche).Cells(i, 5)
    Workbooks(wb).Sheets(ws_resultat).Cells(j, 6) = Workbooks(wb).Sheets(ws_recherche).Cells(i, 10)
    j = j + 1
    End If
Next i
*
qui, elle, est la plage que je t'ai indiquée, à savoir :
Range(Cells(5, 2), Cells(101, 5))

Cela commence à devenir soit du n'importe quoi, soit du "poker javanais" !
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
Je me demande en fait si l'explication "poker javanais" n'est finalement pas la bonne et que ce que tu cherches en réalité à faire ne serait pas plutôt du genre :
...
...
Sheets("Cotisation").Range("B2:G98").ClearContents
   For i = 2 To 98
     If Sheets("BD Adhérent").Cells(i, 2) = Nom Then
       For j = 2 To 7
         Sheets("Cotisation").Cells(i, j).End(xlUp).Offset(1, 0) = Sheets("BD Adhérent").Cells(i, j)
       Next
     End If
   Next
...
...



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
26
Date d'inscription
dimanche 5 février 2012
Statut
Membre
Dernière intervention
4 novembre 2013

bonsoir ucfoutu
ce que je cherche a faire
dans ma feuilles ("Cotisation")
Si je choisis un nom dans ma liste (toto) il me met bien tous les prénoms se rapportant a toto
en b5 riri
en b6 fifi
en b7 loulou
etc
mais quand je choisi un autre nom ex:(Olyver) avec un seul prénom est rattaché a ce nom(Raymond)
en b5 j'ai bien Raymond
mais en b6 j'ai toujours fifi et toutes les autres information jusqu’à F6
en b7 toujours loulou etc
vois tu mieux mon problème
en réalité à chaque ouverture de liste et à ce seul moment
il m’efface les cellules ("B5:F10")
vois-tu mieux mon problème
merci de ta patience
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
Tu seras totalement clair lorsque tu diras techniquement (je veux volontairement oublier le reste, qui ne m'intéresse pas) :
1) dans quelle colonne de quelle feuille et à partir de quelle ligne se trouvent les "prénoms" à rechercher
2) pour chaque occurrence trouvée : dans quelles colonnes de la ligne correspondante se trouvent les données à copier
3) sur quelle feuille et plage (depuis quelle ligne/colonne et jusqu'à quelle ligne/colonne limite veux tu copier les données ainsi récupérée.

4) il pourrait être par ailleurs important de préciser (car alors solution beaucoup plus simple) si la feuille vers laquelle tu copie ne contient que ces données à partir de la limite/ligne/colonne copiée.

Voilà ! c'est simple à exprimer et c'est uniquement technique, sans avoir à connaître le reste !


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient