Fonction if condition1 Or condition2 then ne fonctionne pas

Bonjour à tous,

Dans le code suivant la ligne If Cells(i, 1).Value <> "Somme" Or Cells(i, 1).Value <> "Titre" Then ne fonctionne pas :

Je n'arrive pas à comprendre pourquoi. Pouvez vous m'aider.

Merci

      For i = 3 To ligcarte
            Cells(i, colnature).Select
            If Cells(i, colnature).Value = "texte1" Or Cells(i, colnature).Value = "texte2" Or Cells(i, colnature).Value = "texte3" Or Cells(i, colnature).Value = "texte4" Or_ Cells(i, colnature - 1).Value = "texte5" Or Cells(i, colnature - 1).Value = "texte6" _
Or Cells(i, colnature - 1).Value = "texte8" Or Cells(i, colnature - 1).Value = "texte9" Then
                ligsortie = ActiveCell.Row
                Exit For
            End If
            If Cells(i, 1).Value <> "Somme" Or Cells(i, 1).Value <> "Titre" Then  ' NE FONCTIONNE PAS
            Cells(i, colnature).Value = Cells(i, colnature - 1).Value & " " & Cells(i, colnature).Value
                Cells(i, colnature - 1).Value = ""
                If Cells(ActiveCell.Row, 1) <> "" Then
                    If nbcolonne <> 0 Then
                        For j = 1 To nbcolonne
                            Cells(ActiveCell.Row, colnature).Value = Cells(ActiveCell.Row, colnature).Value & " " & Cells(ActiveCell.Row, colnature + j).Value
                        Next j
                    End If
                Else   ' si la première cellule de la ligne est vide,
                    If Cells(ActiveCell.Row, colnature - 1).Value <> "" Or Cells(ActiveCell.Row, colnature).Value <> "" Then 
                        Cells(i - 1, colnature) = Cells(i - 1, colnature) & " " & Cells(i, colnature) & " " & Cells(i, colnature - 1)
                        Cells(i, colnature - 1).Value = ""
                    End If
                        If nbcolonne <> 0 Then
                            For j = 1 To nbcolonne
                                Cells(i - 1, colnature).Value = Cells(i - 1, colnature).Value & " " & Cells(i, colnature + j).Value
                            Next j
                        End If
                    ActiveCell.Rows("1:1").EntireRow.Select 'supression de la ligne inutile
                    Selection.Delete Shift:=xlUp
                    Cells(i - 1, colnature).Select
                    Cells(i - 1, colnature).Value = Replace(Cells(i - 1, colnature).Value, "  ", " ")
                    ligcarte = ligcarte - 1
                    lignetotal = lignetotal - 1

                    i = i - 1
                End If
            End If

       Next

Bonjour,

1) le code donné n'est pas correcte, dans l'éditeur VBA, la ligne se met en rouge, c'est donc qu'il y a un souci

image

Qui ce situe ici

Or_ Cells(i, colnature - 1).Value = "texte5"

2) Qu'est-ce qui ne va pas dans la ligne désignée !?

Plus d'explication serait nécessaire et avec un fichier ce serait l'idéal

A+

bonjour JExceL2Fr, paterbleutch,

avec un "select case"

PS. vos cellules ils ne sont pas par exemple "TEXTE1"ou "SOMME" ?

For i = 3 To ligcarte
     Cells(i, colnature).Select
     Select Case Cells(i, colnature).Value
          Case "texte1", "texte2", "texte3", "texte4", "texte5", "texte6", "texte8", "texte9"
               ligsortie = ActiveCell.Row
               Exit For
          Case Else
               Select Case Cells(i, 1).Value
                    Case "Somme", "Titre"
                         '...
               End Select
               ....
     End Select
Next

JExceL2fr, BsAlv merci pour vos réponses.

JExceL2fr: cette condition if est très longue, elle nécessite d'aller à la ligne sur mon PC; je me suis trompé en l'adaptant sur le forum, cette erreur de copie corrigée cette ligne de code fonctionne. Celle qui ne fonctionne pas est pour le if suivant qui considère systématiquement que la valeur de la cellule n'est jamais Somme ou Titre. Et je ne comprend pas pourquoi malgré 2 heures de recherche.

BsAlv: je ne connaissait pas "Select case". je vais essayer avec cette option qui semble simplifier le code et je reviens. Mais je ne comprend pas pourquoi cette ligne ne fonctionne pas.

BsAlv,

Il y a autre chose que je ne saisis pas au début de la boucle for next, on doit (ou pas) sélectionner la cellule cells(i, colnature).select ce code me semble faire double emploi avec la ligne suivante

