Problème avec call

Résolu/Fermé
eric2027 Messages postés 289 Date d'inscription vendredi 25 juin 2010 Statut Membre Dernière intervention 31 août 2017 - 18 mars 2017 à 09:12
eric2027 Messages postés 289 Date d'inscription vendredi 25 juin 2010 Statut Membre Dernière intervention 31 août 2017 - 19 mars 2017 à 09:22
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

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 18/03/2017 à 10:11
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
0
yg_be Messages postés 22774 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 10 mai 2024 1 481
18 mars 2017 à 10:30
bonjour, pourrais-tu partager ton exemple complet?
0
eric2027 Messages postés 289 Date d'inscription vendredi 25 juin 2010 Statut Membre Dernière intervention 31 août 2017 6
18 mars 2017 à 10:34
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
0
yg_be Messages postés 22774 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 10 mai 2024 1 481
18 mars 2017 à 11:03
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
0
eric2027 Messages postés 289 Date d'inscription vendredi 25 juin 2010 Statut Membre Dernière intervention 31 août 2017 6
18 mars 2017 à 11:26
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
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303 > eric2027 Messages postés 289 Date d'inscription vendredi 25 juin 2010 Statut Membre Dernière intervention 31 août 2017
18 mars 2017 à 12:11
T'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
0
eric2027 Messages postés 289 Date d'inscription vendredi 25 juin 2010 Statut Membre Dernière intervention 31 août 2017 6 > michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023
18 mars 2017 à 13:24
voilà, 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/
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
18 mars 2017 à 15:46
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é
0
eric2027 Messages postés 289 Date d'inscription vendredi 25 juin 2010 Statut Membre Dernière intervention 31 août 2017 6
18 mars 2017 à 16:32
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
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
18 mars 2017 à 16:37
OK, je regarde le match (rugby) et te propose un truc après
0

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

Posez votre question
eric2027 Messages postés 289 Date d'inscription vendredi 25 juin 2010 Statut Membre Dernière intervention 31 août 2017 6
18 mars 2017 à 16:49
ok pas de soucis moi aussi je regarde, que c'est beau le rugby
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
18 mars 2017 à 18:58
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
0
eric2027 Messages postés 289 Date d'inscription vendredi 25 juin 2010 Statut Membre Dernière intervention 31 août 2017 6
Modifié par eric2027 le 19/03/2017 à 08:43
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
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
19 mars 2017 à 08:47
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


0
eric2027 Messages postés 289 Date d'inscription vendredi 25 juin 2010 Statut Membre Dernière intervention 31 août 2017 6
19 mars 2017 à 09:22
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
0