ajustement formule autofill et effacer dernière ligne [Résolu]

  • Initiateur de la discussion Initiateur de la discussion fredgoral
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

fredgoral

XLDnaute Nouveau
Bonjour,

J'ai pu en recoupant différent post et en adaptant certains code arriver là (En fait pour tout dire je suis vraiment une buse en vba).

Code:
Private Sub CommandButton4_Click()
Application.ScreenUpdating = False
compteur = 6
Workbooks.Open "D:\Documents\Goral-Expo\Traitement Mailing\Exposants\Exposants Etiquettes.xlsx"
Workbooks("Exposants Traitement Mailing.xlsm").Activate
    If MsgBox("Préparer le fichier étiquettes publipostage ?", vbYesNo) = vbYes Then
    Range("V6").Select
    'modif de la formule pour utiliser les cols T et N
    ActiveCell.FormulaR1C1 = "=COUNTIF(C[-2],RC[-8])"
    Range("V6").Select
    Selection.AutoFill Destination:=Range("V6:V" & Range("N65535").End(xlUp).Row), Type:=xlFillDefault
    Range("V6:V65535").Select
    For i = Range("N65535").End(xlUp).Row To 1 Step -1
    '22 a la place de 15 pour correspondre a la col V
    If Cells(i, 22).Value = 0 Then
    'si = 0 donc si faux les copier et les coller dans un classeur
       Rows(i).Copy Destination:=Workbooks("Exposants Etiquettes.xlsx").Sheets("Feuil1").Range("A" & compteur)
    compteur = compteur + 1
    End If
    Next i
    Workbooks("Exposants Etiquettes.xlsx").Activate
    Range("R:R,S:S,T:T").ClearContents
    Range("$A$6:$Q$65535").Sort Key1:=Range("B6"), Order1:=xlAscending
    Workbooks("Exposants Traitement Mailing.xlsm").Activate
    End If
    [N6].Select
    Application.ScreenUpdating = True
End Sub

La situation : Donc, j'ai un fichier avec une liste d'exposants a qui l'on envoi un mail, certains ont une adresse mails d'autres non, on repère, parmi ceux qui ont des adresses mails, quels sont ceux qui ont ouvert le mail.
Ensuite on copie les lignes de ceux qui n'ont pas ouvert le mail vers un autre classeur qui me permettra de créer des étiquettes de publipostage pour envoyer le dossier par courrier.

Les problèmes : En l'état je n'arrive pas à récupérer les informations des exposants n'ayant pas de mail car la formule ne se copie pas lorsqu'elle ne trouvent pas de mails dans la colonne N, par contre je récupère les entêtes de colonne placés en ligne 5. Ces entêtes se retrouvent ensuite au milieu du tableau après le tri effectuer en fin de code.

Est-ce que quelqu'un a une piste pour faire évoluer ce code dans le bon sens ?

😱

Fred
 
Dernière édition:
Re : Aide dernière ligne droite....

Re,

Voici la modif effectué qui me permet de ne plus avoir la ligne des entêtes copier et placé avec les données dans le tableau final :

Code:
Private Sub CommandButton4_Click()
Application.ScreenUpdating = False
compteur = 6
Workbooks.Open "D:\Documents\Goral-Expo\Traitement Mailing\Exposants\Exposants Etiquettes.xlsx"
Workbooks("Exposants Traitement Mailing.xlsm").Activate
    If MsgBox("Préparer le fichier étiquettes publipostage ?", vbYesNo) = vbYes Then
    Range("V6").Select
    'modif de la formule pour utiliser les cols T et N
    ActiveCell.FormulaR1C1 = "=COUNTIF(C[-2],RC[-8])"
    Range("V6").Select
    Selection.AutoFill Destination:=Range("V6:V" & Range("N65535").End(xlUp).Row), Type:=xlFillDefault
    Range("V6:V65535").Select
    For i = Range("N65535").End(xlUp).Row To 1 Step -1
    '22 a la place de 15 pour correspondre a la col V
    If Cells(i, 22).Value = 0 Then
    'si = 0 donc si faux les copier et les coller dans un classeur
       Rows(i).Copy Destination:=Workbooks("Exposants Etiquettes.xlsx").Sheets("Feuil1").Range("A" & compteur)
    compteur = compteur + 1
    End If
    Next i
    Workbooks("Exposants Etiquettes.xlsx").Activate
    Range("R:R,S:S,T:T").ClearContents
    'efface la dernière ligne remplie en se basant sur la colonne B qui a toutes ses cases remplies
    ActiveSheet.Range("B65536").End(xlUp).Delete
    Range("$A$6:$Q$65535").Sort Key1:=Range("B6"), Order1:=xlAscending
    Workbooks("Exposants Traitement Mailing.xlsm").Activate
    End If
    Range("V6:V65535").ClearContents
    [N6].Select
    Application.ScreenUpdating = True
