none
Trouver une valeur sur une ligne d'un tableau Excel et selectionner une cellule adjascente RRS feed

  • Question

  • Bonjour, dans un récent Thread j'ai publier un code qui me sert à trouver des valeurs dans un tableau Excel.

    Le code m'annonce à quelle adresse ont été trouvées les valeurs String.

    Ex : String "1" was found in cell: "$C$126"

    Une fois les valeurs trouvées, les lignes concernées sont mises en rouge en copier vers une autre feuille.

    Je souhaiterais maintenant sélectionner la cellule "P" des lignes trouvées pour y mettre des valeurs.

    L'idée est :

     sFirstAddress = findRange.Address
                    foundRows.Add(findRange.Row)
                    Console.WriteLine("String ""{0}"" was found in cell: ""{1}""", stringToSearch, sFirstAddress)
                    findRange.EntireRow.Font.Color = Color.Red
    
    
                    findRange.Range("P" & sFirstAddress).Select()

    Mais bien sur cela ne marche pas.Je ne vois pas comment indiquer qu'il faut aller chercher la cellule P de la ligne 126.

    Je joint mon code Complet :

      Private Sub ValidCom_Click(sender As Object, e As RoutedEventArgs)
            Dim targetSheet As Excel.Worksheet = Nothing
            Dim foundRows As New List(Of Integer)
            Dim miss As Object = Type.Missing
            XlsheetCommande = XlBookPoly.Sheets("Commande")
            XlsheetCommande.Range("M4").Value2 = ChoixDate.SelectedDate
            XlsheetCommande.Range("L6").Value2 = ChoixClient.Text
            XlsheetCommande.Range("L8").Value2 = ChoixProduit.Text
            Try
                'trouve les Cellules utilisées d'une feuille
                Dim xlRange As Excel.Range = DirectCast(XlsheetPoly.UsedRange, Excel.Range)
                Dim sFirstAddress As String
                'Définie la valeur à trouver
                Dim stringToSearch As String = "1"
                'dans quelle colonne
                Dim sourceRange As Excel.Range = DirectCast(xlRange.Range("C:C"), Excel.Range)
                'Utilisation de la fonction Find 
                Dim findRange As Excel.Range = sourceRange.Find(stringToSearch, miss, Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlPart,
                                                           Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, miss, miss, miss)
                'Si rien n'est trouvé alors exit
                If findRange Is Nothing Then
                    MessageBox.Show("Aucune Palette n'a été selectionnée", "Erreur", MessageBoxButton.OK, MessageBoxImage.Exclamation, MessageBoxResult.Cancel)
                    Return
                    'Si valeur trouvées
                Else
                    'Stock l'adresse dans une variable
                    sFirstAddress = findRange.Address
                    foundRows.Add(findRange.Row)
                    Console.WriteLine("String ""{0}"" was found in cell: ""{1}""", stringToSearch, sFirstAddress)
                    findRange.EntireRow.Font.Color = Color.Red
    
    
                    findRange.Range("P" & sFirstAddress).Select()
    
                    Do
                        'trouve la prochaine occurence de la valeur String
                        findRange = sourceRange.FindNext(findRange)
                        If findRange.Address <> sFirstAddress Then
                            Console.WriteLine("String ""{0}"" was found in cell: ""{1}""", stringToSearch, findRange.Address)
                            foundRows.Add(findRange.Row)
                            findRange.EntireRow.Font.Color = Color.Red
    
                        End If
                        'Reviens à la 1ere String trouvé en fin de Loop
                    Loop Until findRange.Address = sFirstAddress
                    If foundRows.Count > 0 Then
                        'Copy les lignes trouvées sur la feuille "Vente"
                        targetSheet = DirectCast(XlBookPoly.Worksheets.Item(3), Excel.Worksheet)
                        Dim cnt As Integer = 1
                        For Each nrow As Integer In foundRows
                            Dim copyRange As Excel.Range = DirectCast(xlRange.Rows(nrow), Excel.Range)
                            copyRange.Copy()
                             Dim targetRange As Excel.Range = DirectCast(targetSheet.Cells(cnt, 1), Excel.Range)
                            targetRange.PasteSpecial(Excel.XlPasteType.xlPasteValues, Excel.XlPasteSpecialOperation.xlPasteSpecialOperationNone, miss, miss)
                            cnt += 1
                        Next
                        targetSheet.Columns.AutoFit()
                        MessageBox.Show("Edition de Commande Terminée", "Commande", MessageBoxButton.OK, MessageBoxImage.Information _
                                    , MessageBoxResult.Cancel)
                    End If
                End If
            Catch ex As Exception
                MessageBox.Show(ex.Message & vbLf & ex.StackTrace, "Echec", MessageBoxButton.OK, MessageBoxImage.Error _
                            , MessageBoxResult.Cancel)
            Finally
                If XlsheetPoly.AutoFilterMode Then
                    '  MessageBox.Show("Tous les Filtres  " &
                    ' "Vont être supprimer", "Filtres", MessageBoxButton.OK, MessageBoxImage.Information, MessageBoxResult.Cancel) 'MsgBox a supprimer
                    With XlsheetPoly
                        .Range("A1:Q6000").AutoFilter(Field:=2)
                        .Range("A1:Q6000").AutoFilter(Field:=13)
                    End With
                End If
            End Try
            'copier coller les données de la feuille ventes vers la feuille commande
            targetSheet.Activate()
            targetSheet.Range("B1:O40").Select()
            targetSheet.Range("B1:O40").Copy()
            XlsheetCommande.Select()
            XlsheetCommande.Range("A11").Select()
            XlsheetCommande.Paste()
            ' XlsheetCommande.PasteSpecial(Excel.XlPasteType.xlPasteValues, Excel.XlPasteSpecialOperation.xlPasteSpecialOperationNone, miss, miss)
            XlBookPoly.Save()
            XlBookPoly.Close(True, miss)
            XlAppPoly.Quit()
        End Sub

    Merci de votre aide


    JF Collombet ® CreateSpecificCulture

    dimanche 1 mai 2016 04:15

Réponses

  • J'ai trouvé la solution avec la méthode Excel.Range.Offset :

       sFirstAddress = findRange.Address
                    foundRows.Add(findRange.Row)
                    Console.WriteLine("String ""{0}"" was found in cell: ""{1}""", stringToSearch, sFirstAddress)
                    findRange.EntireRow.Font.Color = Color.Red
                    Dim ClientColonne As Excel.Range = CType(findRange.Offset(0, 13), Excel.Range)
                    ClientColonne.Select()
                    ClientColonne.Value2 = ChoixClient.Text


    JF Collombet ® CreateSpecificCulture

    dimanche 1 mai 2016 04:46

Toutes les réponses

  • J'ai trouvé la solution avec la méthode Excel.Range.Offset :

       sFirstAddress = findRange.Address
                    foundRows.Add(findRange.Row)
                    Console.WriteLine("String ""{0}"" was found in cell: ""{1}""", stringToSearch, sFirstAddress)
                    findRange.EntireRow.Font.Color = Color.Red
                    Dim ClientColonne As Excel.Range = CType(findRange.Offset(0, 13), Excel.Range)
                    ClientColonne.Select()
                    ClientColonne.Value2 = ChoixClient.Text


    JF Collombet ® CreateSpecificCulture

    dimanche 1 mai 2016 04:46
  • Bonjour, jeffcollombet,

    Je vous remercie d'avoir partagé cette solution avec la communauté du forum.

    Cordialement,
    Teodora


    Votez! Appel à la contribution TechNet Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    mardi 3 mai 2016 09:24
    Modérateur