Fusionner plusieurs sub

Résolu
Didier -  
Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

J'ai un fichier dont je veux générer automatiquement différentes versions dans lesquelles seront supprimées certaines certaines lignes et colonnes selon le service destinataire (j'ai une colonne pour chaque destinataire où je met la valeur 4 si cela a déjà été transmis, comme cela je lui transmet uniquement ce qu'il n'a pas encore eu et supprime les lignes déjà transmises, ici colonne n°22).

J'ai réussi à le faire pour un destinataire, mais je n'arrive pas à le faire 3 fois dans la même sub.

Mon problème est que je lui dit de le faire de la ligne 3 à 300 (le nombre de ligne du fichier pouvant varier) et donc j'ai mis un Exit Sub quand il détecte une cellule vide pour ne pas tourner en boucle (j'ai bien évidemment mis ce test sur une colonne qui est toujours remplie quand la ligne existe). Je voudrais donc lui dire que si la ligne est vide c'est qu'il a finit et qu'il passe à la création suivante (donc recommencer à zéro mais avec d'autres paramètres).

Je précise que j'ai essayé de réintégrer le code complet à la place du exit sub, mais je dois me mélanger les pinceaux et je me retrouve avec des conflits de boucle.

(précision je suis sur Excel 2003)

Merci d'avance ;)

Dim c As String
Dim b, d As Integer

Sub 1()
Dim objWorkbookCible As Workbook
Dim objworkbooksource As Workbook
Set objworkbooksource = ActiveWorkbook
Worksheets(7).Copy
Set objWorkbookCible = ActiveWorkbook
MaDate = Format(Date, "YYYY-MM-DD")
ActiveWorkbook.SaveAs Filename:="C:\Dossier1\" & "Transmission 1 " & MaDate & ".xls"

For b = 3 To 300
Cells(b, 7).Select
c = Selection.Value
If c = "" Then
ActiveSheet.Columns(6).EntireColumn.Delete
ActiveSheet.Columns(26).EntireColumn.Delete
ActiveSheet.Columns(25).EntireColumn.Delete
ActiveSheet.Columns(24).EntireColumn.Delete
ActiveSheet.Columns(23).EntireColumn.Delete
ActiveSheet.Columns(22).EntireColumn.Delete
Exit Sub
End If
Cells(b, 22).Select
d = Selection.Value
If d = 4 Then
ActiveSheet.Rows(b).EntireRow.Delete
b = b - 1
End If
Next
End Sub

