Se connecter avec
S'enregistrer | Connectez-vous

or et and en visual basic help

Dernière réponse : dans Programmation
Lassé par la pub ? Créez un compte
Expert Programmation

bien sur que si ça va or :
  1. if expression1 or expression2 then

expression1 et expression2 sont deux expressions qui peuvent être évalués à True ou False, par exemple
  1. Cel.Offset(i, 2) = ("toto")
est UNE SEULE expression.
dans ton cas il faut plutot
  1. if Cel.Offset(i, 2) = "toto" or Cel.Offset(i, 2) = "Titi"

ouai c bon sa marche merci
mais maintenant g un nouveau probleme quand on fait un "if" il faut tout logé sur une ligne et moi j'ai environ 100 "or" a mettre dans man "if" et quand jarrive au bou de la ligne j'ai plus assez de place comment je peut faire .peut etre il y a une option qui donne la possibilité de faire une ligne infini . si vous avez la soluce aidez moi svp encore merci

il faut mettre un underscore ( _ ) espacé des autres caractères pour pouvoir passer à ligne d'en dessous sans rompre ton code
En reprenant le code de Batchy:
  1. if Cel.Offset(i, 2) = "toto" _
  2. or Cel.Offset(i, 2) = "Titi"

Expert Programmation

Oui, Nova, c'est comme ça.

Gizmo, excuse-moi, mais si tu en es à dépasser les capacités de VB, c'est que soit tu as vraiment une bonne raison (peu propable), soit tu as une factorisation possible (très probable), soit tu as une grosse erreur de logique dans ton programme (Je ne te connais pas mais si il y a caca dans ton pseudo, c'est peut être en rapport avec ta façon de programmer :D  ).

Le cas intéressant est bien entendu la factorisation : Se servir des intervalles, des inégalités, des lois de morgan...

scuse moi zeb mais je débute en programmation et je fai seulement comme je sai faire alors stp epargne t remarques . sinon non c'est pas une factorisation c'est que j'ai pas trouver otr chose pour fair ce k j voulai . sinon merci nova sa ma bien aider

zeb à raison, pour avoir une ligne qui dépasse la feuille de prog, ca doit vraiment être très long, et si tu connais de Morgan c'est sur que tu doit pouvoir le raccourcir. :p 
si jamais t'en as besoin, poste toute ta ligne de if, voir ce qu'on peut faire

Faut aussi mettre [/code] à la fin de ton code. Kangol serait là, il serait en train de te taper sur les doigts.
louloukg a dit :
If Not (Cel.Offset(i, 2) ="" Or Cel.Offset(i, 2) ="" Or Cel.Offset(i, 2) ="" Or................Cel.Offset(i, 2) ="") Then
pour qu'on puisse t'aider, il faut qu'on connaisse tes conditions, ce qu'il y a entre les "" car là ça sert franchement à rien ce que tu nous à mis.
T'as rempli tout une ligne en testant des conditions sur une seule case!!! doit vraiment y avoir un problème.

Tes trucs genre "c'est classé top secret, secret d'état, sur la tete de ma mère faut pas que j'y montre", à part si il contienne une facon de trouver qui à assassiné Kennedy, ca craint rien ici... :heink: 

