If then goto

jsl72

XLDnaute Junior
Bonjours à tous,

Je cherche sur le forum, mais ne trouve pas exactement ce qu'il me faudrait.

Sujet:
sélection de H10, si vide aller à l'étiquette Toto.
Si H10 n'est pas vide, écrire "Enregistrements rejetés" et continuer

J'ai fait du bricolage et mon code ne fonctionne pas

If ("H10") = """" Then GoTo Toto
' H10 n'est pas vide, écrire Enregistrements rejetés
Range("H10").FormulaR1C1 = "Enregistrements rejetés"
End If
Toto:
'code ici

Merci à celui qui prendra un peu de son temps pour m'aider.

Cordialement.
Joël
 

Dull

XLDnaute Barbatruc
Re : If then goto

Salut jsl72, le Forum

Pas sur d'avoir compris mais si j'écris le code "stricto sensu" ce que tu demande cela donnerait ça

Code:
Sub EssAi()

If Range("H10") = "" Then GoTo Toto
' H10 n'est pas vide, écrire Enregistrements rejetés
Range("H10") = "Enregistrements rejetés": Exit Sub
Toto:
'code ici
MsgBox "Ok Réussi"
End Sub

A tester

EDITION:
Edit : bonjour Dull, heureux de te croiser sur ce fil.

Moi de même Papou-Net :) ceci dit je suis tout à fait d'accord avec toi: nota mon "stricto sensu" :p

Bonne Journée
 
Dernière édition:

Papou-net

XLDnaute Barbatruc
Re : If then goto

Bonjour jsl72,

Un conseil : les Goto sont à proscrire, et ce depuis la naissance du Basic.

Il y a pratiquement toujours moyen de les éviter, comme par exemple :

Code:
If Not ("H10") = """" Then
   ' H10 n'est pas vide, écrire Enregistrements rejetés
    Range("H10").FormulaR1C1 = "Enregistrements rejetés"
    End If
'code ici

Cordialement.

Edit : bonjour Dull, heureux de te croiser sur ce fil.
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : If then goto

Bonjour à tous

Pour le fun, (et le plaisir de croiser des vieux de la vieille ;) )
Code:
Sub a()
Application.Goto "R10C8"
ActiveCell = IIf(IsEmpty(ActiveCell), "Element rejété", vbNullString)
MsgBox "suite macro"
End Sub
Code:
Sub b()
Application.Goto "R10C8"
Select Case ActiveCell.Value
    Case Is <> ""
    MsgBox "suite de la macro"
    Case Else
    ActiveCell = "Element rejeté"
End Select
End Sub

PS: Je crois que la macro a n'est pas vraiment valide si on suit la logique de la question, non ?
 

jsl72

XLDnaute Junior
Re : If then goto

Bonsoir l'équipe des "Barbatruc",

Merci pour votre aide, je n'ai plus qu'à adapter un code pour me sortir d'affaire.

J'ai bien retenu un conseil: les Goto sont à proscrire, et ce depuis la naissance du Basic.

Bonne soirée à vous et merci encore.

Joël
 

jsl72

XLDnaute Junior
Re : If then goto

Bonsoir,

Je reviens sur le fil.

Je me suis certainement mal expliqué dans l'exopsé de ma problématique.
J'ai essayé tous vos codes, procédé à des adaptations et rien à faire, je ne parviens pas au résultat escompté.

Code:
Sub EssAi()

If Range("H10") = "" Then GoTo Toto
' H10 n'est pas vide, écrire Enregistrements rejetés
Range("H10") = "Enregistrements rejetés": Exit Sub
Toto:
'code ici
MsgBox "Ok Réussi"
End Sub
Cette ligne ne s'exécute pas correctement.
If Range("H10") = "" Then GoTo Toto

Pour une meilleure compréhension j'ai joint un fichier.

Merci par avance.

Joël
 

Pièces jointes

  • IF THEN GOTO.xls
    42 KB · Affichages: 44

Papou-net

XLDnaute Barbatruc
Re : If then goto

RE Joël,

Je ne comprends pas, ton code fonctionne parfaitement : si H10 est vide, le message "OK Réussi" s'affiche, sinon "Enregistrements terminés" s'inscrit dans la cellule. De plus, j'ai beau lire et relire ton code "Sub EssAi()", je ne décèle aucune erreur.

Par contre, dans la macro "IF_THEN_GOTO()", les références de cellule ne correspondent pas à celles de tes commentaires sur la feuille de calcul. Ne serait-ce pas plutôt :

