Selectionner un plage de valeur à partir d'une cellule avec texte précis

Bonjour,

moi voila de retour avec cette fois ci un peu de VBA.

Explication :

Je vais importer des données d'un fichier excel variable "Fichier A" (fichier excel créé après chaque mesure 3D) vers un fichier pour exploiter les données "Fichier B" .

Pour me facilter un peu et éviter trop de lien entre deux fichier, je souhaite récupérer une certaine plage de donnée du "fichier A" pour la coller dans mon "fichier B", le reste du trie se fera en rechercheV dans le meme fichier

Cependant cette plage de celle n'est pas toujours au même endroit.

Ma question est donc : Comment Faire pour une sélectionner une plage de valeur à partir d'une cellule contenant un texte précis.

A partir de la cellule contenant "Tableau d'entité géométrique"(se trouve dans la colonne A) il faut que les 36 prochaines lignes et les colonnes de A à F soit sélectionné.

Comment faire?

Désolé je ne pourrais pas mettre le fichier du rapport de mesures pour des raison de confidentialité, si c'est vraiment nécessaire je ferais un fichier exemple.

Merci d'avance pour votre aide

Bonjour,

  • Récuperer la cellule que tu recherche avec par exemple la fonction find.
  • Enfin, il suffit d'ajouter 36 à la ligne précédemment obtenu pour connaitre le numéro de la ligne de la fin de ta plage.

Si tu as des question, ne pas hésiter.

Cordialement

Bonjour le fil, bonjour le forum,

Il manque beaucoup de données ! Tu devras adapter le code ci-dessous. Code à mettre dans le fichier B :

Sub Macro1()
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim DEST As Range 'déclare la variable DEST (Cellule de DESTination)
Dim R As Range 'déclare la variable R (Recherche)

Set CD = ThisWorkbook 'définit le classeur destination CD
Set OD = CD.Worksheets(1) 'définit l'onglet destination OD (à adapter à ton cas)
Set CS = Workbooks("Fichier A.xlsx") 'définit le classeur source CS (à adapter a ton cas)
Set OS = CS.Worksheets(1) 'définit l'onglet source OS (à adapter à ton cas)
Set DEST = OD.Range("A1") 'définit la cellule de destination DEST (à adapter à ton cas)
Set R = OS.Columns(1).Find("Tableau d'entité géométrique", , xlValues, xlWhole) 'définit la recherche  R
's'il existe au moins une occurrence trouvée, copie la cellule R redimensionnée et la colle dans DEST
If Not R Is Nothing Then R.Resize(36, 6).Copy DEST
End Sub

Bonjour,

Tu peux t'inspirer de cette macro

Sub Test()
Dim C As Range, MaPlage As Range
    Set C = Columns("A").Find("Tableau d'entité géométrique", , xlValues, xlPart)
    If Not C Is Nothing Then
        Set MaPlage = C.Offset(1).Resize(36, 6)
        MsgBox "La plage correspond à l'adresse " & MaPlage.Address(0, 0)
    End If
End Sub

Cordialement.

Merci à tous pour votre aide mais je n'y arrive toujours pas...

J'aurai du préciser que je n'ai peu voir aucune compétence en VBA...

Vince1512 :

Je ne peux pas faire juste avec la une sélection de cellule car ma cellule "Tableau d'entité géométrique" peut varier d'emplacement.

Il faut donc absolument que la cellule soit sélectionné si celle ci contient "Tableau d'entité géométrique"

ThauThème :

Je n'arrive pas à remplacer correctement les variables, très certainement des erreurs de manipulation de ma part

Gyrus :

Cette macro semble fonctionner mais à moitié, j'ai uniquement le message concernant la plage de valeur mais celle ci n'est pas sélectionné...

Re,

Je ne peux pas faire juste avec la une sélection de cellule car ma cellule "Tableau d'entité géométrique" peut varier d'emplacement.