c ke chui en stage et les données des sur une CPAM mais bon je pense pas que ca gene alors voila tout le code tu vera bien :
  1. 'Déclaration du tableau
  2.  
  3. Dim Application() As String
  4. Dim i As Integer
  5. Dim j As Integer 'Nbre éléments du tableau
  6. Dim Cel As Range
  7.  
  8. 'On affecte la cellule "A1" à la variable Cel
  9.  
  10. Set Cel = Range("A1")
  11.  
  12. 'Boucle pour remplir le tableau
  13.  
  14. For i = 1 To 250
  15. If Not (Cel.Offset(i, 2) = "Aides à la télétransmission" Or Cel.Offset(i, 2) = "BDO famille" Or Cel.Offset(i, 2) = "WEBMATIQUE" Or Cel.Offset(i, 2) = "SYNERGIE" Or Cel.Offset(i, 2) = "SGCAM" Or Cel.Offset(i, 2) = "RNIAM" Or Cel.Offset(i, 2) = "Qualiflux Recyclage" Or Cel.Offset(i, 2) = "Qualiflux Fonctionnel" Or Cel.Offset(i, 2) = "PROGRES POSTE" Or Cel.Offset(i, 2) = "PROGRES courrier" Or Cel.Offset(i, 2) = "PPN PROGRES PRESTATIONS NATURE" Or Cel.Offset(i, 2) = "PAIEMENT MANDATEMENT" Or Cel.Offset(i, 2) = "ORPHEE" Or Cel.Offset(i, 2) = "NOEMIE" Or Cel.Offset(i, 2) = "MUTUELLES" Or Cel.Offset(i, 2) = "MEDIALOG 2" Or Cel.Offset(i, 2) = "Médecin Traitant" Or Cel.Offset(i, 2) = "HOSPICUMU" Or Cel.Offset(i, 2) = "Guide maternité" Or Cel.Offset(i, 2) = "Guichet Automatique" Or Cel.Offset(i, 2) = "Gestion du Fichier des Mutualistes" Or Cel.Offset(i, 2) = "FNPS" Or Cel.Offset(i, 2) = "EURYDICE" Or Cel.Offset(i, 2) = "ESOPE : Impression" _
  16. Or Cel.Offset(i, 2) = "Echanges Tiers" Or Cel.Offset(i, 2) = "ESOPE : Impression " Or Cel.Offset(i, 2) = "Echanges Tiers" Or Cel.Offset(i, 2) = "DSIJ Station locale" Or Cel.Offset(i, 2) = "ADAE: Gestion des déménagements" Or Cel.Offset(i, 2) = "Annuaire FEUVERT" Or Cel.Offset(i, 2) = "Application télématique BDO" Or Cel.Offset(i, 2) = "Archives Consultables consultations" Or Cel.Offset(i, 2) = "Attestations de droits" Or Cel.Offset(i, 2) = "BDS (base de données de services)" Or Cel.Offset(i, 2) = "Bornes Sesam Vitale" Or Cel.Offset(i, 2) = "CHISTO" Or Cel.Offset(i, 2) = "CMU Base ressources" Or Cel.Offset(i, 2) = "Contrôle Nomenclature Actes Product." Or Cel.Offset(i, 2) = "DETTES (gestion centralisée des dettes créances)" Or Cel.Offset(i, 2) = "DSIJ - Site déclaratif Net_DSIJ" Or Cel.Offset(i, 2) = "DSIJ Station Nationale" Or Cel.Offset(i, 2) = "Domiciliations bancaires" Or Cel.Offset(i, 2) = "ESOPE : Intranet éditique" Or Cel.Offset(i, 2) = "ESOPE : Organisme emetteur" _
  17. Or Cel.Offset(i, 2) = "ESOPE : accès aux documents transmis" Or Cel.Offset(i, 2) = "Elections INSEE" Or Cel.Offset(i, 2) = "Epuration BDO" Or Cel.Offset(i, 2) = "FA FAC-BDO" Or Cel.Offset(i, 2) = "FA Traitement Mensuel" Or Cel.Offset(i, 2) = "FIAB" Or Cel.Offset(i, 2) = "Flux UNEDIC et CNAF" Or Cel.Offset(i, 2) = "Frontaliers migrants" Or Cel.Offset(i, 2) = "GESPAN" Or Cel.Offset(i, 2) = "GEST. DE LA PRODUCTION ET DU CONTROLE" Or Cel.Offset(i, 2) = "GESTION DU FICHIER GHS" Or Cel.Offset(i, 2) = "Gestion des compteurs" Or Cel.Offset(i, 2) = "" Or Cel.Offset(i, 2) = "Gestions des périodes assimilées" Or Cel.Offset(i, 2) = "IMAGE" Or Cel.Offset(i, 2) = "IMAGE : Chaîne de chargement des BD" Or Cel.Offset(i, 2) = "IMAGE : consultation des DECOMPTES et FSE" Or Cel.Offset(i, 2) = "IMAGE : outils de service" Or Cel.Offset(i, 2) = "IMAGE Oracle" Or Cel.Offset(i, 2) = "INTERFACE DE CONSULTATION DE ACF" Or Cel.Offset(i, 2) = "Interface V1 LASER IVL" _
  18. Or Cel.Offset(i, 2) = "Interrogation sélectivité" Or Cel.Offset(i, 2) = "LIAISON LASER ENTREE" Or Cel.Offset(i, 2) = "Liaison CAF / CPAM" Or Cel.Offset(i, 2) = "Lycéens" Or Cel.Offset(i, 2) = "Module Ctrl et Normalisation adresse postale" Or Cel.Offset(i, 2) = "Médecin traitant (complément Mainframe)" Or Cel.Offset(i, 2) = "NOEMIE SCANNER" Or Cel.Offset(i, 2) = "Nomenclature Actes Pharmacies BDO" Or Cel.Offset(i, 2) = "Nomenclature TIPS" Or Cel.Offset(i, 2) = "Nomenclature actes CCAM" Or Cel.Offset(i, 2) = "Nomenclature des Actes Biologiques BDO" Or Cel.Offset(i, 2) = "Normalisation des adresses - cadre applicatif TUXEDO" Or Cel.Offset(i, 2) = "Normalisation des adresses - services SFR" Or Cel.Offset(i, 2) = "OUTIL CAISSE" Or Cel.Offset(i, 2) = "Option conventionnelle" Or Cel.Offset(i, 2) = "Ouverture Droits Famille OD DAS" Or Cel.Offset(i, 2) = "PER" Or Cel.Offset(i, 2) = "PER-Archivage" Or Cel.Offset(i, 2) = "PEU" Or Cel.Offset(i, 2) = "PPNA SERVEUR" Or Cel.Offset(i, 2) = "PPNA1" _
  19. Or Cel.Offset(i, 2) = "Prévention dépistage" Or Cel.Offset(i, 2) = "PROCEDURE B" Or Cel.Offset(i, 2) = "PROGRES CENTRAL" Or Cel.Offset(i, 2) = "PROGRES CENTRALE Batch" Or Cel.Offset(i, 2) = "PROGRES SERVEUR" Or Cel.Offset(i, 2) = "Participation Forfaitaire application WEB" Or Cel.Offset(i, 2) = "Participation Forfaitaire module SFR / I AD" Or Cel.Offset(i, 2) = "Participation Forfaitaire module batch" Or Cel.Offset(i, 2) = "Participation Forfaitaire" Or Cel.Offset(i, 2) = "Prévention bucco-dentaire" Or Cel.Offset(i, 2) = "QUID" Or Cel.Offset(i, 2) = "Qualiflux transitoire" Or Cel.Offset(i, 2) = "Qualiflux Saisie manuelle" Or Cel.Offset(i, 2) = "Qualiflux Contrôle" Or Cel.Offset(i, 2) = "Qualité PN" Or Cel.Offset(i, 2) = "REFERENCIEL INDIVIDU NATIONALE" Or Cel.Offset(i, 2) = "RELEVE ANNUEL REMBOURSEMENT ASSURES ERASME" Or Cel.Offset(i, 2) = "RNIAM Centrale" Or Cel.Offset(i, 2) = "Reroutage des Flux Externes" Or Cel.Offset(i, 2) = "SGA-SDP" Or Cel.Offset(i, 2) = "SGCAM" _
  20. Or Cel.Offset(i, 2) = "SP" Or Cel.Offset(i, 2) = "SYNERGIE MEDECIN TRAITANT" Or Cel.Offset(i, 2) = "Statistiques BDO - FAC" Or Cel.Offset(i, 2) = "T2A" Or Cel.Offset(i, 2) = "TABLES PROGRES" Or Cel.Offset(i, 2) = "TARMUT" Or Cel.Offset(i, 2) = "TRACABILITE CARTE EUROPEENNE ASSURE SOCIAL" Or Cel.Offset(i, 2) = "Tarifs Nationaux" Or Cel.Offset(i, 2) = "Vaccination anti-grippe" Or Cel.Offset(i, 2) = "WEBMEDECIN" Or Cel.Offset(i, 2) = "WEBVISU" Or Cel.Offset(i, 2) = "XF" Or Cel.Offset(i, 2) = "ESOPE : Retour Centre") Then
  21. j = j + 1
  22. 'Redimension du tableau en conservant ses éléments
  23. ReDim Preserve Application(j)
  24. Application(j) = Cel.Offset(i)
  25. Rows(1).Offset(i).Clear
  26. End If
  27.  
  28. Next i