Code:
Sub IF_THEN_GOTO()

Range("H10:L13").Select
    Selection.Delete Shift:=xlUp
    
 Application.Goto "R10C8"
Select Case ActiveCell.Value
    Case Is <> ""
    MsgBox "suite de la macro"
    Case Else
    Range("H10") = "Enregistrements rejetés"
End Select
...
...
End Sub
A +

Cordialement.
 

Staple1600

XLDnaute Barbatruc
Re : If then goto

Re

C'est commence que j'aurai mixer ton code initial et mon exemple précédent
Mais si tu expliquais plus en détail ce que tu souhaites faire, j'y verrais plus clair ;)
Code VBA:
Sub IF_THEN_GOTO()
Range("H12:L15").Delete Shift:=xlUp
Application.Goto "R12C8"
Select Case ActiveCell.Value
Case Is <> ""
Columns("I:K").ColumnWidth = 23.29
Columns("H:H").ColumnWidth = 5.43
Range("A1:A9").Copy
Range("H1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("L1,H2,H6,H9,H11").FormulaR1C1 = " "
ActiveSheet.PageSetup.PrintArea = [H1].CurrentRegion.Address
With ActiveSheet.PageSetup
.LeftFooter = "&F imprimé le &D à &T"
.CenterFooter = "&P / &N"
.RightFooter = "Guichet"
.Orientation = xlLandscape
.PaperSize = xlPaperA4
.PrintErrors = xlPrintErrorsDisplayed
End With
Case Else
Range("H10") = "Enregistrements rejetés"
End Select
End Sub

EDITION: Bonsoir Papou-net, je t'avais point vu passé ;)
 

Si...

XLDnaute Barbatruc
Re : If then goto

salut

Cela fait plusieurs messages dans lesquels je lis 'à proscrire', 'A BANNIR' …
Pourquoi être aussi catégorique, intransigeant ?
On a des problèmes avec des outils quand on les utilise mal !
Faut-il pour autant les mettre à la poubelle ? Mieux vaut, à mon avis, apprendre à s’en servir à bon escient ?
Que feraient certains censeurs avec "On Error Resume Next" agrémenté de " On Error GoTo 0", que l’on rencontre très souvent ?

En l'occurence, ici, c'est ton test qui est mal programmé !
Vois Si…ton code modifié comme suit te convient (Select Case est bien plus intéressant quand il y a plus de 2 cas)
Code:
Sub Quoi()
    [H10:L13].Delete Shift:=xlUp
    If [H10] <> "" Then
        [H10] = "Enregistrements rejetés" 'ici ???
        Columns("I:K").ColumnWidth = 23.29
        Columns(8).ColumnWidth = 5.43
        With ActiveSheet.PageSetup
            .PrintArea = [H10].CurrentRegion.Address
            .LeftFooter = "&F    imprimé le &D  à &T"
            .CenterFooter = "&P / &N"
            .RightFooter = "Guichet Qualité de Fourniture"
            .Orientation = xlLandscape
            .PaperSize = xlPaperA4
            .PrintErrors = xlPrintErrorsDisplayed
        End With
        Application.Dialogs(xlDialogPrint).Show
    End If
    'suite automatique si H10 est vide 
End Sub
 

Papou-net

XLDnaute Barbatruc
Re : If then goto

Cela fait plusieurs messages dans lesquels je lis 'à proscrire', 'A BANNIR' …
Pourquoi être aussi catégorique, intransigeant ?
On a des problèmes avec des outils quand on les utilise mal !
Faut-il pour autant les mettre à la poubelle ? Mieux vaut, à mon avis, apprendre à s’en servir à bon escient ?
...

Bonjour à tous,

Si... seulement tu avais raison ?

On n'a pas seulement des problèmes quand on utilise mal les outils mais surtout quand on les utilise à mauvais escient. Ce qui, convenons-en, semble être le cas qui nous préoccupe ici. D'autant que la structure de la macro est très simple et qu'elle fonctionne correctement (je parle du code du #6). Si le résultat n'est pas celui escompté par notre ami Joël, c'est sûrement dû à une erreur de logique. Ou alors, je n'ai pas correctement cerné la question.

Pour en revenir à l'utilisation des outils, l'instruction Goto a été intégrée au Basic à ses débuts, quand le déroulement des programmes était uniquement séquentiel. Depuis, ce langage adapté à la Programmation Orientée Objet s'est suffisamment étoffé pour que cette instruction puisse être aujourd'hui considérée comme caduque. Je programmais Basic depuis ses débuts, ou presque, ce qui fait une bonne trentaine d'année. A cette époque déjà, on considérait que Goto était la conséquence d'une mauvaise analyse de la programmation. Depuis plus de huit ans que j'utilise VBA, je n'ai jamais eu besoin d'y recourir.

J'émettrais des réserves quant aux "On Error..." qu'il m'est arrivé d'insérer parfois, mais uniquement par paresse et pour ne pas avoir à créer une usine à gaz de traitement d'erreurs. Mais là encore, dans 99,99% des cas, je pense qu'on peut s'en affranchir.

Cet avis m'est, bien sûr, tout personnel et il n'est pas dans mes intentions d'entamer une polémique à ce sujet. Chacun fait comme il le conçoit, il n'est pas de solution universelle dans ce domaine.

Attendons de voir si Joël a trouvé la solution qui lui convient.

Bien cordialement.
 

Si...

XLDnaute Barbatruc
Re : If then goto

salut

Pour en revenir à l'utilisation des outils, l'instruction Goto ...

Je pensais à tous les interdits que j’ai rencontrés depuis le Goto juqu’au EnableEVents, en passant par le RowSource et d’autres encore.

J'émettrais des réserves quant aux "On Error..." qu'il m'est arrivé d'insérer parfois, mais uniquement par paresse ...

Pourquoi, par paresse, l’admettre ici et pas là ? Je suis autant paresseux avec 3 lignes qu’avec 50 à écrire :eek:.

Mais là encore, dans 99,99% des cas, je pense qu'on peut s'en affranchir.

Cet avis m'est, bien sûr, tout personnel et il n'est pas dans mes intentions d'entamer une polémique à ce sujet. Chacun fait comme il le conçoit, il n'est pas de solution universelle dans ce domaine.

C’est aussi ma façon de penser ! Je laisse donc, aux autres, la liberté de penser et d'agir :D.
 

jsl72

XLDnaute Junior
Re : If then goto

Bonsoir le fil,

Vous vous êtes investis pour moi, je vous en remercie pleinement.
C'est tardivement que j'arrive sur le forum ce soir et à la découverte de ce que vous m'avez concocté c'est un peu la prise de tête.
Hier j'ai voulu faire vite et je me suis certainement raté dans mon fichier attaché que j'ai modifié par rapport à l'original (confidentialité oblige).
Il faut que je réfléchisse à tête reposée pour repartir de bon pied.
Je vous rends compte de toute manière.
Merci encore.
A bientôt sur le fil.
Joël
 

jsl72

XLDnaute Junior
Re : If then

Bonsoir le fil,

De retour après un petit break qui m'a permis de repartir de bon pied.
En fin de compte j'ai gardé la structure de mon fichier IF THEN GOTO.xls.
Une fois remis d'équerre je l'ai rebaptisé If Then.xlsm

J'ai supprimé GOTO pour faire plaisir à Papou-net.

C'était tout simple, seulement mes explications avec "évènements rejetés" vous ont induits en erreur.
La plupart de vos codes faisaient l'inverse de ce que je recherchais.
Ils ne sont pas perdus pour autant, ils auront leur utilité le moment venu.

Ci-attaché le fichier.

Merci encore pour l'aide que vous m'avez apportée.
Bonne soirée.

Joël
 

Pièces jointes

  • If Then.xlsm
    17.6 KB · Affichages: 37
  • If Then.xlsm
    17.6 KB · Affichages: 41
  • If Then.xlsm
    17.6 KB · Affichages: 43

jsl72

XLDnaute Junior
Re : If then goto

Bonsoir à tous,

Je reviens vers vous, pour un problème qui découle de l'utilisation de If Then.xlsm
En effet quand je lance la macro If Then, à un moment j'ai la possibilité d'imprimer ou de voir l'aperçu.
C'est là que ce n'est pas clair.

Fichiers joints
- BUG impression.xls ==> pour une meilleure explication du BUG.
- If Then.xlsm ==> pour tester le BUG.
Si vous aviez une solution pour rendre le bouton "Aperçu" inactif.

Merci par avance pour votre contribution.
Cordialement
Joël
 

Pièces jointes

  • BUG impression.xls
    91.5 KB · Affichages: 40
  • If Then.xlsm
    17.6 KB · Affichages: 33
  • If Then.xlsm
    17.6 KB · Affichages: 39
  • If Then.xlsm
    17.6 KB · Affichages: 38

Discussions similaires

Statistiques des forums

Discussions
312 493
Messages
2 088 956
Membres
103 990
dernier inscrit
lamiadebz