Pblm Set c = .FindNext:parcourir des chps pour faire une bdd

Bonjour,

Je ne suis pas vraiment habitué à coder en VBA, et je me suis lancé dans un petit bout de code qui ne marche pas.

Le principe est simple: je souhaite parcourir un tableau et à chaque fois que l'on repère les mêmes 3 premières lettres, je souhaite le ranger dans un onglet du même nom (sur la première ligne).

Je souhaite aussi vérifier à chaque fois si le trigramme (+ la ref derrière) existe déjà dans mon onglet, et si c'est un nouveau, le mettre à la suite.

Ce code plante sur le "Set c = .FindNext(c)" et je ne comprends pas vraiment pourquoi.

Sub test()

With ThisWorkbook.Worksheets("Sheet1").Range("B1:D7")
'je parcours mon petit tableau

Set c = .Find("AAA")
'et je cherche mon trigramme "AAA" pour aller le coller dans l'onglet correspondant

If Not c Is Nothing Then
firstAddress = c.Address

Do
c = Worksheets("AAA").Range("A1:A6").Value
'collage de la valeur repérée?

Set c = .FindNext(c)
'on passe au suivant... normalement, sauf que ça plante à cet endroit

Loop While c.Address <> PremCell
'ce morceau là je le comprends pas, mais je suppose que c'est une autre histoire

End If
End With
End Sub

Je vous remercie d'avance pour vos conseils ou pour la solution à mon problème..

Bon 11 novembre,

Antoine.

Bonjour et bienvenu(e)

A tester

Option Explicit

Sub test()
Dim C As Range, FirstAddress As String

  With ThisWorkbook.Worksheets("Sheet1").Range("B1:D7")
    'je parcours mon petit tableau

    Set C = .Find(what:="AAA", LookIn:=xlValues, lookat:=xlWhole)
    'et je cherche mon trigramme "AAA" pour aller le coller dans l'onglet correspondant

    If Not C Is Nothing Then
      FirstAddress = C.Address
      Do
        Worksheets("AAA").Range("A" & Rows.Count).End(xlUp).Offset(1, 0) = C
'        c = Worksheets("AAA").Range("A1:A6").Value
        'collage de la valeur repérée?

        Set C = .FindNext(C)
        'on passe au suivant... normalement, sauf que ça plante à cet endroit

      Loop While C.Address <> FirstAddress   ' Tant que l'on a pas fait le tour              'PremCell
      'ce morceau là je le comprends pas, mais je suppose que c'est une autre histoire

    End If
  End With
End Sub

Un fichier aiderait grandement à trouver une solution

Merci c'es top, je vais pouvoir continuer à travailler sur ce code, merci beaucoup!

Et par curiosité, tu écris:

     Worksheets("AAA").Range("A" & Rows.Count).End(xlUp).Offset(1, 0) = C 

Si je comprends bien, tu te déplaces à la fin de la colonne avec End(xlUp) et tu déscends d'une case avec Offset(1,0).

Par contre je ne comprends pas la fonction de Rows.count, pourrais-tu m'éclairer sur ce point?

Bonjour

Tjak a écrit :

tu te déplaces à la fin de la colonne

Non c'est avec l'instruction

Worksheets("AAA").Range("A" & Rows.Count)
End(xlUp)

Cette fonction indique qu'une fois en bas on remonte pour trouver la dernière ligne occupée

Tjak a écrit :

la fonction de Rows.count

Indique la dernière ligne de la page Excel

Pour XL 2003 -->65 536

Pour XL 2007 et + --> 1 0048 0576

En codant ainsi une compatibilité entre 2007 et + vers 2003 est assurée

D'accord je comprends bien, merci.

Du coup, j'ai voulu refaire l'exercice non pas en écrivant sur la colonne A mais sur la ligne 1, en écrivant:

Worksheets("AAA").Range("1:1" & Columns.Count).End(xlToLeft).Offset(0, 1) = C

Et j'ai remarqué que mes champs se réécrivaient tour à tour sur la même case (B1), tu saurais me dire si je fais quelque chose de travers la dessus?

(Je te joins un fichier, mais je voudrais pas abuser de ton temps, hésites pas à me dire si je deviens trop encombrant )

Bonjour

Pour écrire sur la première colonne vide

Worksheets("AAA").Cells(1, Columns.Count).End(xlToLeft).Offset(0, 1) = C

Attention si la 1ère ligne est vide tu vas écrire en B1 (pas en A1 )

Rechercher des sujets similaires à "pblm set findnext parcourir chps bdd"