Select Case Cells(i, colnature).Value

où elle est définie

ne pouvez-vous pas télécharger un fichier anonymisé avec une dizaine de lignes de manière qu'on peut voir ce que vous voulez faire ?

"Select" est quelque chose inutile qui ralentit tout.

BsAlv Bonjour, et merci pour votre réponse

J'ai essayé de placer "Select Case" à la place de "If". Cela donne :

   Select Case 
      Case "Somme", "Titre"  'Dans ce cas je veux sortir de la boucle 
      Case Else
        '.......suite du programme
   End Select      

Mais là encore cela ne fonctionne pas. J'ai trouver une autre solution en contournant le problème. Les mots "Somme" et "Titre" sont mis en gras et je remplace la

ligne de code qui ne fonctionne pas :

If Cells(i, 1).Value <> "Somme" Or Cells(i, 1).Value <> "Titre" Then 'qui ne fonctionne pas 
avec le code suivant
if cells(i,1).FontBold = False then
Avec ce code mon programme fonctionne.

Cependant, pour la suite de mon travail j'aimerai comprendre pourquoi la ligne de code avec "If" ne fonctionne pas. Dans la colonne "A" où il y a dans certaines cellules "Somme" ou "Titre", toutes les autres cellules sont des dates est-ce que, peut-être c'est cela qui empêche le fonctionnement aussi bien de "If" ou "Select Case" ?

En fait mon programme sert à mettre en forme des tableaux Excel créé par l'importation d'un PDF avec Excel. Et suivant la qualité de l'imprimerie, les textes trop grands, des textes avec des espaces trop nombreux etc, j'obtiens dans la feuille recevant le tableau PDF importé, des nombres de lignes et des nombres de colonnes variables. Le code que je vous ai montré au début sert à rassembler dans une même cellule les textes que l'importation a répartis sur plusieurs lignes et plusieurs colonnes et à supprimer les lignes devenues inutiles après rassemblement de chaque texte dans une même cellule.

J'essaye dans le programme déjà réalisé, qui ne fonctionne pas dans tous les cas, de supprimer les ".Select" en nombre pléthorique et de remplacer les boucles Do...Loop par des boucles For Next bien plus efficaces si c'est possible.

paterbleutch

Re,

C'est plutôt bancal ton truc je trouve !
Et comme dit précédemment, dans fichier exemple, compliqué de comprendre

Si le terme n'est pas tout seul (espace invisible) tu peux essayer avec INSTR()

et remplacer

If Cells(i, 1).Value <> "Somme" Or Cells(i, 1).Value <> "Titre" Then 'qui ne fonctionne pas 

par

If InStr(1, Cells(i, 1), "somme", vbTextCompare) > 0 Or InStr(1, Cells(i, 1), "titre", vbTextCompare) > 0 Then

A+

c'est un "And" au lieu d'un "Or" !!!

If Cells(i, 1).Value <> "Somme" Or Cells(i, 1).Value <> "Titre" Then 'qui ne fonctionne pas

JExceL2fr, merci de me répondre

En fait les mots Somme et Titre, c'est moi qui les ai insérés et donc il n'y a pas d'espace puisque j'ai inséré "Somme" ou "Titre". Ce problème avec les espaces invisibles m'a vraiment gêné mais je l'ai solutionné. Mais j'ai quand même essayé avec Instr(1, cels(i,j).value, "Somme",1) . Je viens de trouver sur le net:

"vbBinaryCompare (0) pour une comparaison sensible à la casse ou vbTextCompare (1) pour une comparaison insensible à la casse". Je ne vois pas ce qu'est la casse?

insensible à "SOMME", "somme", "SoMmE", donc masjuscules ou miniscules.

BsAlv, merci pour ta réponse.

Je fais très attention à ce genre d'erreur, j' écrit toujours "Somme" ou "Titre" de cette façon

Bonjour

A tester

If Cells(i, 1).Value <> "Somme" And Cells(i, 1).Value <> "Titre" Then

@Joco7915, j'avais déjà remarqué cet "AND"

maintenant avec une macro un peu plus "hightech" en supposant que votre plage n'a que 26 colonnes, donc colonne AA:AC sont libres. Les colonnes AA et AB sont des formules pour vérifier ces "somme/titres" et ces autres "Textes". Colonne AC joint les colonnes si nécessaire.

1paterbleutch.xlsb (120.88 Ko)
Rechercher des sujets similaires à "fonction condition1 condition2 then fonctionne pas"