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,

    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
  2. 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
  3. ok pas de soucis moi aussi je regarde, que c'est beau le rugby
    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. 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. 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/
      2. 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