La fonction find permet de localiser une cellule selon son contenu. Après si tu n'as aucune connaissance en VBA, je t'invite à aller lire un cours dessus (trouvable relativement facilement sur le net). Ça te permettra rapidement d'avoir un niveau suffisant pour comprendre la plus part des manipulations, ensuite il te manquera juste des notions d’algorithmie et des connaissances vis à vis des fonctions évitant de nombreuses lignes de codes inutiles.

effectivement j'ai pas fait attention à la formule Find,

Je vais chercher quelque cours sur le VBA afin de ne pas être largué car je dois finir ce fichier le plus tôt possible

Merci pour ton aide

Bonjour,

Tu peux t'inspirer de cette macro

Sub Test()
Dim C As Range, MaPlage As Range
    Set C = Columns("A").Find("Tableau d'entité géométrique", , xlValues, xlPart)
    If Not C Is Nothing Then
        Set MaPlage = C.Offset(1).Resize(36, 6)
        MsgBox "La plage correspond à l'adresse " & MaPlage.Address(0, 0)
    End If
End Sub

Cordialement.

Je reviens sur ce problème, cette macro marche très bien cependant cela m'indique seulement la plage mais ne la sélectionne pas.

Comment faire pour que la plage soit sélectionné et copié ?

si je rajoute .Select cela marche puis ça me met une erreur :"Erreur d'exécution '424': Objet requis"

MAJ 10:25 : C'est bon j'ai réussi à sélectionner et copier, à partir d'un même classeur sur un même onglet maintenant il faut que j'adapte à un fichier différent

Merci d'avance

Bonjour le fil, bonjour le forum,

Il manque beaucoup de données ! Tu devras adapter le code ci-dessous. Code à mettre dans le fichier B :

Sub Macro1()
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim DEST As Range 'déclare la variable DEST (Cellule de DESTination)
Dim R As Range 'déclare la variable R (Recherche)

Set CD = ThisWorkbook 'définit le classeur destination CD
Set OD = CD.Worksheets(1) 'définit l'onglet destination OD (à adapter à ton cas)
Set CS = Workbooks("Fichier A.xlsx") 'définit le classeur source CS (à adapter a ton cas)
Set OS = CS.Worksheets(1) 'définit l'onglet source OS (à adapter à ton cas)
Set DEST = OD.Range("A1") 'définit la cellule de destination DEST (à adapter à ton cas)
Set R = OS.Columns(1).Find("Tableau d'entité géométrique", , xlValues, xlWhole) 'définit la recherche  R
's'il existe au moins une occurrence trouvée, copie la cellule R redimensionnée et la colle dans DEST
If Not R Is Nothing Then R.Resize(36, 6).Copy DEST
End Sub

Je viens d'essayer mais je n'arrive pas à adapter, cela me met des messages d'erreur

Sub Macro1()
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim DEST As Range 'déclare la variable DEST (Cellule de DESTination)
Dim R As Range 'déclare la variable R (Recherche)

Set CD = ThisWorkbook 'définit le classeur destination CD
Set OD = CD.Worksheets(Tampon) 'définit l'onglet destination OD (à adapter à ton cas)
Set CS = Workbooks("rapport RPF D OF 53119359.xlsx") 'définit le classeur source CS (à adapter a ton cas)
Set OS = CS.Worksheets(Feuil1) 'définit l'onglet source OS (à adapter à ton cas)
Set DEST = OD.Range("A1") 'définit la cellule de destination DEST (à adapter à ton cas)
Set R = OS.Columns(1).find("Tableau d'entité géométrique", , xlValues, xlWhole) 'définit la recherche  R
's'il existe au moins une occurrence trouvée, copie la cellule R redimensionnée et la colle dans DEST
If Not R Is Nothing Then R.Resize(36, 6).Copy DEST
End Sub

Re,

Il manque des guillemets aux noms des onglets :

Set OD = CD.Worksheets("Tampon")
Set OS = CS.Worksheets("Feuil1") 

