Selection d'une plage de cellules dans une autre feuille Excel

Bonjour à tous!

Histoire de ne pas faire dans la nouveauté, je voulais juste préciser que c'est ma première tentative VBA, et que je ne suis pas familier avec la programmation.

Mon problème :

Pour le boulot, je dois effectuer en automatique la procédure suivante, après avoir sélectionné une cellule contenant une valeur précise sur une feuille "Export" :

- Copier le contenu (Texte) de la cellule selectionnée dans une variable

- Chercher si cette variable se trouve dans la colonne A1 d'une autre feuille "Matrice"

- Sélectionner une plage de cellule (3x3) se trouvant 2 colonnes à droite de la cellule contenant le résultat de la recherche (première cellule de la plage se trouvant donc avec un offset de 0 ligne et 2 colonnes)

Je devrai ensuite faire un copier/coller de cette plage (3x3) pour la placer sur la feuille d'origine, à coté de la cellule sélectionnée initialement.

J'arrive à trouver la cellule de la feuille "Matrice" contenant ma recherche, mais je sèche ensuite...

Ci-dessous le code (très maladroit je le sais!) que j'ai réussi à faire en m'inspirant d'exemples que j'ai trouvés :

Sub Cherche()
'déclaration des variables :
Dim Trouve As Range
Dim PlageDeRechercheMoyen As Range
Dim ValeurAdresseMoyen As String


'affectation de valeurs aux variables :
'on cherche la valeur de la cellule active au moment du lancement de la macro
Valeur_Cherchee = ActiveCell.Value
MsgBox "Valeur recherchée : " & Valeur_Cherchee


'dans la première colonne de la feuille Essai_LISTING_MOYENS
Set PlageDeRechercheMoyen = Sheets("Matrice").Columns(1)


'méthode find, ici on cherche la valeur exacte (LookAt:=xlWhole)
Set Trouve = PlageDeRechercheMoyen.Cells.Find(what:=Valeur_Cherchee, LookAt:=xlWhole)


'traitement de l'erreur possible : Si on ne trouve rien :
If Trouve Is Nothing Then

'ici, traitement pour le cas où la valeur n'est pas trouvée
ValeurAdresseMoyen = " Pas de moyen " & Valeur_Cherchee & " dans le listing "
Else

'ici, traitement pour le cas où la valeur est trouvée
ValeurAdresseMoyen = Trouve.Address
End If
MsgBox ValeurAdresseMoyen

End Sub

N'hésitez pas à me demander des explications, car je me rends compte que je ne suis pas clair

Merci par avance pour le temsp que vous voudrez bien m'accorder.

Bonne fin de journée.

Sebastien

Salut Sebs,

Si j'ai bien compris la demande : un double-clic sur la valeur à rechercher en 'EXPORT' [A:A] démarre la macro

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'
If Not Intersect(Target, Columns(1)) Is Nothing And Target <> "" Then
    Cancel = True
    With Worksheets("MATRICE")
        Set rCel = .Columns(1).Find(what:=Target, lookat:=xlWhole, LookIn:=xlValues)
        If Not rCel Is Nothing Then
            Target.Offset(0, 1).Resize(3, 3).Value = rCel.Offset(0, 2).Resize(3, 3).Value
        Else
            MsgBox "Cette valeur n'est pas présente dans 'MATRICE'"
        End If
    End With
End If
'
End Sub
20sebs.xlsm (16.12 Ko)


A+

Salut curulis57,

Merci.

Et oui, tu as tout à fait compris la demande!!

Je dis respect. Je viens de tester et cela fonctionne parfaitement.

Sans vouloir abuser, maintenant que je vois comme VBA est simple pour qui connait, j'aurais encore une demande...

J'avais sciemment simplifier ma première question, histoire de pouvoir m'expliquer et comprendre la réponse, mais vu que cela est fait.

En fait, la taille de la plage à copier/coller depuis 'MATRICE' n'est pas constante en 3x3, mais va varier (plus ou moins de module mécanique dans les moyens, donc plus ou moins de ligne à copier, mais toujours avec un offset de 3 colonnes).

Il faudrait que je trouve la première cellule vide sous ''rCel.Offset(0, 2)" (donc en colonne 3) afin de pouvoir déterminer le nombre de lignes que va comporter la plage à copier.

Je n'aurai ensuite plus qu'à changer la valeur dans les "Resize" par celle calculée précédemment.

Si tu as 5 min, je suis preneur.

Et encore merci pour ton aide !

A+

Voyons si je comprends toujours aussi bien

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'
Dim rCel As Range, iRow%
'
If Not Intersect(Target, Columns(1)) Is Nothing And Target <> "" Then
    Cancel = True
    With Worksheets("MATRICE")
        Set rCel = .Columns(1).Find(what:=Target, lookat:=xlWhole, LookIn:=xlValues)
        If Not rCel Is Nothing Then
            iRow = IIf(rCel.Offset(1, 2) = "", 1, rCel.Offset(0, 2).End(xlDown).Row)
            Target.Offset(0, 1).Resize(iRow, 3).Value = rCel.Offset(0, 2).Resize(iRow, 3).Value
        Else
            MsgBox "Cette valeur n'est pas présente dans 'MATRICE'", vbInformation + vbOKOnly, "Sebs-Info"
        End If
    End With
End If
'
End Sub
23sebs.xlsm (16.76 Ko)


A+

Salut curulis57,

Tu mastérises toujours autant!

Ça marche nickel. J'ai juste changé un peu la valeur de iRow car il me copiait des blocs trop gros (valeur de la ligne alors qu'il me fallait le nombre de ligne entre rCell et iRow).

Franchement merci!

Je suis en train de tenter de continuer le fichier.

Je reviendrai vers toi si je bloque encore.

Bonne AM.

Salut Sebs,

exact, je l'ai pensé après coup mais sans corriger de suite et j'ai oublié...
Il pourrait y avoir un autre problème si les blocs de données sont contigus :xldown donnerait alors une mesure erronée.
Pour finaliser ce fichier, il faudrait un fichier proche de la structure réelle !


A+

Merci encore à toi Curulis!

J'ai terminé le petit fichier.

Je clos le sujet. Mais je garde cette adresse en favoris !

Bonne journée.

Sebs

Rechercher des sujets similaires à "selection plage feuille"