Je crois que ce qu'il veux que tu fasse c'est à peu près ca:
  1. dim tab_condition(250) as string
  2. tab_condition(0)="Aides à la télétransmission"
  3. tab_condition(1)="BDO famille" //etc... c'est ca le plus long
  4.  
  5. for i=1 to 250
  6. for j=0 to 249
  7. if not cel.offset(i,2)=tab_condition(j) then
  8. rows(1).offset(i).Clear
  9. end if
  10. next j
  11. next i

souso_95 a dit :
Je crois que ce qu'il veux que tu fasse c'est à peu près ca:
  1. dim tab_condition(250) as string
  2. tab_condition(0)="Aides à la télétransmission"
  3. tab_condition(1)="BDO famille" //etc... c'est ca le plus long
  4.  
  5. for i=1 to 250
  6. for j=0 to 249
  7. if not cel.offset(i,2)=tab_condition(j) then
  8. rows(1).offset(i).Clear
  9. end if
  10. next j
  11. next i

merci sa a l'air plus lisible comme sa mais il me met une erreur quand je compile :
Sub ouFunction non définis
???????????????

autant pour moi
  1. for i=0 to 250


EDIT:
non c'est vraiment for i=1...
le problème doit etre dans ta condition, le 'not' qui n'est pas approprié ou autre un autre petit truc dans le genre, c'est du pinaillement de logiciel juste pour t'embeter ;) 