Re,

Il manque des guillemets aux noms des onglets :

Set OD = CD.Worksheets("Tampon")
Set OS = CS.Worksheets("Feuil1") 

Merci,

mon problème ce déplace maintenant, à la ligne

Set CS = Workbooks("rapport RPF G OF53119339.xlsx") 'définit le classeur source CS (à adapter a ton cas)

Cela m'indique "l'indice n'appartient pas à la sélection"

MAJ : Erreur de ma part, en regardant un peu mieux on trouve, mon fichier est un .xls et non xlsx

Merci beaucoup pour ton aide, maintenant, comment je peux faire en sorte que le nom du fichier soit réccupérer à partir d'une cellule ?

Cellule E9 onglet "A saisir" Fichier B

Re,

je ne comprends pas. Récupérer (=ce nom existe dans la cellule) ou stocker (=mettre le nom dans la cellule) le nom du fichier. pour quoi faire ? Explique nous mieux s'il te plaît.

Merci beaucoup pour votre aide, je pense avoir réussi tout ce que je voulais faire, voici le code

Sub transfertdonnées()

Worksheets("A saisir").Select
NumOF = Range("E9").Value 'Vient récupérer le numéro d'OF
Workbooks.Open Filename:="V:\Mes documents\A320 NEO\Rapport RPF\Rapport RPF Excel\" & NumOF & ".xls"
'Ouvre le rapport en fonction du numéro d'OF récupérer

    Application.ScreenUpdating = False

Dim CD As Workbook 'déclare la variable CD (Classeur Destination (carte de controle))
Dim CS As Workbook 'déclare la variable CS (Classeur Source (rapport de mesures))
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim DEST As Range 'déclare la variable DEST (Cellule de DESTination)
Dim R As Range 'déclare la variable R (Recherche)

'Vient chercher la cellule contenant "Tableau d'identité géométrique" puis copie la selection des valeurs pour la coller dans l'onglet tampon

Set CD = ThisWorkbook 'définit le classeur destination CD
Set OD = CD.Worksheets("Tampon") 'définit l'onglet destination OD (à adapter à ton cas)
Set CS = Workbooks("" & NumOF & "")  'définit le classeur source CS (à adapter a ton cas)
Set OS = CS.Worksheets("Feuil1") 'définit l'onglet source OS (à adapter à ton cas)
Set DEST = OD.Range("A1") 'définit la cellule de destination DEST (à adapter à ton cas)
Set R = OS.Columns(1).Find("Tableau d'entité géométrique", , xlValues, xlWhole) 'définit la recherche  R
's'il existe au moins une occurrence trouvée, copie la cellule R redimensionnée et la colle dans DEST
If Not R Is Nothing Then R.Resize(36, 6).Copy DEST

    ActiveWorkbook.Close
    'ferme le rapport de mesures après la copie et collage des valeurs

Worksheets("A saisir").Select
DG = Range("E13").Value

If DG = "G" Then 'Si l'élément est un Gauche alors

Sheets("Copie Données").Select  'Copie des donnés concernant le RPF Gauche Extrados
    Range("B2:T2").Select
    Selection.Copy
    Sheets("GAUCHE Extrados (GE)").Select  'vient se positionner sur la feuille des valeurs gauche Extrados
    Range("A1").End(xlDown).Offset(1).Select 'Récupère la première cellule vide du tableau des valeurs
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False 'colle les valeurs

Sheets("Copie Données").Select  'Même étape que précédement pour la partie Intrados RPF Gauche
    Range("B5:S5").Select
    Selection.Copy
    Sheets("GAUCHE Intrados (GI)").Select
    Range("A1").End(xlDown).Offset(1).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

Else  'Si l'élément n'est pas un Gauche (ou si rien de marqué dans "E13")

