Problème avec call

Résolu
Bonjour le Forum,

Je suis tombé sur ce post
sub abc
end sub
------------
sub def
end sub
------------
sub ghi
end sub
------------

Si tu veux exécuter à l'affilée les 3 procédures tu dois en créer une quatrième qui appelle les trois autres avec la fonction call. Exemple:

sub jkl
call abc
call def
call ghi
end sub

mais cela ne m'a pas donné le résultat escompté, j'ai un message qui me donne
erreur de compilation
sub ou fonction non défini

Pourriez me dire pourquoi ?

mon exemple :

Sub Supprimer_les_lignes_vides()

Range("a4:a65536").SpecialCells(xlCellTypeBlanks).EntireRow.Delete

Call proprietes
Range("a6:af100").Font.Size = 8
Range("a6:af100").Font.Name = "trebuchet MS"
Range("a6:af100").HorizontalAlignment = xlCenter
Range("a6:af100").VerticalAlignment = xlCenter
Range("a6:af100").Borders.Value =

Par avance merci pour vos réponses

Bien cordialement

7 réponses

  1. Contributeur
    bonjour
    comme tu nous montres pas les lignes de la procédure "proprietes" .....
    a moins que cette procédure soit la mise au format des cellules a6:af100, dance cas base toi sur ce petit exemple tout c...qui marche
    Option Explicit
    Sub essai()
    Call coucou
    MsgBox "bonsoir"
    End Sub

    Sub coucou()
    MsgBox "bonjour"
    End Sub

     Michel
    1. Contributeur
      bonjour, pourrais-tu partager ton exemple complet?
    2. Bonjour michel_m

      C'était au départ c'était ça, 4 modules que je voudrais réunir en 1 parce que cela me fait 4 boutons, un peu galère

      le code avec developpeur

      Sub Supprimer_les_lignes_vides()

      Range("a4:a65536").SpecialCells(xlCellTypeBlanks).EntireRow.Delete

      Sub proprietes()
      Range("a6:af100").Font.Size = 8
      Range("a6:af100").Font.Name = "trebuchet MS"
      Range("a6:af100").HorizontalAlignment = xlCenter
      Range("a6:af100").VerticalAlignment = xlCenter
      Range("a6:af100").Borders.Value = 1

      Sub Modifie()
      Dim Cel As Range
      For Each Cel In Range("A6", Range("A6").End(xlDown))
      If IsNumeric(Cel) Then
      Cel.ClearContents
      End If
      Next Cel

      Sub couper()

      Range("A6:A100").Select
      Selection.Cut
      Range("A7").Select
      ActiveSheet.Paste
      End Sub

      Voilà, si tu pouvais m'orienté vers la bonne marche à suivre ce serait cool

      Merci
  2. Contributeur
    par exemple:
    Sub Supprimer_les_lignes_vides()
    
    Range("a4:a65536").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    
    End Sub
    
    Sub proprietes()
    Range("a6:af100").Font.Size = 8
    Range("a6:af100").Font.Name = "trebuchet MS"
    Range("a6:af100").HorizontalAlignment = xlCenter
    Range("a6:af100").VerticalAlignment = xlCenter
    Range("a6:af100").Borders.Value = 1
    End Sub
    
    
    Sub Modifie()
    Dim Cel As Range
    For Each Cel In Range("A6", Range("A6").End(xlDown))
    If IsNumeric(Cel) Then
    Cel.ClearContents
    End If
    Next Cel
    
    End Sub
    Sub couper()
    
    Range("A6:A100").Select
    Selection.Cut
    Range("A7").Select
    ActiveSheet.Paste
    End Sub
    Sub letout()
    Call Supprimer_les_lignes_vides
    Call proprietes
    Call Modifie
    Call couper
    End Sub
    1. C 'est super de m'avoir orienté, mais il faut que je clique 2 fois sur le bouton et en plus cela coupe en a5 au lieu de a6
    2. Contributeur
      @eric2027T'es sûr de l'ordre de tes macros ?

      si on supprime des lignes au départ cela ne risque t 'il pas de tout fausser (A5 au lieu de A6) ? d'autre part, tu vides les cellules numériques dans la colonne A...
      excuse moi mais je ne comprend pas ce que tu veux faire :-/

      pour ma part et dans ton cas, je ne vois pas l'intérêt d'utiliser plusieurs codes...on utilise cette méthode pour appeler des macros paramétrées ou des bibliothèques perso.

      au besoin
      Mettre le classeur sans données confidentielles en pièce jointe sur « mon-partage.fr »
      et faire un clic droit-coller le raccourci dans votre message

      Dans l’attente
    3. @michel_mvoilà, dis moi si tu as accès à mon fichier c'est la première fois que j'utilise ce site

      https://mon-partage.fr/f/avggOMzm/
  3. Contributeur
    post de ygbe détruit par erreur, excuses...

    pourquoi a6:af100 ?
    correspond à quoi ?
    combien de lignes dans la réalité ?

    il faut détruire les lignes avec 123 et mettre les 256 sur la ligne eric ?

    pas très futé de mettre les m^mes noms et nombre surtout que la finalité est + importante

    envoi pas sérieux :-(

    sinon le code ne présente pas de difficulté
    1. Re

      il faut détruire les lignes avec 123 et mettre les 256 sur la ligne eric ?

      C'est tout a fait ça,
      pourquoi a6:af100 ? : a6:af100 correspondant aujourd'hui à ma base, celle ci peut évolué bien sûr

      correspond à quoi ? correspond au personnel

      combien de lignes dans la réalité ? pour l'instant c'est 100 en espérant que plus tard, il y aura plus de personnel

      Voilà les réponses à tes questions
      1. Contributeur
        OK, je regarde le match (rugby) et te propose un truc après
    2. ok pas de soucis moi aussi je regarde, que c'est beau le rugby
      1. Contributeur
        Quel Match mais l'arbitre aurait du siffler essai de pénalité

        bon je rejoins Irlande-Angleterre en spèrant que les irlandais vont châtier l'Anglais :-D

        proposition de code (unique)
        Option Explicit
        '----------------------------------
        Sub eric2707()
        Dim Derlig As Integer, T_in, Cptr As Integer, Col As Byte

        Application.ScreenUpdating = False
        With ActiveSheet
        Derlig = .Columns("A").Find(what:="*", searchdirection:=xlPrevious).Row
        T_in = .Range("A6:AF" & Derlig)
        For Cptr = 1 To UBound(T_in) - 1
        'If Cptr < 20 Then
        If IsNumeric(T_in(Cptr + 1, 1)) Then T_in(Cptr + 1, 1) = ""
        For Col = 2 To 30
        T_in(Cptr, Col) = T_in(Cptr + 1, Col)
        Next
        'End If
        Next
        'restitution
        .Range("A6:AF1000").Clear
        With .Range("A6:AF" & Derlig)
        .Value = T_in
        .Font.Size = 8
        .Font.Name = "trebuchet MS"
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .Borders.Weight = xlThin
        End With
        .Range("A6:A" & Derlig).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
        End With
        End Sub


        a demain pour tes commentaires
        1. Je suis tout à fait d'accord toi, il y avait essai de pénalité mais je pense que l'arbitre attendait que les français fassent une faute, il y avait la famille royale mais si ça avait été le cas, ça aurait été un match truqué heureusement que les français ont été patient et n'ont pas fait de faute holala le scandale que ça aurait fait, les irlandais ont été pus intelligent que les anglais et je trouve que leur jeu est à leurs images, volontaires, solidaires et quel jeu et la cuillère de bois pour les italiens décidément, ils ne décollent pas

          Ta macro est génial par contre quand j'ai l'ai mis avec un autre fichier, ça me beug au niveau de :

          .Range("A6:A" & Derlig).SpecialCells(xlCellTypeBlanks).EntireRow.Delete, en jaune

          et bizarrement toute seule cela fonctionne nickel

          j'ai essayé de comprendre mais c'est le flou total pour moi.
          Pourrais-tu me traduire les différences phases qui ont remplacé mon code

          Je te remercie
      2. Contributeur
        Bonjour,

        Effectivement, je n'avais pas pensé au coup de la famille royale, surtout que l'arbitre était anglais...
        Dans les pubs gallois, la tristesse d'avoir perdu a certainement été balayée à l'annonce de la défaite anglaise !!! (expérience vécue il y a quelques années) :o)

        la macro commentée
        Option Explicit
        '----------------------------------
        Sub Reorganiser_donnees()
        Dim Derlig As Integer, T_in, Cptr As Integer, Col As Byte

        '-----------------------------------initialisations
        'fige le défilement de l'écran: confort visuel & rapidité
        Application.ScreenUpdating = False

        With ActiveSheet
        'dernière ligne utilisée
        Derlig = .Columns("A").Find(what:="*", searchdirection:=xlPrevious).Row
        utilisation d 'une variable-tableau--> mise en mémoire Ram pour rapidité d'action (env 80x)
        T_in = .Range("A6:AF" & Derlig)

        '---------------------------------traitement
        For Cptr = 1 To UBound(T_in) - 1
        'si valeur numérique ligne dessous---> vide ligne dessous
        If IsNumeric(T_in(Cptr + 1, 1)) Then T_in(Cptr + 1, 1) = ""
        'remplissage de ligne dans T_in
        For Col = 2 To 30
        T_in(Cptr, Col) = T_in(Cptr + 1, Col) 'cptr+1: transfert ligne du dessous
        Next
        Next

        '------------------------------------------restitution
        .Range("A6:AF1000").Clear 'efface tableau initial
        With .Range("A6:AF" & Derlig)
        .Value = T_in ' restitution de T_in
        .Font.Size = 8
        .Font.Name = "trebuchet MS"
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .Borders.Weight = xlThin
        End With
        'destruction lignes vides
        .Range("A6:A" & Derlig).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
        End With
        End Sub


        1. Je te remercie pour tout ton savoir, je vais disséquer tout ça, je crois savoir pourquoi ça beug, j'ai mis ta macro avec un fichier qui en a déjà une et ça rentre en conflit, mais c'est pas grave je ferais 2 manip au lieu d'une.
          Un grand merci à toi
          Cordialement
          eric2027