ba ca change pas grand chose , parceque en fait sa efface tou meme ce que je veu pas.dc je pense ke jai pas fai ce quil fallai ou ta pa compri ce que je voulai enfin bon c pa grave mon truc sa marche et le reste maintenan .........
merci pour tou c vraimebt simpa

slt pour la suite de ma macro en fait je vai avoir besoin d'utiliser la forme proposé
le pb c'est que sa marche pas comme je voudrai :

  1. Sub MacroSup()
  2. '
  3. ' MacroSup Macro
  4. ' Macro enregistrée le 14/06/2006 par Administrateur
  5. '
  6. ' Touche de raccourci du clavier: Ctrl+p
  7. '
  8. Dim condition(250) As String
  9. Dim j As Variant
  10. Dim i As Variant 'Nbre éléments du tableau
  11. Dim Cel As Range
  12. 'Dim NbreCase As Integer
  13. 'On affecte la cellule "A1" à la variable Cel
  14.  
  15. Set Cel = Range("A1")
  16. 'NbreCase = Cel.End(xlDown).Row
  17.  
  18. condition(0) = "toto"
  19. condition(1) = "tata"
  20.  
  21. For i = 15 To 1 Step -1
  22. For j = 15 To 0 Step -1
  23. If Not (Cel.Offset(i, 2) = condition(j)) Then
  24. Rows(1).Offset(i).Clear
  25. End If
  26. Next
  27. Next
  28.  
  29. End Sub

logiquement il devrai me supprimer tout les toto et tata mais en fait il supprime absolument tout (sauf la 1 ere ligne normal) . et si je met ce code :

  1. Sub MacroSup()
  2. '
  3. ' MacroSup Macro
  4. ' Macro enregistrée le 14/06/2006 par Administrateur
  5. '
  6. ' Touche de raccourci du clavier: Ctrl+p
  7. '
  8. Dim condition(250) As String
  9. Dim j As Variant
  10. Dim i As Variant 'Nbre éléments du tableau
  11. Dim Cel As Range
  12. 'Dim NbreCase As Integer
  13. 'On affecte la cellule "A1" à la variable Cel
  14.  
  15. Set Cel = Range("A1")
  16. 'NbreCase = Cel.End(xlDown).Row
  17.  
  18. condition(0) = "toto"
  19. condition(1) = "tata"
  20.  
  21. For i = 15 To 1 Step -1
  22. For j = 15 To 0 Step -1
  23. If (Cel.Offset(i, 2) = condition(j)) Then
  24. Rows(1).Offset(i).Clear
  25. End If
  26. Next
  27. Next
  28.  
  29. End Sub


