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
NextBonjour,
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
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
NextJExceL2fr, 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.
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).Valueoù 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 ThenA+
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.