End Sub
 
Re : ajustement formule autofill et effacer dernière ligne

Bonjour,

Finalement je m'en suis sorti😎, J'explique ce que j'ai trouvé car cela peut servir a quelqu'un...enfin un débutant...😱

voici le code modifié :

Code:
Private Sub CommandButton4_Click()
Application.ScreenUpdating = False
'je fais démarrer le compteur a la ligne 6
compteur = 6
Workbooks.Open "D:\Documents\Goral-Expo\Traitement Mailing\Exposants\Exposants Etiquettes.xlsx"
Range("$A$6:$Q$65535").ClearContents
Workbooks("Exposants Traitement Mailing.xlsm").Activate
    If MsgBox("Préparer le fichier étiquettes publipostage ?", vbYesNo) = vbYes Then
    Range("V6").Select
    'les colonnes T et N sont indiquer par rapport a V soit v est 0 -2 donne T -8 donne N
    ActiveCell.FormulaR1C1 = "=COUNTIF(C[-2],RC[-8])"
    'la formule compare les deux colonnes et met 1 a l'element se trouvant dans les 2 et 0 si c'est faux
    Range("V6").Select
    'copie la formule en tirant vers le bas dans la colonne V en fonction du remplissage de la col B
    Selection.AutoFill Destination:=Range("V6:V" & Range("B65535").End(xlUp).Row), Type:=xlFillDefault
    Range("V6:V65535").Select
    For i = Range("B65535").End(xlUp).Row To 1 Step -1
    '22 pour correspondre a la col V
    If Cells(i, 22).Value = 0 Then
    'si = 0 donc si faux les copier et les coller dans un classeur
       Rows(i).Copy Destination:=Workbooks("Exposants Etiquettes.xlsx").Sheets("Feuil1").Range("A" & compteur)
    'le compteur permet de coller les lignes les unes sous les autres
    compteur = compteur + 1
    End If
    Next i
    Workbooks("Exposants Etiquettes.xlsx").Activate
    'j efface les colonnes ne servant plus
    Range("R:R,S:S,T:T,V:V").ClearContents
    'efface la dernière ligne remplie en se basant sur la colonne B qui a toutes ses cases remplies
    ActiveSheet.Range("B65536").End(xlUp).Delete
    'Je classe par ordre alphabétique a partir de la col B
    Range("$A$6:$Q$65535").Sort Key1:=Range("B6"), Order1:=xlAscending
    'Fermeture et sauvegarde
    Workbooks("Exposants Etiquettes.xlsx").Close savechanges:=True
    Workbooks("Exposants Traitement Mailing.xlsm").Activate
    End If
    Range("V6:V65535").ClearContents
    [N6].Select
    Application.ScreenUpdating = True
End Sub

La partie me permettant d'effacer la dernière ligne et donc de me débarrasser de la ligne d'entêtes :

Code:
'efface la dernière ligne remplie en se basant sur la colonne B qui a toutes ses cases remplies
    ActiveSheet.Range("B65536").End(xlUp).Delete

Je me base sur la col B car je sais que chaque case contient des données. on part du bas et on efface la première ligne que l'on trouve avec des données dans la col B.

La partie corrigée qui me permet maintenant de récupérer toutes les données voulues :

Code:
Selection.AutoFill Destination:=Range("V6:V" & Range("B65535").End(xlUp).Row), Type:=xlFillDefault

Avant la formule se coller uniquement sur les lignes possédant des données en col N (col des mails) donc quand il n'y avait pas de mail = pas de formule. J'ai donc choisis la col B et la formule se colle bien sur toutes les lignes du tableau.

Je ne comprend pas toutes les parties du code qui pourrait-être certainement allégé mais cela fonctionne. Je cherche plus de précisions sur les xlquelquechose, si quelqu'un a un tuto ou un lexique je suis preneur.

@+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 Programme trop lent
Réponses
12
Affichages
897
Retour