Sheets("Copie Données").Select  'Copie des donnés concernant le RPF Droit Extrados
    Range("B12:T12").Select
    Selection.Copy
    Sheets("DROIT Extrados (DE)").Select  'vient se positionner sur la feuille des valeurs Droit Extrados
    Range("A1").End(xlDown).Offset(1).Select 'Récupère la première cellule vide du tableau des valeurs
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False 'colle les valeurs

Sheets("Copie Données").Select  'Même étape que précédement pour la partie Intrados RPF Droit
    Range("B9:S9").Select
    Selection.Copy
    Sheets("DROIT Intrados (DI)").Select
    Range("A1").End(xlDown).Offset(1).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

End If

Sheets("Tampon").Select            'Efface le contenu dans la feuille Tampon
        Range("A1:G36").Select
    Selection.ClearContents
    Range("A1").Select
    Sheets("A saisir").Select          'Efface les données dans "information A saisir"
    Range("E12:E14").Select
    Selection.ClearContents
    Range("E15").Select
Sheets("A saisir").Select

   Application.ScreenUpdating = True

End Sub

Ce que je voulais faire c'était récupérer le nom dans la cellule car c'est le nom de mon fichier (ce nom est lui même créé à partir de plusieurs fichier)

Je pense avoir ce qu'il me faut, n'hésitez pas à me dire si vous voyer eds truc qui pourrait manquer ou alors des truc inutiles à enlever

Merci

Re,

La règle d'or en VBA c'est d'éviter autant que tu le peux les Select et autres Activate inutiles. Il ne font que ralentir l'exécution du code et sont source de plantage. Les conventions disent aussi de déclarer les variables en début de code. Cela permet à un autre utilisateur de repérer facilement les variables utilisées et de mieux lire ton code.

Le code Modifié :

Sub transfertdonnées()
Dim CD As Workbook 'déclare la variable CD (Classeur Destination (carte de controle))
Dim CS As Workbook 'déclare la variable CS (Classeur Source (rapport de mesures))
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim DEST As Range 'déclare la variable DEST (Cellule de DESTination)
Dim R As Range 'déclare la variable R (Recherche)

