Déclaration d'une plage de deux cellules string

Résolu/Fermé
DrFoZz Messages postés 8 Date d'inscription vendredi 29 août 2014 Statut Membre Dernière intervention 8 septembre 2014 - 29 août 2014 à 16:50
DrFoZz Messages postés 8 Date d'inscription vendredi 29 août 2014 Statut Membre Dernière intervention 8 septembre 2014 - 1 sept. 2014 à 09:47
Bonjour, je suis nouveau sur ce forum...et sur VBA aussi :D

Je bloque sur un bout de mon programme...

Je n'arrive pas à chercher ma plage de donnée (composée de deux cellules type string) sur des tableaux de deux feuilles différentes.

Les lignes "Set PlageDeRecherche" (deux au total) bloquent la macro.

Merci pour votre aide

Voila le bout du programme:


Sub Comparer_Nom_Metal(Num_row As Integer)

Dim ligne_find_CFSI As Integer
Dim ligne_find_all As Integer
Dim Trouve As Range
Dim PlageDeRecherche_CFSI As Range
Dim PlageDeRecherche_Existant As Range
Dim Chercher_Nom_Metal_Analyse As String

    'Valeur cherchee
    Chercher_Nom_Metal_Analyse = Range("A" & Num_row) + Range("C" & Num_row).Value

        'Recherche dans valide CFSI
        Set PlageDeRecherche_CFSI = Worksheets("Valide CFSI").Columns(1) + Worksheets("Valide CFSI").Columns(3)
        Set Trouve = PlageDeRecherche_CFSI.Cells.Find(what:=Chercher_Nom_Metal_Analyse, LookAt:=xlWhole
        ligne_find_CFSI = PlageDeRecherche_CFSI.Cells.Find(what:=Chercher_Nom_Metal_Analyse, LookAt:=xlWhole).Row
        'Si on ne trouve rien :
        If Trouve Is Nothing Then
            
            'Recherche dans all (ceux déjà existant)
            Set PlageDeRechercheExistant = Worksheets("all").Columns(1) + Worksheets("all").Columns(3)
            Set Trouve = PlageDeRecherche_Existant.Cells.Find(what:=Chercher_Nom_Metal_Analyse, LookAt:=xlWhole)
            ligne_find_all = PlageDeRecherche_Existant.Cells.Find(what:=Chercher_Nom_Metal_Analyse, LookAt:=xlWhole).Row
            
            'Si on ne trouve rien, copie du nom attribuer "Smelter not listed" et ajouter
            If Trouve Is Nothing Then
                Range("B" & Num_row).Offset(0, 1).Select
                Range("B" & Num_row) = "Smelter Not Listed"
                Range("E" & Num_row) = "Not Listed"
                Range("Q" & Num_row) = "Ajouté"
                Num_row = Num_row + 1
                
            'Si trouvé, chercher si numéro ID
            Else
            
                'Si trouvé, copier le numéro et renvoyer à "Comparer_CFSI"
                If Worksheets("all").Range("E" & ligne_find_all).Value <> "Not Listed" Then
                    Worksheets("all").Range("E" & ligne_find_all).Copy
                    Worksheets("Analyse Smelter").Range("E" & Num_row).Paste
                    Worksheets("all").Range("B" & ligne_find_all).Copy
                    Worksheets("Analyse Smelter").Range("B" & Num_row).Paste
                    Call Comparer_CFSI(Num_row)
                
                'Si non, il est déjà dans la base
                Else
                    Range("Q" & Num_row) = "OK"
                    Num_row = Num_row + 1
                End If
            End If
            
        'Si il y à un numéro CFSI, le copier et renvoyer à "Comparer CFSI"
        Else
        Worksheets("Valide CFSI").Range("E" & ligne_find_CFSI).Copy
        Worksheets("Analyse Smelter").Range("E" & Num_row).Paste
        Worksheets("Valide CFSI").Range("B" & ligne_find_CFSI).Copy
        Worksheets("Analyse Smelter").Range("B" & Num_row, "C" & Num_row).Paste
        Call Comparer_CFSI(Num_row)
        End If
End Sub
A voir également:

1 réponse

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
29 août 2014 à 18:29
Bonjour,

Je ne pense pas que se soit possible de faire ce que tu as initié.
Tu peux sélectionner des plages non contiguës mais après tu ne peux pas en faire grand chose.
Il te faut enchainer ta recherche sur chacune des plages et cela te permettra de savoir où se trouve la donnée.
0
DrFoZz Messages postés 8 Date d'inscription vendredi 29 août 2014 Statut Membre Dernière intervention 8 septembre 2014
29 août 2014 à 18:42
Mon problème est que le test doit se faire par rapport à la colonne "A" ET "C" d'une ligne de ma table à analyser avec un des deux autres tableau...ligne par ligne. Donc si j'y dissocie...je perd le but du test. Non?
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
29 août 2014 à 18:48
Sauf que tu veux utiliser .Find qui fonctionne cellule par cellule et tu n'as pas de fonction qui va te regrouper les 2 colonnes sauf à mettre tes données dans un tableau mémoire que tu constitue : ceci permet d'ailleurs d'être beaucoup plus rapide que .Find.
0
DrFoZz Messages postés 8 Date d'inscription vendredi 29 août 2014 Statut Membre Dernière intervention 8 septembre 2014
29 août 2014 à 19:07
Houla....ça devient complex là...je dois créer un tableau virtuel pour faire ma recherche? On fait ça comment?
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
30 août 2014 à 10:33
Bonjour,

Je ne connais pas la finalité de ta macro mais avec ce que j'ai compris cela pourrait donner cela :

https://www.cjoint.com/c/DHEkHsl1AUz

C'est ta macro modifiée avec tableau mémoire.
0
DrFoZz Messages postés 8 Date d'inscription vendredi 29 août 2014 Statut Membre Dernière intervention 8 septembre 2014
1 sept. 2014 à 09:47
Au top!!!!!!

Merci beaucoup :D
0