Problème de "/" dans un teste

Bonjour à tous
Voici mon problème avec un "/"

Dans une colonne je cherche la cellule contenant le texte "machin chouette" dans ce cas, avec le code vba, la cellule contenant le texte est trouvée.

Mais si le texte est "machin/chouette" , la cellule est ignorée.

Est-il possible de solutionner par le code ce problème?

Voici le code que j'utilise :

Sub essai()

Do
If ActiveCell() <> "machin/chouette" Then
ActiveCell.Offset(1, 0).Range("a1").Select
ligne = ligne + 1
Else
Selection.Copy
ActiveCell.Offset(0, -col + 1).Range("a1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveCell.Offset(0, col - 1).Range("a1").Select
Exit Do
End If

If ligne > 200 Then
Exit Do
End If

Loop

End Sub

J'ai bien essayer par concaténation de "machin" & "/" & "chouette", cela renvoie dans une MsgBox : "/chouette", le mot "machin" est ignoré

J'ai aussi essayé de chercher seulement le mot "machin" seul pour sélectionner la bonne cellule mais là je n'arrive pas à trouver comment faire.

paterbleutch

bonjour

as tu tenté un truc avec or

cordialement

Sub essai()

     For i = 0 To 200
          With ActiveCell.Offset(i)
               If InStr(1, .Value, "machin", 1) > 0 And InStr(1, .Value, "chouette", 1) > 0 Then     'contient les 2
                    .Copy
                    With .Offset(0, 1 - .Column)
                         Application.Goto .Cells(1)
                         .PasteSpecial xlValues
                    End With
                    Exit For
               End If
          End With
     Next
End Sub

pour chercher les 2 dans la même cellule, on peut ajouter des conditions supplémentaires si nécessaire.

Bonjour à tous,

Ou plus simplement

If Not ActiveCell Like "machin*chouette" Then

A+

bonsoir, tulipe_4, SsALv, JExceL2fr, merci pour vos réponses respectives.

tulipe_4 :

je ne vois pas très bien comment utiliser le or? Pouvez-vous préciser. Merci

BsAlv

InStr c'est une commande nouvelle pour moi qui suis un bleu dans VBA

J'ai essayé votre code, cela fonctionne parfaitement. J'ai aussi chercher le fonctionnement de la commande InStr; elle renvoi la position du premier caractère de la chaine. mais je ne comprends pas exactement la signification de l'ensemble des 4 éléments entre parenthèse ,InStr(1, .Value, "machin*chouette", 1) . Pouvez-vous m'en dire plus. Merci

JExceL2fr :

Effectivement cela parait plus simple. Mais à la fin de la frappe de la ligne que vous avais écrite une alerte apparait: Erreur de compilation, Attendu :Goto ou then.

J'ai fait un copier coller pour éviter toute erreur. que faire? Merci

Bonjour à tous,

Pour les arguments de la fonction InStr, regarder la doc Fonction InStr (Visual Basic pour Applications) | Microsoft Learn.

Personnellement j'aime bien la fonction Like, puisque vous parlez de chercher "le texte contenant machin truc", on devrait partir du principe que "BLABLA machin-truc XXXYYZ" renvoie vrai (ce que fait @BsAlv), mais dans ce cas la proposition de @JExceL2Fr s'adapterait comme ceci :

If ActiveCell.Value Like "*machin?chouette*" Then

"*machin?chouette*" : Pour n'avoir que 1 caractère entre "machin" et "chouette"

"*machin*chouette*" : Pour trouver les cellules contenant les mots "machin" et "chouette", dans l'ordre mais pas nécessairement cotes-à-cotes (ex: "machin BLABLA chouette").

Donc dans le code de @BsAlv

Sub essai()

  For i = 0 To 200
    With ActiveCell.Offset(i)
      If ActiveCell.Value Like "*machin?chouette*" Then 'contient les 2 dans l'ordre
        .Copy
        With .Offset(0, 1 - .Column)
          Application.Goto .Cells(1)
          .PasteSpecial xlValues
        End With
        Exit For
      End If
    End With
  Next
End Sub

Il y a 2 différences entre la proposition de @BsAlv et celle-ci :

  1. @BsAlv vérifie la présence des 2 mots clés, peu importe l'ordre (ex : "chouette BALBA machin"), là où Like impose l'ordre.
  2. @BsAlv utilise la comparaison textuelle (donc sans casse, càd que "MaChiN chOUeTTe" marche), l'opérateur Like lui dépend de Option Compare, qui par défaut est sur la comparaison stricte ("M" ≠ "m"), mais c'est paramétrable.

A vous donc de choisir la solution qui vous convient le mieux.

Bonjour, saoh12617.

merci pour votre réponse.

J'ai rajouté à vos ligne de code, après Next le code suivant:

ActiveCell.Offset(-2, 0).Range("a1").Select
ActiveSheet.Paste
Application.CutCopyMode = False

cela ne fonctionne pas et je ne comprend pas pourquoi.

Si j'ai la réponse cela me perpétra d'avancer dans mon activité.

Cependant je vais me relancer dans l’étude de vba excel pour éviter de poser des questions trop simples

Hélas je me rend compte qu'au plus je lis les réponses au plus je ne sais rien d'excel vba

Il n'y a aucun mal. On a tous débuté, ce sont des notions complexes au début. Mon explication est certainement trop technique.

Pouvez-vous joindre un fichier de ce que vous voulez faire et exprimer simplement à l'écrit la procédure que vous voulez suivre ? Je pense que ce sera plus simple. On pourra commenter le code pour aider la compréhension.

Bonjour saboh12617,

Merci pour votre réponse.

Explication sur mon travail.

Au départ j’ai des PDF dotés d’un grand tableau avec en colonne : des dates, du texte, et des chiffres.

Je transforme avec Excel ce PDF en tableau Excel. Pour les dates et les chiffres pas de souci cela va très bien ils sont alignés avec la première ligne de texte résultante. Mais, dans le PDF, le texte est parfois trop long pour la colonne, il va plusieurs fois à la ligne ; Excel renvoi par un nombre de lignes supplémentaires différentes suivant la longueur du texte ainsi que des colonnes de texte supplémentaires.
Mon tableau Excel se retrouve, suivant la période, avec un nombre de colonnes de texte différentes dont deux colonnes texte principales (CA et CB). Le textes des PDF suivant la période sont répétitifs. Je dois ne faire qu’une seule colonne de texte et qu’une seule ligne par date.

Pour les colonnes secondaires il est facile de déplacer les textes, qui sont toujours courts et importants, dans la bonne colonne. Pour les colonnes CA et CB,
je dois déplacer le texte utile vers CA et supprimer les lignes complémentaires du fait de la longueur du texte original du PDF.

C’est là l’objet de ma demande, trouver les mots significatifs sachant qu’il y a des « / » qui me pose des problèmes (que vous avez résolus) ; A la suite du code que vous m’avez proposé je ne peux plus sélectionner, en relatif, la cellule où je dois déplacer le texte sélectionné. Je ne comprends pas pourquoi.

Voila ci-dessous votre code suivi de du mien qui ne fonctionne pas.

Sub essai()

Dim col As Integer

col = 3

Range("u19").Select

For i = 0 To 200

With ActiveCell.Offset(i)

If InStr(1, .Value, "machin", 1) > 0 And InStr(1, .Value, "chouette", 1) > 0 Then 'contient les 2

.Copy

With .Offset(0, 1 - .Column)

Application.Goto .Cells(1)

.PasteSpecial xlValues

End With

Exit For

End If

End With

Next

ActiveCell.Offset(-col, 0).Range("a1").Select ‘ ne fonctionne pas ??????

ActiveSheet.Paste

Application.CutCopyMode = False

Si je remplace {Activcell.offset(-col, ,0).Range(" A1 ").select} par Range("S14")

Si je met à la place de Activcell.offset........... le code Range("A1") cela fonctionne mais cela ne convient pas puisque le nbre et la ligne changent je dois être en relatif

re bonour,

J'ai fait une erreur d'inattention dans la code que j'ai écrit : ActiveCell.Offset(-col, 0).Range("a1").Select ‘ ne fonctionne pas ??????

j'aurai du écrire ActiveCell.Offset(0,-col).Range("a1").Select ‘ ne fonctionne pas ?????? et cela ne fonctionne toujours pas

il faut éviter ces "select" et "activate" parce que cela ne sert à rien

Sub Essai()
     With Range("U19")                       'debut ici, sans select
          For i = 0 To 200
               With .Offset(i) 'cellule décalée
                    If InStr(1, .Value, "machin", 1) > 0 And InStr(1, .Value, "chouette", 1) > 0 Then     'contient les 2
                         .Copy
                         With .Offset(0, 1 - .Column)     'même ligne, colonne 1 (A)
                              Application.Goto .Cells(1)
                              .PasteSpecial xlValues
                         End With
                         Exit For
                    End If
               End With
          Next
     End With
End Sub

bonjour BsAlv.

Ce code fonctionne bien, dans la feuille excel la cellule sélectionnée est prête à être collée sur un autre cellule. A la suite de ce code je rajoute :

Active.cell.Offset(0, -2).Range("a1").Select

cette ligne me renvoie le code erreur 424. Il manque quelque chose puisque ce type de code fonctionne par ailleurs.

Dans ce code que vous m'avez envoyé, je ne comprends pas tout ou mal

.Offset(i) : je suppose que cela décale vers le bas, de la valeur de i, par rapport à la cellule de départ, dans notre cas "U19"

comment vba sait qu'il faut décaler d'une ligne et pas d'une colonne ?

.Offset(0, 1 - .Column) : ce n'est vraiment pas clair pour moi

re,

Select n'est pas très pratique, on peut copier&coller sans sélectionner et cela est plus rapide. On voit plusieurs With ...End With-constructions dans ma macro et avant range ou cells ou ... un point. Ce point crée une relation avec le dernier With, comme ça, écrire une macro est moins fatiguant et plus lisible.

Exemple ".copy" dans ma macro, le précédent With est le "With .offset(i)" et pour celui -là le précédent est "Range("U19"), donc on peut imaginer que ce ".copy" signifie la même chose que range("U19").offset(i).copy

Donc oubliez votre question de "select" et utilisez les vraies cellules au lieu de l'activecell

BsAlv, merci pour votre réponse.

vos explications sont claires et effectivement elles simplifient

saboh12617, JExceL2fr, BsAlv, un grand merci pour votre aide, vos réponses m'ont été utiles

Rechercher des sujets similaires à "probleme teste"