Création d'une macro sélectionnant plusieurs lignes à partir d'une réf

Bonjour à tous,

Tout d'abord, je me présente, Anto, Noobs total en VBA mais cherchant à utiliser des macros pour des fichiers excel dans une asso dont je suis le trésorier.
Je vous explique mon projet :
Créer une macro permettant de sélectionner des lignes en cherchant une référence située dans plusieurs feuilles excel à savoir :
- bouton pour la macro sur la feuille "formulaire"
- référence à trouver sur feuille "projet", "ODJ COTEC" et "CR COTEC".

Etant complétement débutant, je me suis aidé de Chat GPT pour créer ce code VBA :

"Sub SélectionnerLignes()
Dim reference As String
Dim ws As Worksheet
Dim foundCell As Range ' Variable pour stocker la cellule où la référence est trouvée
Dim foundRow As Long ' Variable pour stocker le numéro de ligne où la référence est trouvée

' Demander à l'utilisateur de saisir une référence
reference = InputBox("Veuillez entrer une référence:", "Sélectionner lignes")
If reference = "" Then Exit Sub ' Sortir de la macro si l'utilisateur clique sur Annuler ou laisse la boîte de dialogue vide

' Parcourir les feuilles pertinentes dans le classeur
For Each ws In ThisWorkbook.Worksheets
If ws.Name = "Projet" Or ws.Name = "ODJ COTEC" Or ws.Name = "CR COTEC" Then
' Rechercher la référence dans la colonne A
Set foundCell = ws.Columns("A").Find(What:=reference, LookIn:=xlValues, LookAt:=xlWhole)

' Si la référence est trouvée
If Not foundCell Is Nothing Then
foundRow = foundCell.Row ' Stocker le numéro de ligne
ws.Rows(foundRow).Select ' Sélectionner la ligne entière
Exit Sub ' Sortir de la macro après avoir trouvé la référence dans une seule feuille
End If
End If
Next ws

' Afficher un message si la référence n'a pas été trouvée dans les feuilles Excel
MsgBox "Référence non trouvée dans les feuilles Excel.", vbExclamation
End Sub"

Le débogage m'indique que la fonction pour sélectionner la ligne entière ne fonctionne pas... J'ai essayé de me débrouiller tout seul mais là, même en exploitant au max les solutions proposées par GPT cela me fait juste tourner en rond.

Je tente ma chance ici . Ce serait trop sympa de m'aider !

merci par avance et bonne journée,

PS : le fichier anonymisé en PJ

Bonsoir,

sans aller très loin, l'enregistreur de macro vous donne ceci : Rows("20:20").Select

En l'intégrant dans votre code, en remplaçant les 20 par votre variable mais en gardant la structure d'une chaine de caractères cela donnerait :
ws.Rows(foundRow & ":" & foundRow).Select ' Sélectionner la ligne entière

A tester...