12 réponses

  1. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    Simplement le mettre sur https://www.cjoint.com/ et poster le lien !

    1
  2. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    Lancer la procédure par touche [Ctrl+Shift+W].
    Au passage j'ai adapté vos procédures voir module [lepingou] avec procédure principale [classeurparunité] (les anciennes sont dans le module [Module1]).
    Votre fichier : https://www.cjoint.com/?3Gqxnv3FJbf

    1
  3. melanie1324 Messages postés 1561 Statut Membre 156
     
    coucou,

    comme je n'ai pas tout compris, je vais te donner un bout de solution :

    Dim c As String
    Dim b, d As Integer

    Sub 1()
    Dim objWorkbookCible As Workbook
    Dim objworkbooksource As Workbook
    Set objworkbooksource = ActiveWorkbook
    Worksheets(7).Copy
    Set objWorkbookCible = ActiveWorkbook
    MaDate = Format(Date, "YYYY-MM-DD")
    ActiveWorkbook.SaveAs Filename:="C:\Dossier1\" & "Transmission 1 " & MaDate & ".xls"

    b= 3

    Cells(b, 7).Select

    do while b< 300
    if cells(b,7) ="" then
    ActiveSheet.Columns(6).EntireColumn.Delete
    ActiveSheet.Columns(26).EntireColumn.Delete
    ActiveSheet.Columns(25).EntireColumn.Delete
    ActiveSheet.Columns(24).EntireColumn.Delete
    ActiveSheet.Columns(23).EntireColumn.Delete
    ActiveSheet.Columns(22).EntireColumn.Delete

    else
    Cells(b, 22).Select
    d = Selection.Value
    If d = 4 Then
    ActiveSheet.Rows(b).EntireRow.Delete
    b = b - 1
    End If
    b=b+1
    loop
    End Sub
    0
  4. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    Juste au passage, il me semble que la [source] et [cible] font référence au même classeur.... !
    Set objworkbooksource = ActiveWorkbook 
    Worksheets(7).Copy 
    Set objWorkbookCible = ActiveWorkbook


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

    Posez votre question
  6. Didier
     
    Bonjour,

    Tout d'abord merci d'avoir jeté un oeil sur mon cas ;)

    Donc pour préciser, le code que j'ai mis marche très bien, le seul problème c'est que je veux le faire 3 fois en générant à chaque fois un fichier où je vais supprimer des lignes et colonnes différentes (pour les colonnes je lui ai mis manuellement et pour les lignes c'est la partie qui va chercher la valeur en colonne 22). Le tout en passant à la tâche suivante quand il arrive en bas du tableau (donc quand il détecte une ligne vide)

    melanie1324 : dans ta réponse le problème est qu'il va me supprimer des colonnes à chaque fois qu'il détecte une ligne vierge, du coup à la fin toutes mes colonnes à partir de la 6ème seront supprimée. (j'ai rajouté un End if avant le b=b+1 à la fin)

    Le pingou : possible, c'est un bout de code que j'ai récupéré sur un forum et là j'avoue que je ne comprends pas tout ^^

    Je crois que le plus simple serait de vous montrer le tableau mais je ne vois pas où on peu joindre un fichier excel (peut être faut il être enregistré ?)
    0
  7. Didier
     
    Tiens je ne connaissais pas ce site de partage de fichier, merci ^^

    Donc j'ai mis le fichier, il est dispo à cette adresse :
    http://cjoint.com/?0Gqoo7X3uFd

    Bien entendu j'ai remplacé le contenu de mes feuilles par des suites de caractères au hasard vue que c'était un document de travail.

    Donc dedans il y a 4 sub : les 3 que je voudrais fusionner en une seule et celle de melanie1324 que j'ai nommé test.
    0
  8. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    Merci pour le fichier.
    A première vue vous avez beaucoup de cellules fusionnées ce qui n'est pas souhaitable (difficulté de traitement).
    En survolant vos procédures il n'est pas possible de déterminer à qu'elle feuille elles sont appliquées, pouvez-vous le préciser !

    0
  9. Didier
     
    Pour les cellules fusionnées, je ne vais pas pouvoir faire autrement malheureusement :/

    Les procédures sont appliquées à la feuille 2013, mais de toute façon pour l'exemple j'ai copié toutes les feuilles à l'identique ;)
    0
  10. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    En relisant votre premier poste, je suppose que vous désirez, sur la base de la feuille [2013], créer 3 nouveaux classeurs avec une seule feuille formatée avec les informations nécessaire à chacune des 3 unités. Et ceci en une seule commande .... !
    Est-ce bien cela..... ?

    Salutations.
    Le Pingou
    0
  11. Didier
     
    Exactement, pour l'instant je suis obligé de le faire indépendamment en exécutant l'une après l'autre les 3 macros, mais j'aimerais pouvoir le faire en un seul clic ^^
    0
  12. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    Merci, c'est clair, patience.

    0
  13. Didier
     
    Bonjour,

    Je viens juste d'avoir le temps de regarder.

    et bien, comment dire, euh : LA CLASSE !!!!

    Maintenant je vais m'amuser à lire le code pour comprendre comment c'est possible de faire une macro qui marche nickel ^^

    Merci beaucoup !!!
    0
    1. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
       
      Bonjour,
      Merci.
      En marge, les 3 procédures sont utilisables séparément sans modification, il suffit de la lancer directement par un bouton commande ...¨
      Salutations
      Le Pingou
      0