avec if et pas if not il supprime tout sauf les toto et tata ce qui est normal alors pourquoi sa marche dans un sens et pas dans l'autre ?j'ai bien essayer de mettre un different :
  1. If (Cel.Offset(i, 2) <> condition(j)) Then

mais sa efface tout aussi alors la je compren plus .
quelqu'unpourrai t-il m'aider ? merci

louloukg a dit :
  1. condition(0) = "toto"
  2. condition(1) = "tata"
  3.  
  4. For i = 15 To 1 Step -1
  5. For j = 15 To 0 Step -1
  6. If (Cel.Offset(i, 2) = condition(j)) Then
  7. Rows(1).Offset(i).Clear
  8. End If
  9. Next
  10. Next

avec if et pas if not il supprime tout sauf les toto et tata ce qui est normal alors pourquoi sa marche dans un sens et pas dans l'autre ?

Bah dans ce cas tu joue le gars malin (du moins t'essayes :whistle:  ), et tu écris:
  1. condition(0) = "toto"
  2. condition(1) = "tata"
  3.  
  4. For i = 15 To 1 Step -1
  5. For j = 15 To 0 Step -1
  6. If (Cel.Offset(i, 2) = condition(j)) Then
  7. else
  8. Rows(1).Offset(i).Clear
  9. End If
  10. Next
  11. Next


Expert Programmation

  1. If (Cel.Offset(i, 2) = condition(j)) Then
  2. else
  3. ..


  1. If Not (Cel.Offset(i, 2) = condition(j)) Then
  2. ..


  1. If Cel.Offset(i, 2) <> condition(j) Then
  2. ..


La voie pour être *malin* est multiple.... :jap: 

souso_95 a dit :
Bah dans ce cas tu joue le gars malin (du moins t'essayes :whistle:  ), et tu écris:
  1. condition(0) = "toto"
  2. condition(1) = "tata"
  3.  
  4. For i = 15 To 1 Step -1
  5. For j = 15 To 0 Step -1
  6. If (Cel.Offset(i, 2) = condition(j)) Then
  7. else
  8. Rows(1).Offset(i).Clear
  9. End If
  10. Next
  11. Next

j'avais déja essayer(else ,<> , if not )rien marche. c'est fou j'ai l'impression que ce programme veut me faire ch........
c'est pas logique tout ca y en a bien un qui a une solution ?

je reste perplexe sur le fait que ca plante a cet endroit. t'as exécuté ton prog en mode pas à pas pour voir ce qu'il faisait précisemment?
Juste vraiment histoire d'être sur que ce sont ces lignes là qui vont pas.

quand il passe dans la boucle il passe bien dans le if alor qu'il devrai pas
c'est pas normal .donc tout marche normalement sauf quand il arrive au moment ou : (Cel.Offset(i, 2) = condition(j)) et a ce moment la il ne devrait pas rentre dans le if mais il fait le contraire.j'ai tester condition(j) a ce moment la avec un msgbox et c'est bon c'est egale a ce que je veu donc il y a un pb surnaturel ou alor je suis plus nul en vba que se que je pensai

je croi que j'ai compri en fait voila un bou de code et mon tableau

ref | libele | appli |description | solution
--------------------------------------------
1 | tdgd | toto | fgdg |fgggf
--------------------------------------------
2 | dgdgd | tata | gsg |sfsfs
--------------------------------------------
3 | sfsdfs | titi | sdfs | gfgf
--------------------------------------------


  1. condition(0) = "toto"
  2. condition(1) = "tata"
  3.  
  4. For i = 3 To 1 Step -1
  5. For j = 1 To 0 Step -1
  6. MsgBox (condition(j))
  7. If (Cel.Offset(i, 2) <> condition(j)) Then
  8. Rows(1).Offset(i).Clear
  9. End If
  10. Next
  11. Next


alor en fait pour i = 3 & j = 1 -> condition (j) = tata et Cel.Offset(i, 2) <> condition(j) est confirmé -> supprimer
pour i = 2 & j = 1 -> condition (j) = tata et Cel.Offset(i, 2) <> condition(j) est pas confirmé -> pas supprimer
pour i = 2 & j = 0 ->condition (j) = toto et Cel.Offset(i, 2) <> condition(j) est confirmé ->supprimer

donc dans tout les cas toute les lignes serons suppprimer c'est logique finalement . est ce que vous etes daccord ou je suis a coté de la plaque ?

ba la ligne 3 : Cel.Offset(i, 2)="titi" c'est donc bien different de tata donc sa supprime la ligne ;mais c'est pas vraiment cette ligne le probleme c'est les deux autres , moi je voudrai que ca les garde mai avec se code ca marche pas c'est logique

haaaaaaaaaaaaaa OK!!
tiens, essaye ca. je sais pas si ca existe les exit for, mais c'est dans l'idée du truc. au pire t'as juste 2-3 ligne de ton prog à modifier pour passer ca en if si jamais exit for existe pas.
  1. condition(0) = "toto"
  2. condition(1) = "tata"
  3.  
  4. For i = 3 To 1 Step -1
  5. For j = 1 To 0 Step -1
  6. MsgBox (condition(j))
  7. If (Cel.Offset(i, 2) <> condition(j)) Then
  8. Rows(1).Offset(i).Clear
  9. else
  10. exit for
  11. End If
  12. Next
  13. Next

comme ca, si une seule de tes condition est bonne, ca supprime pas la ligne normalement

edit: ah non en fait, si ton premier test correspond, ca fonctionne pas.

réedit: après 2 min de réflexion, essaye ca:
  1. condition(0) = "toto"
  2. condition(1) = "tata"
  3.  
  4. For i = 3 To 1 Step -1
  5. For j = 1 To 0 Step -1
  6. MsgBox (condition(j))
  7. If (Cel.Offset(i, 2) <> condition(j)) Then
  8. test=test+1
  9. else
  10. exit for
  11. End If
  12. Next
  13. if test = // à ton nombre max de tests
  14. Rows(1).Offset(i).Clear
  15. Next

init de test à 0

  1. Dim test As Integer
  2. condition(0) = "toto"
  3. condition(1) = "tata"
  4.  
  5. For i = 3 To 1 Step -1
  6. For j = 1 To 0 Step -1
  7. 'MsgBox (condition(j))
  8. If (Cel.Offset(i, 2) <> condition(j)) Then
  9. test = test + 1
  10. Else
  11. Exit For
  12. End If
  13. Next
  14. If test = 13 Then 'à ton nombre max de tests
  15. Rows(1).Offset(i).Clear
  16. End If
  17. Next

compren pas trop comment ca marche et en plus ca supprime aucune ligne.
pour le exit for ca marche par contre

alors essaye d'initier test à 1, vas-y à tatons, la c'est plus très loin, tu devrait y arriver tout seul.

comment ca marche:
tu veux supprimer la ligne seulement si elle ne correspond à aucun des tests
-si ta cellule est différente de condition(j) alors test=test+1
-ainsi de suite jusqu'à ce que t'arrives au bout de ton for
-si test est égal à ton nombre de tests, c-a-d que ta cellule ne correspond à aucune des condition : elle est supprimée.

non, là ta ligne est effacée seulement si elle n'est en accord avec aucune des condition avec lesquelles tu la compare.
Mais si elle est effacée seulement si aucune condition ne correspond, ca veut dire qu'a chaque fois la variable "test" à été incrémentée. donc que "test" est à son maximum.

C'est vrai qu'en gros ca dépend 'du numéro' de test, mais c'est quand même un 'numéro' précis, que tu choisis pas comme ca.
Lassé par la pub ? Créez un compte