L'enregistreur de macro se lance soit en cliquant sur l'icône carrée en bas à gauche de la fenêtre d'Excel, soit dans le menu "développeur" du ruban, sur la gauche c'est écrit en toute lettre (Attention il faut peut-être demander à l'afficher dans les paramètre du ruban).
Une fois l'enregistreur en marche il ne vous reste plus qu'à effectuer les opérations voulues, puis stopper l'enregistrement puis aller voir sous VBA ce que cela donne.

L'inconvénient c'est qu'avec l'enregistreur chaque clic de souris sur une cellule, objet et autre engendre du code de "Sélection", alors que dans la plupart (tous les) des cas cela n'est pas nécessaire et freine le déroulé du code VBA.
sur de petite macro ça passe sur d'autre c'est invivable.

Une question : pourquoi sélectionner la ligne entière ?

@ bientôt

LouReeD

Bonsoir LouReeD,

J'ai testé le code : ws.Rows(foundRow & ":" & foundRow).Select ' Sélectionner la ligne entière

mais on reste en mode bugué snif !

J'ai bien pensé à réaliser une macro par l'enregistreur, mais je ne vois pas comment faire car l'objectif est qu'excel trouve tout seul une référence dans la colonne A de chaque tableau puis derrière me sélectionne la ligne entière.

L'objectif final est ici de créer un bouton supprimer un projet (qui porte chacun une référence unique) et donc après la sélection des lignes que l'utilisateur soit en capacité de supprimer toutes les données d'un projet. ).

Quoiqu'il en soit, merci pour votre aide !

Bonsoir à tous ,

Le problème est que vous voulez sélectionner une ligne sur une feuille alors que cette feuille n'est pas la feuille active.

Vous lancez la macro à partir de la feuille "Formulaire" donc c'est la feuille "Formulaire" qui est la feuille active.

Quand vous avez trouvé la référence, vous voulez sélectionnez la ligne sur la feuille ws qui n'est pas la feuille active donc erreur.

Soit avant de sélectionner la ligne on ajoute l'instruction ws.Select qui rend la feuille ws active, soit on peut utiliser Application.goto Range qui va d’abord sélectionner la feuille du Range avant de sélectionner le Range.

Ce qui donnerait :

Sub SélectionnerLignes()
Dim reference As String, wsname, foundCell As Range

   reference = InputBox("Veuillez entrer une référence:", "Sélectionner lignes")
   If reference = "" Then Exit Sub

   For Each wsname In Array("Projet", "ODJ COTEC", "CR COTEC")
      Set foundCell = Sheets(wsname).Columns("A").Find(What:=reference, LookIn:=xlValues, LookAt:=xlWhole)
      If Not foundCell Is Nothing Then Application.Goto foundCell.EntireRow, True: Exit Sub
   Next wsname
   MsgBox "La Référence '" & reference & "' n'a pas été trouvée.", vbExclamation
End Sub

Je viens d'essayer ce code
Et il marche ! ... presque
En gros, la macro me sélectionne bien la ligne dans la feuille "projet" mais pas dans les autres.

Re ,

Je n’avais pas bien analysé la demande. Essayez ce code pour sélectionner les lignes concernées dans chacune des trois feuilles :

Sub SélectionnerLignes()
Dim reference As String, wsname, foundCell As Range, n&, s$

   reference = InputBox("Veuillez entrer une référence:", "Sélectionner lignes")
   If reference = "" Then Exit Sub

   For Each wsname In Array("Projet", "ODJ COTEC", "CR COTEC")
      Application.Goto Sheets(wsname).Range("a1"), True
      Set foundCell = Sheets(wsname).Columns("A").Find(What:=reference, LookIn:=xlValues, LookAt:=xlWhole)
      If Not foundCell Is Nothing Then n = n + 1: foundCell.EntireRow.Select
   Next wsname
   Sheets("formulaire").Select
   s = IIf(n = 0, "On n'a trouvé aucune occurrence de : " & reference, "On a trouvé " & n & " occurrence(s) de : " & reference)
   MsgBox s, vbInformation
End Sub

Ca marche nickel ! Un grand merci.

J'ai une autre requete :
Comme je le disais précédemment, la suite de mon projet est de créer un bouton "supprimer" les lignes sélectionner.
J'ai créé ce code :
"Sub SupprimerLignesSelectionneesClasseur()
Dim ws As Worksheet
Dim rng As Range
Dim cell As Range

' Parcourir chaque feuille dans le classeur
For Each ws In ThisWorkbook.Sheets
' Parcourir chaque cellule dans la feuille
For Each cell In ws.UsedRange
' Vérifier si la cellule est sélectionnée
If cell.EntireRow.Select = True Then
cell.EntireRow.Delete
End If
Next cell
Next ws

MsgBox "Les lignes sélectionnées sur toutes les feuilles du classeur ont été supprimées.", vbInformation
End Sub"

Et malheureusement je n'arrive pas à supprimer les lignes. Cela ne me supprime que le contenu des cellules .
Avez vous une idée par quoi remplacer "cell.EntireRow.Delete" pour arriver au résultat escompté ?

merciiii

Sans réponse ? Dois je ouvrir un autre post ?

Bonjour antoflos,

J'avais fait quelque chose qui était prêt dès l'aube et je viens de m'apercevoir que j'avais oublié de le posté .

Voici donc le classeur.

C est top ! Le code marche.... un grand merci à toi .

Rechercher des sujets similaires à "creation macro selectionnant lignes partir ref"