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

campagne72 Messages postés 26 Date d'inscription dimanche 5 février 2012 Statut Membre Dernière intervention 4 novembre 2013 - 9 janv. 2012 à 10:00
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 9 janv. 2012 à 19:55
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

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 72
9 janv. 2012 à 10:09
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 219
9 janv. 2012 à 10:10
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
0
gourmand86 Messages postés 33 Date d'inscription mercredi 6 octobre 2010 Statut Membre Dernière intervention 9 janvier 2012
9 janv. 2012 à 10:14
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) ?
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 72
9 janv. 2012 à 10:19
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 219
9 janv. 2012 à 10:47
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
0
campagne72 Messages postés 26 Date d'inscription dimanche 5 février 2012 Statut Membre Dernière intervention 4 novembre 2013
9 janv. 2012 à 11:53
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
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 72
9 janv. 2012 à 12:30
pas utile de selectionner !

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

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 219
9 janv. 2012 à 12:50
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 219
9 janv. 2012 à 16:48
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
0
campagne72 Messages postés 26 Date d'inscription dimanche 5 février 2012 Statut Membre Dernière intervention 4 novembre 2013
9 janv. 2012 à 19:34
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 219
9 janv. 2012 à 19:55
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
0