Macro pour supprimer ligne d'un feuillet à partir autre feuillet
Dernière réponse : dans Programmation
Chers internautes,
Je suis bien dans la mouise avec les macros et j'en appelle à votre aide.
Pour vous expliquer mon problème. J'ai deux feuillets dans un fichier excel. Les deux feuillets donnent des infos sur des contacts (nom, prénom, title, etc...). Il y a une ligne par contact, et la colonne g sert de clé car elle correspond aux emails (un email ne peut correspondre qu'à un contact) .La première ligne correspond à l'en tête et définit ce qu'il y a dans les 8 colonnes. Cette première ligne est similaire dans les deux feuillets.
Je veux supprimer toutes les lignes du premier feuillet (appelé "newsletter") qui correspondent à des contacts présents dans le deuxième feuillet (appelé "pro").
Ce que je veux demander à excel, c'est ça :
1. prends connaissance dans le feuillet "pro" de la cellule g2 (c'est a dire l'email du premier contact).
2.cherche dans dans la colonne g du feuillet "newsletter" si il y a une cellule qui correspond à la cellule g2 du feuillet "pro".
3. si tu la trouves, supprime la ligne qui correspond à cette celulle.
4. on recommence, prends dans le feuillet "pro" la cellule g3.
5......etc...g4, etc....
Le truc, c'est que le fichier newsletter fait 30 000 lignes et le pro fait 23 000. Donc une macro me ferait bien kiffer. J'ai cherché sur tous les forums, mais y a pas de truc qui réponde à ma question.
Et j'ai des vagues notions en vba qui datent, mais je connais pas trop la syntaxe. Par contre, j'ai l'impression que la structure de mon programme va dans le bon sens.
Qu'en pensez vous ?
Je vous donne le prog que j'ai fait :
Private Sub SupprimerLIGNE
Dim i As Integer
Dim j As Integer
Dim emailcontact as string
boucle1:
For i = 2 To 23000
Sheets("pro").Select
Cells(i, “g”).Value = emailcontact
Sheets("newsletter").Select
Columns("g:g").Select
For j=2 To 30000
If cells(j,”g”).value=emailcontact Then
Cells(j, “g”).EntireRow.Delete
End if
next j
next i
GoTo boucle1
End Sub
Je suis bien dans la mouise avec les macros et j'en appelle à votre aide.
Pour vous expliquer mon problème. J'ai deux feuillets dans un fichier excel. Les deux feuillets donnent des infos sur des contacts (nom, prénom, title, etc...). Il y a une ligne par contact, et la colonne g sert de clé car elle correspond aux emails (un email ne peut correspondre qu'à un contact) .La première ligne correspond à l'en tête et définit ce qu'il y a dans les 8 colonnes. Cette première ligne est similaire dans les deux feuillets.
Je veux supprimer toutes les lignes du premier feuillet (appelé "newsletter") qui correspondent à des contacts présents dans le deuxième feuillet (appelé "pro").
Ce que je veux demander à excel, c'est ça :
1. prends connaissance dans le feuillet "pro" de la cellule g2 (c'est a dire l'email du premier contact).
2.cherche dans dans la colonne g du feuillet "newsletter" si il y a une cellule qui correspond à la cellule g2 du feuillet "pro".
3. si tu la trouves, supprime la ligne qui correspond à cette celulle.
4. on recommence, prends dans le feuillet "pro" la cellule g3.
5......etc...g4, etc....
Le truc, c'est que le fichier newsletter fait 30 000 lignes et le pro fait 23 000. Donc une macro me ferait bien kiffer. J'ai cherché sur tous les forums, mais y a pas de truc qui réponde à ma question.
Et j'ai des vagues notions en vba qui datent, mais je connais pas trop la syntaxe. Par contre, j'ai l'impression que la structure de mon programme va dans le bon sens.
Qu'en pensez vous ?
Je vous donne le prog que j'ai fait :
Private Sub SupprimerLIGNE
Dim i As Integer
Dim j As Integer
Dim emailcontact as string
boucle1:
For i = 2 To 23000
Sheets("pro").Select
Cells(i, “g”).Value = emailcontact
Sheets("newsletter").Select
Columns("g:g").Select
For j=2 To 30000
If cells(j,”g”).value=emailcontact Then
Cells(j, “g”).EntireRow.Delete
End if
next j
next i
GoTo boucle1
End Sub
Autres pages sur : macro supprimer ligne feuillet partir feuillet
Lassé par la pub ? Créez un compte
Citation :
( Va lire les règles, et corrige ton post. Tu vas l'avoir ta macro
)excuse moi, mais j'ai pas compris en quoi je ne respecte pas les regles ? je galere avec un prog, et je le poste pour avoir de l'aide (ca fait beuger mon ordi) .
En quoi c''est mal ? En quoi c'est pas dans les règles ?
Stéphane.
Citation :
suffit de lire les règles et tu le sauras ...Excusez moi, mais j'avais pas compris l'importance de la balise code.
J'ai vraiment beaucoup de temps sur cette macro, mais elle fait buggé excel.
Je vous la redonne dans les règles....
Private Sub SupprimerLIGNE
Dim i As Integer
Dim j As Integer
Dim emailcontact as string
boucle1:
For i = 2 To 23000
Sheets("pro" ).Select
Cells(i, “g”).Value = emailcontact
Sheets("newsletter" ).Select
Columns("g:g" ).Select
For j=2 To 30000
If cells(j,”g”).value=emailcontact Then
Cells(j, “g”).EntireRow.Delete
End if
next j
next i
GoTo boucle1
End Sub
Arrrghhhhh x_x Il utilise un GoTo
TU VEUX MA MORT, A ME FAIRE LIRE DES TRUCS PAREILS ???En plus, peut-on savoir pourquoi ?
Tu es sûr de ta ligne 10 ?
Tu veux vraiment mettre le contenu de emailcontact dans la cellule (i, "G")
Lignes 10, 14 et 15, tu utilises Cells ( i, "g" ). Va lire l'aide de VBA et comprends pourquoi tu ne peux pas mettre "g".
JE HAIS LES SELECT !!!!!
(Mais je me soigne)
Et je réécris ton code :
For i = 2 To 23000
emailcontact = Sheets("pro").Cells(i, "g").Value
For j = 2 To 30000
If Sheets("newsletter").Columns("g:g").Cells(j,"g").value = emailcontact Then
Sheets("newsletter").Columns("g:g").Cells(j, "g").EntireRow.Delete
End If
Next j
Next i
Comme ça, on voit mieux. Ligne 5, on va améliorer ça :
For i = 2 To 23000
emailcontact = Sheets("pro").Cells(i, "g").Value
For j = 2 To 30000
If Sheets("newsletter").Columns("G:G").Cells(j,"g").value = emailcontact Then
Sheets("newsletter").Columns("G:G").Delete
End If
Next j
Next i
La colonne G:G, c'est la colonne 7, on est d'accord :
For i = 2 To 23000
emailcontact = Sheets("pro").Cells(i, "G").Value
With Sheets("newsletter").Columns(7)
For j = 2 To 30000
If .Cells(j, "G").value = emailcontact Then .Delete
Next j
End With
Next i
( C'est sympa le With. Comme ça, tu n'es pas obligé de tout te retaper. )
Tu n'as plus qu'à répondre au point 3, et ta macro fonctionnera
Citation :
Oui, j'ai vu, mais j'aurai préféré que zarathoustra nous en parle....
Salut Zeb.
Comme tu m'as dit j'ai lu l'aide sur vba dans l'aide excel. Mais j'ai pas trouvé de solution concernant ce que tu as dit avec les (i,"g").
Par contre, j'ai l'impression que Then rngCurrentCell.EntireRow.Delete pourrait être bien pour supprimer la ligne.
En ce qui concerne la boucle go to, c'est vrai que c'était n'importe quoi. Et puis merci aussi pour la boucle with. Mais je n'ai toujours pas trouvé. Connaissez vous des tutoriaux sur le web pour le vba SVP ?
Concernant les (i, "g"), c'est bien sûr Cells (i, "g") qu'il faut considérer et donc, c'est l'aide concernant Cells que je t'encourage à aller voir.
Je ne connais pas de bons tutoriels sur VB sur la toile. Si certains peuvent nous en communiquer, je ne manquerais pas de les ajouter aux premiers sujets de la catégorie.
Spoiler
Voici ce que dit l'aide de Cells. C'est pourtant clair non ?
Cells, propriété
Propriété Cells telle qu'elle s'applique à l'objet Worksheet.
Cette propriété renvoie un objet Range qui représente toutes les cellules contenues dans la feuille de calcul (pas seulement les cellules en cours d'utilisation). En lecture seule.
expression Obligatoire. Expression qui renvoie un objet Worksheet.
Notes
La propriété Item étant la propriété par défaut de l'objet Range, vous pouvez spécifier l'index de ligne et de colonne immédiatement après le mot clé Cells. Pour plus d'informations, consultez la rubrique relative à la propriété Item et les exemples correspondants.
Utilisée sans identificateur d'objet, cette propriété renvoie un objet Range représentant toutes les cellules contenues dans la feuille de calcul active.
Exemples
Cet exemple montre comment affecter une taille de caractères de 14 points à la cellule C5 dans la feuille Sheet1.
Cet exemple montre comment supprimer la formule dans la cellule 1 de la feuille Sheet1.
Cet exemple montre comment affecter une police de caractères Arial et une taille de 8 points pour toutes les cellules dans la feuille Sheet1.
Cet exemple montre comment effectuer une boucle sur les cellules A1:J4 dans la feuille Sheet1. Si une cellule contient une valeur inférieure à 0,001, la valeur est remplacée par 0 (zéro).
Cet exemple montre comment affecter le style italique aux cellules A1:C5 dans la feuille Sheet1.
Cet exemple montre comment balayer une colonne de données intitulée « myRange ». Si une cellule contient la même valeur que celle située immédiatement au-dessus, l'adresse de la cellule contenant le doublon est affichée.
Voici ce que dit l'aide de Cells. C'est pourtant clair non ?
Cells, propriété
Propriété Cells telle qu'elle s'applique à l'objet Worksheet.
Cette propriété renvoie un objet Range qui représente toutes les cellules contenues dans la feuille de calcul (pas seulement les cellules en cours d'utilisation). En lecture seule.
[i]expression[/i].[b]Cells[/b]
expression Obligatoire. Expression qui renvoie un objet Worksheet.
Notes
La propriété Item étant la propriété par défaut de l'objet Range, vous pouvez spécifier l'index de ligne et de colonne immédiatement après le mot clé Cells. Pour plus d'informations, consultez la rubrique relative à la propriété Item et les exemples correspondants.
Utilisée sans identificateur d'objet, cette propriété renvoie un objet Range représentant toutes les cellules contenues dans la feuille de calcul active.
Exemples
Cet exemple montre comment affecter une taille de caractères de 14 points à la cellule C5 dans la feuille Sheet1.
Worksheets("Sheet1").Cells(5, 3).Font.Size = 14
Cet exemple montre comment supprimer la formule dans la cellule 1 de la feuille Sheet1.
Worksheets("Sheet1").Cells(1).ClearContents
Cet exemple montre comment affecter une police de caractères Arial et une taille de 8 points pour toutes les cellules dans la feuille Sheet1.
With Worksheets("Sheet1").Cells.Font
.Name = "Arial"
.Size = 8
End With
.Name = "Arial"
.Size = 8
End With
Cet exemple montre comment effectuer une boucle sur les cellules A1:J4 dans la feuille Sheet1. Si une cellule contient une valeur inférieure à 0,001, la valeur est remplacée par 0 (zéro).
For rwIndex = 1 to 4
For colIndex = 1 to 10
With Worksheets("Sheet1").Cells(rwIndex, colIndex)
If .Value < .001 Then .Value = 0
End With
Next colIndex
Next rwIndex
For colIndex = 1 to 10
With Worksheets("Sheet1").Cells(rwIndex, colIndex)
If .Value < .001 Then .Value = 0
End With
Next colIndex
Next rwIndex
Cet exemple montre comment affecter le style italique aux cellules A1:C5 dans la feuille Sheet1.
Worksheets("Sheet1").Activate
Range(Cells(1, 1), Cells(5, 3)).Font.Italic = True
Range(Cells(1, 1), Cells(5, 3)).Font.Italic = True
Cet exemple montre comment balayer une colonne de données intitulée « myRange ». Si une cellule contient la même valeur que celle située immédiatement au-dessus, l'adresse de la cellule contenant le doublon est affichée.
Set r = Range("myRange")
For n = 1 To r.Rows.Count
If r.Cells(n, 1) = r.Cells(n + 1, 1) Then
MsgBox "Duplicate data in " & r.Cells(n + 1, 1).Address
End If
Next n
For n = 1 To r.Rows.Count
If r.Cells(n, 1) = r.Cells(n + 1, 1) Then
MsgBox "Duplicate data in " & r.Cells(n + 1, 1).Address
End If
Next n
Je ne connais pas de bons tutoriels sur VB sur la toile. Si certains peuvent nous en communiquer, je ne manquerais pas de les ajouter aux premiers sujets de la catégorie.
Ton petit texte est vraiment très intéressant pour comprendre ceci.
Sinon, je vais chercher un tutorial vba bien sur le net.
A part ça, j'ai trouvé un code bon je pense. Le voici (ça peut servir à beaucoup de gens qui ont besoin de trier des énormes fichiers).
Voilà, ca roule.
Mais un dernier problème.
Integer s'arrête à 32000,et comment fait on pour le pousser jusqu'à 35294 ?
Sinon, je vais chercher un tutorial vba bien sur le net.
A part ça, j'ai trouvé un code bon je pense. Le voici (ça peut servir à beaucoup de gens qui ont besoin de trier des énormes fichiers).
Sub Macro2()
'
' Macro2 Macro
'
Dim i As Integer
Dim j As Integer
Dim emailcontact As String
For i = 2 To 23262
emailcontact = Sheets("pro").Cells(i, "G").Value
'With Sheets("newsletter")
For j = 2 To 35294
If StrComp(Sheets("newsletter").Cells(j, "G").Value, emailcontact) Then
Sheets("newsletter").Cells(j, "G").EntireRow.Delete
End If
Next j
'End With
Next i
End Sub
Voilà, ca roule.
Mais un dernier problème.
Integer s'arrête à 32000,et comment fait on pour le pousser jusqu'à 35294 ?
M'enfin, ce n'est pas mon texte, c'est la page d'aide de Cells dans l'aide de Excel/VBA que je t'avais proposé de lire !!!!
Ca roule ? J'en suis ravi
Dixit l'aide de Excel/VBA :
Toujours sur le même principe, si tu veux savoir quoi utiliser, demande à Excel l'aide sur Integer ( [F1] sur le mot Integer ), dans la rubrique Voir aussi, tu trouveras ton bonheur, à la longue (
)
Ca roule ? J'en suis ravi
Dixit l'aide de Excel/VBA :
Citation :
Les variables de type Integer sont stockées sous la forme de nombres de 16 bits (2 octets) dont la valeur est comprise entre -32 768 et 32 767.Toujours sur le même principe, si tu veux savoir quoi utiliser, demande à Excel l'aide sur Integer ( [F1] sur le mot Integer ), dans la rubrique Voir aussi, tu trouveras ton bonheur, à la longue (
) Citation :
M'enfin, ce n'est pas mon texte, c'est la page d'aide de Cells dans l'aide de Excel/VBA que je t'avais proposé de lire !!!!
Ca roule ? J'en suis ravi
Dixit l'aide de Excel/VBA :
Citation :
Les variables de type Integer sont stockées sous la forme de nombres de 16 bits (2 octets) dont la valeur est comprise entre -32 768 et 32 767.Toujours sur le même principe, si tu veux savoir quoi utiliser, demande à Excel l'aide sur Integer ( [F1] sur le mot Integer ), dans la rubrique Voir aussi, tu trouveras ton bonheur, à la longue (
)Re Zeb.
Mon problème c'est que la macro ne marche jamais. La macro ne finit jamais de fonctionner.
Qu'en penses tu?
Pourquoi ne s'arrête t elle jamais ?
Stéphane.
Elle doit s'arrêter !
Elle est peut être très lente![[:spamafote] [:spamafote]]()
Ajoute la ligne suivante entre la 18 et la 19 de ton code.
Exécute ta macro, et au bout d'un moment, arrête-là. ( [Ctrl+Pause] par exemple ). Dans l'éditeur VB, affiche la fenêtre d'exécution ( [Ctrl+G] ) et constate (ou pas) que ta macro avance.
Elle est peut être très lente
![[:spamafote] [:spamafote]](http://m.bestofmedia.com/sfp/design/usr/fr/smilies/3e/46/spamafote.gif)
Ajoute la ligne suivante entre la 18 et la 19 de ton code.
Debug.Print i, j
Exécute ta macro, et au bout d'un moment, arrête-là. ( [Ctrl+Pause] par exemple ). Dans l'éditeur VB, affiche la fenêtre d'exécution ( [Ctrl+G] ) et constate (ou pas) que ta macro avance.
Lassé par la pub ? Créez un compte
- Contenus similaires :
- ForumSupprimer ligne macro
- ForumMacro excel supprimer ligne contenant
- ForumMacro supprimer colonne
- ForumCopier ligne sur autre feuillet si
- ForumSupprimer ligne
- ForumMacro excel supprimer ligne cellule vide
- ForumMacro supprimer les lignes vides
- ForumMacro en ligne
- ForumExcel macro supprimer onglet
- ForumExcel macro supprimer caractère
- Voir plus