Application.ScreenUpdating = False
Set CD = ThisWorkbook 'définit le classeur destination CD
Set OD = CD.Worksheets("Tampon") 'définit l'onglet destination OD (à adapter à ton cas)
NumOF = Worksheets("A saisir").Range("E9").Value 'Vient récupérer le numéro d'OF
Set CS = Workbooks.Open("V:\Mes documents\A320 NEO\Rapport RPF\Rapport RPF Excel\" & NumOF & ".xls")
Set OS = CS.Worksheets("Feuil1") 'définit l'onglet source OS (à adapter à ton cas)
Set DEST = OD.Range("A1") 'définit la cellule de destination DEST (à adapter à ton cas)
Set R = OS.Columns(1).Find("Tableau d'entité géométrique", , xlValues, xlWhole) 'définit la recherche  R
's'il existe au moins une occurrence trouvée, copie la cellule R redimensionnée et la colle dans DEST
If Not R Is Nothing Then R.Resize(36, 6).Copy DEST
CS.Close False
'ferme le rapport de mesures après la copie et collage des valeurs

DG = Worksheets("A saisir").Range("E13").Value
If DG = "G" Then 'Si l'élément est un Gauche alors
    Sheets("Copie Données").Range("B2:T2").Copy
    Sheets("GAUCHE Extrados (GE)").Range("A1").End(xlDown).Offset(1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
       :=False, Transpose:=False 'colle les valeurs
    Sheets("Copie Données").Range("B5:S5").Copy
    Sheets("GAUCHE Intrados (GI)").Range("A1").End(xlDown).Offset(1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
       :=False, Transpose:=False
Else  'Si l'élément n'est pas un Gauche (ou si rien de marqué dans "E13")
    Sheets("Copie Données").Range("B12:T12").Copy
    Sheets("DROIT Extrados (DE)").Range("A1").End(xlDown).Offset(1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
       :=False, Transpose:=False 'colle les valeurs
    Sheets("Copie Données").Range("B9:S9").Copy
    Sheets("DROIT Intrados (DI)").Range("A1").End(xlDown).Offset(1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
       :=False, Transpose:=False
End If

Sheets("Tampon").Range("A1:G36").ClearContents
Sheets("A saisir").Range("E12:E14").ClearContents
Sheets("A saisir").Activate
Application.ScreenUpdating = True
End Sub

super merci beaucoup,

je test ça demain et je fais un retour

Re,

La règle d'or en VBA c'est d'éviter autant que tu le peux les Select et autres Activate inutiles. Il ne font que ralentir l'exécution du code et sont source de plantage. Les conventions disent aussi de déclarer les variables en début de code. Cela permet à un autre utilisateur de repérer facilement les variables utilisées et de mieux lire ton code.

Le code Modifié :

Sub transfertdonnées()
Dim CD As Workbook 'déclare la variable CD (Classeur Destination (carte de controle))
Dim CS As Workbook 'déclare la variable CS (Classeur Source (rapport de mesures))
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim DEST As Range 'déclare la variable DEST (Cellule de DESTination)
Dim R As Range 'déclare la variable R (Recherche)

Application.ScreenUpdating = False
Set CD = ThisWorkbook 'définit le classeur destination CD
Set OD = CD.Worksheets("Tampon") 'définit l'onglet destination OD (à adapter à ton cas)
NumOF = Worksheets("A saisir").Range("E9").Value 'Vient récupérer le numéro d'OF
Set CS = Workbooks.Open("V:\Mes documents\A320 NEO\Rapport RPF\Rapport RPF Excel\" & NumOF & ".xls")
Set OS = CS.Worksheets("Feuil1") 'définit l'onglet source OS (à adapter à ton cas)
Set DEST = OD.Range("A1") 'définit la cellule de destination DEST (à adapter à ton cas)
Set R = OS.Columns(1).Find("Tableau d'entité géométrique", , xlValues, xlWhole) 'définit la recherche  R
's'il existe au moins une occurrence trouvée, copie la cellule R redimensionnée et la colle dans DEST
If Not R Is Nothing Then R.Resize(36, 6).Copy DEST
CS.Close False
'ferme le rapport de mesures après la copie et collage des valeurs

DG = Worksheets("A saisir").Range("E13").Value
If DG = "G" Then 'Si l'élément est un Gauche alors
    Sheets("Copie Données").Range("B2:T2").Copy
    Sheets("GAUCHE Extrados (GE)").Range("A1").End(xlDown).Offset(1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
       :=False, Transpose:=False 'colle les valeurs
    Sheets("Copie Données").Range("B5:S5").Copy
    Sheets("GAUCHE Intrados (GI)").Range("A1").End(xlDown).Offset(1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
       :=False, Transpose:=False
Else  'Si l'élément n'est pas un Gauche (ou si rien de marqué dans "E13")
    Sheets("Copie Données").Range("B12:T12").Copy
    Sheets("DROIT Extrados (DE)").Range("A1").End(xlDown).Offset(1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
       :=False, Transpose:=False 'colle les valeurs
    Sheets("Copie Données").Range("B9:S9").Copy
    Sheets("DROIT Intrados (DI)").Range("A1").End(xlDown).Offset(1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
       :=False, Transpose:=False
End If

Sheets("Tampon").Range("A1:G36").ClearContents
Sheets("A saisir").Range("E12:E14").ClearContents
Sheets("A saisir").Activate
Application.ScreenUpdating = True
End Sub

Salut !

Je viens de changer avec ton code et c'estsuper ça marche beaucoup mieux, c'est beaucoup plus fluide.

Merci beaucoup ton aide ça m'a vraiment aidé

Merci également à tous les autres pour leur aide

Problème résolu !

Rechercher des sujets similaires à "selectionner plage valeur partir texte precis"