Définir une plage variable

Bonjour à tous,

Ce que je veux faire est tout bête, mais je tourne en rond depuis 40min sans arriver à mes fins !

La première ligne de mon classeur contient des données, de A1 à A33. Il se peut que dans le futur, cela s'étende au dela de la 33eme colonne. Ce que je veux faire, c'est stocker dans une variable, une plage variable qui comprendrait l'ensemble des cellules contenant des données, de cette première ligne. Par la suite je recherche des données dans cette plage variable en fait.

Je veux quelque chose du style qui suit:

j = ThisWorkbook.Sheets("Sheet1").Cells(1, 1000).End(xlToLeft).Column
Set plageRecherche = ThisWorkbook.Sheets("Sheet1").Range([Surligner]???[/Surligner])

J'ai tenter des Range(Cells(1,1),Cells(j,1)) ou des Range("A1" & ":" & j & "1") mais je n'y arrive pas .. Quelqu'un aurait-il une solution svp ?

Merci d'avance et bonne journée !

SkillzZ

Bonjour,

Les lettres : A, B, C... représentent les colonnes, et les chiffres (1 à 33 dans ton cas), les lignes ! Tu as donc des confusions à ce niveau. Ensuite, "j" dans ta macro est une variable qui contient un indice de colonne (la colonne complétée la plus à droite de ton fichier, en te basant sur la première ligne). Cet indice est un nombre, et pas une lettre. Par exemple, si c'est la colonne C, j = 3.

Merci de préciser si la partie amenée à varier est la ligne ou la colonne.

Bonjour,

Pour définir la plage sur la colonne A à partir de A1 :

With ActiveSheet: Set Plage = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp)): End With

Pour définir la plage sur toutes la feuille sans trop savoir où elle finie, petite fonction :

Function DefPlage(Fe As Worksheet, Optional L As Long = 1, Optional C As Long = 1) As Range

    On Error GoTo Fin

    With Fe

        Set DefPlage = .Range(.Cells(L, C), _
                       .Cells(.Cells.Find("*", .[A1], -4123, , _
                       1, 2).Row, .Cells.Find("*", .[A1], -4123, , _
                       2, 2).Column))

    End With

    Exit Function

Fin:

    Set DefPlage = Nothing

End Function

que tu appelles de cette façon :

Set Plage = DefPlage(ActiveSheet, 5, 3)

où les arguments L (pour ligne) et C (pour colonne) sont facultatifs et qui ont comme valeurs par défaut 1 afin de commencer en A1 (ligne 1, colonne 1).

Dans mon exemple, la page sera définie à partir de C5 (5ème ligne et 3ème colonne)

@Theze, félicitations, le vert te sied à merveille !

Bonjour à tous,

Merci pour vos réponses !

@Pedro: Ce sont les colonnes qui sont amenées à varier. Ma plage sera toujours sur la première ligne, et commencera toujours à partir de la cellule A1. Par contre elle peut finir à F1, mais aussi à AA1 ou encore AR1 par exemple. Je veux définir une plage capable de s'adapter. Je viens de me rendre compte que j'ai fait une énorme confusion par écrit en effet..

Sachant que la fin de cette plage sur la première ligne, va être marquée par une cellule vide ! C'est cette cellule vide qui devrait permettre d'identifier la fin de la plage.

@Theze: Du coup Theze, peut-être que ce que tu m'as écrit n'est pas adapté par rapport à ma demande vu que je me suis emmêlé les pinceaux. Par ailleurs ta fonction, (que je ne comprends pas mais sur laquelle je vais réfléchir), me semble très complexe par rapport à ma (nouvelle) demande. Mais peut-être qu'il faut au moins ça. Merci en tout cas !!

Si vous avez qqchose de plus simple maintenant que j'ai été plus précis, je suis preneur . Merci encore et bonne journée !

SkillzZ

Dans ce cas, voilà une syntaxe possible :

Range(Cells(1, 1), Cells(33, j))

Merci Pedro.

Mais j'ai toujours une erreur qui ne cesse de me bloquer. Erreur 1004, à la ligne où j'ai implémenter ta solution:

Sub inserstion()
Dim Trouve As Range, PlageDeRecherche As Range
Dim Valeur_Cherchee As String, nbscolonnes As Long, valeurcc As String, gg As Long
Dim Account_Code As String, j As Long
Account_Code = "CC_1450" 'UCase(InputBox("inserer le numero du Account_Code à ajouter"))
'Parent = UCase(InputBox("inserer le nom du Account_Code parent associé"))
'CC_Code = UCase(InputBox("inserer le nom du cost center associé"))

j = ThisWorkbook.Sheets("Sheet1").Cells(1, 1000).End(xlToLeft).Column
[Surligner]Set PlageDeRecherche = ThisWorkbook.Sheets("Sheet1").Range(Cells(1, 1), Cells(1, j))[/Surligner]

Set Trouve = ThisWorkbook.Sheets("Sheet1").Rows(1).Find(What:=CC_Code, LookAt:=xlWhole)

If Trouve Is Nothing Then
    nbscolonnes = CC_Code & " n'est pas présent dans " & PlageDeRecherche.Address
Else

    nbscolonnes = Trouve.Column

For i = 2 To ThisWorkbook.Sheets("Sheet1").Cells(Rows.Count, nbscolonnes).End(xlUp).Row
valeurcc = ThisWorkbook.Sheets("Sheet1").Cells(i, nbscolonnes).Value
Next

End If
MsgBox nbscolonnes
Set plageRecherche = Nothing
Set Trouve = Nothing
End Sub

Aurais-tu une idée par hasard ?

Avec ton fichier ce serait plus facile.

Tu peux déjà rendre ton code plus lisible en supprimant tous les "ThisWorkbook.Sheets("Sheet1")" et en mettant

With Sheets("Sheet1")
   .Range("Truc")
   .Cells(1, 1)
   '...
End With

Je crois que je viens de trouver la solution ou plutôt le problème. Je lançais cette macro à partir d'une feuille et non un module. À partir d'un module, plus d'erreur signalée ! Saurais-tu expliquer pourquoi ?

Merci Pedro en tout cas !

SkillzZ

Re,re,re,re salut SkilzZ,

on ne se quitte plus décidément!

SkillzZ, stp, à chaque demande : un fichier et des explications du pourquoi du comment!

A+

Bonjour Pedro22 !

Merci, merci

Pour définir la plage sur une ligne :

With ActiveSheet: Set Plage = .Range(.Cells(1, 1), .Cells(1, .Columns.Count).End(xlToLeft)): End With 'sur la première ligne

Attention à la parenté :

Set PlageDeRecherche = ThisWorkbook.Sheets("Sheet1").Range(Cells(1, 1), Cells(1, j))

avec ceci : ThisWorkbook.Sheets("Sheet1").Range( tu vises bien la feuille mais avec ça : Cells(1, 1), Cells(1, j) tu fais référence à la feuille active et non plus à "Sheet1" si cette dernière n'est pas la feuille active !

Haha, rerere !

J'ai trouvé la solution comme indiqué (j'avais codé dans une feuille, il fallait le faire dans un module), je vais mettre résolu. Merci 1000 fois, c'est vraiment top comme forum, j'ai jamais progressé aussi vite qu'avec l'aide des personnes d'ici !

Bon week-end à tous !

SkillzZ

Bonsoir SkillzZ, le forum,

le fichier de ce post t'intéressera peut-être :

https://forum.excel-pratique.com/viewtopic.php?p=726449#p726449

dhany

Rechercher des sujets similaires à "definir plage variable"