Boucle if ne faisant pas le test

Bonjour à tous !

Je vous demande aujourd'hui un coup de main concernant le programme ci dessous car dans les boucles if, peu importe les contenus de cell et cell1, la condition semble validée (à noter que les cellules sont sous le format texte et qu'une partie des cellules cell sont vides).

Dim cell As Range
Dim cell1 As Range

For Each cell In Worksheets("Base").Range("F3:F1450")
If cell <> "" Then:
For Each cell1 In Worksheets("Extraction").Range("B2:B1450")
If cell.Value = cell1.Value Then:

Merci beaucoup pour votre aide et bonne journée à vous !

Hello,

Hum on commence un if sans l'arrêter ? Il ne va pas très bien comprendre

Essaie ça :

EDIT : merci BsAlv

Dim cell As Range
Dim cell1 As Range

For Each cell In Worksheets("Base").Range("F3:F1450")
If cell <> "" Then
      "TON INSTRUCTION"
End if
Next

For Each cell1 In Worksheets("Extraction").Range("B2:B1450")
If cell.Value = cell1.Value Then
      "TON INSTRUCTION"
End if
Next

@+

bonjour lightluc2000,baroute78,

Hum on commence un if sans l'arrêter ?

Est 2 "For's" sans "Next" ???

Je préfère aussi ajouter ".Cells" à par exemple "Worksheets("Base").Range("F3:F1450")", donc "Worksheets("Base").Range("F3:F1450").cells" (pour éviter qu'on prend des "areas")

Bonjour BsAlv !

OHHHHHH la boulette !!

A force de ne passer plus que par PowerQuery, j'en oublie les bases du vba .... Quelle honte

Pour le coup j'ai mis des End If dans le code mais il ne veut pas non plus puisque lorsque je l'ajoute, il m'indique que j'ai un bloc End If sans bloc If (alors qu'il y a le bon nombre de bloc If et les bonnes indentations...) de plus j'ai pas mis les next parce que ça me paraissait évident mais je me rend compte que ce n'est pas le cas...

Voici donc la version claire :

Dim cell As Range
Dim cell1 As Range

For Each cell In Worksheets("Base").Range("F3:F1450")
   If cell <> "" Then:
      For Each cell1 In Worksheets("Extraction").Range("B2:B1450")
         If cell.Value = cell1.Value Then:
            If Worksheets("Extraction").Cells(cell1.Row, 5).Value = "STKDIV" Then:
               Worksheets("Base").Cells(cell.Row, 8).Value = Worksheets("Extraction").Cells(cell1.Row, 15).Value
            End If
         End If
      Next cell1
Next cell

En fait je ne comprends pas ce que tu cherches à faire... T'aurais un fichier avec unesource et un résultat attendu ?

@+

Eh bien je cherche à transférer des données de la table "Extraction" vers la table "Base" pour ça je parcours chaque cellule de Base pour prendre une clé secondaire que l'on doit retrouver dans la table "Extraction" en tant que clé primaire.

Je compare donc chaque cellule de "Base" avec toutes les lignes d' "Extraction" pour récupérer les données que je veux. L'aspect copie marche très bien mais c'est l'aspect recherche avec le triage via les blocs If qui me pose problème.

re,

je ne sais pas si ce double point après then (then:) cause des problèmes ?? mais peut-être la différence entre majuscules et minuscules n'est pas important ??? Don c oubien "Option Compare Text" comme première ligne de ce module oubien "StrComp(string1,string2,1)=0"

     Dim cell  As Range
     Dim cell1 As Range

     For Each cell In Worksheets("Base").Range("F3:F1450").Cells
          If cell.Value <> "" Then:
          For Each cell1 In Worksheets("Extraction").Range("B2:B1450").Cells
               If cell.Value = cell1.Value Then
                    If StrComp(Worksheets("Extraction").Cells(cell1.Row, 5).Value, "STKDIV", 1) = 0 Then
                         Worksheets("Base").Cells(cell.Row, 8).Value = Worksheets("Extraction").Cells(cell1.Row, 15).Value
                    End If
               End If
          Next cell1
     Next cell

aussi facile à utiliser :

Worksheets("Extraction").Cells(cell1.Row, 5).Value est la même chose que cell1.offset(,5-cell1.column).value, donc

                If StrComp(cell1.Offset(, 5 - cell1.Column).Value, "STKDIV", 1) = 0 Then
                         cell.Offset(, 8 - cell.Column).Value = cell1.Offset(, 15 - cell1.Column).Value

Est ce que ce serait pas plus simple de passer par du recherchev ou index equiv ?

@+

Merci beaucoup ! il semblerait que ça marche en tout cas.

Je vous souhaite une bonne journée alors et vous remercie chaleureusement ^^

bonjour a tous,

Dim cell  As Range
     Dim cell1 As Range

     For Each cell In Worksheets("Base").Range("F3:F1450").Cells
          If cell.Value <> "" Then:
          For Each cell1 In Worksheets("Extraction").Range("B2:B1450").Cells
               If cell.Value = cell1.Value Then
                    If StrComp(Worksheets("Extraction").Cells(cell1.Row, 5).Value, "STKDIV", 1) = 0 Then
                         Worksheets("Base").Cells(cell.Row, 8).Value = Worksheets("Extraction").Cells(cell1.Row, 15).Value
                    End If
               End If
          Next cell1
     Next cell

il manque un end if entre les 2 next et il faut enlever les : après le premier then

: après le then signifie, on ne fait rien et on passe à la ligne suivante (donc le test est inutile)

Rechercher des sujets similaires à "boucle faisant pas test"