Associer le numéro de la ligne au nom d'une variable

  • Initiateur de la discussion Initiateur de la discussion Fab117
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Fab117

XLDnaute Impliqué
Salut, est-il possible d'associer le nom d'une variable à une autre ?
Je m'explique, j'ai une boucle (For i = 1 To 200).

Dans cette boucle, il va scanner toutes les cellules d'une colonne. Je souhaiterais mettre le contenu de chaque cellule dans une variable.

J'ai donc essayé :

Dim ContenuCellule
Dim i
For i = 1 To 200
ContenuCellule & i = Range("C" & i)
Next i

Mais ça ne lui a pas plus

Quelqu'un a-t-il une solution ?
Merci d'avance.

Fab
 
Re : Associer le numéro de la ligne au nom d'une variable

Bonjour FAB

Tu peux utiliser une variable tableau qui te permettra de stocker tes infos

Exemple

dim TabContenu(200)

range("C1").select
for i = 1 to 200
tabcontenu(i)=activecell
activecell.offset(1,0)
Next

A +

Jeannot
 
Re : Associer le numéro de la ligne au nom d'une variable

En fait, pour être plus précis,
Je souhaiterais qu'il ne stocke en mémoire que ceux dont une condition est rempli.
J'ai un tableau avec ~150 lignes (chaque ligne correspond à un article).
Dans la colonne A j'ai le numéro de l'article et dans la colonne C son statut.
Ce que je voudrais, c'est qu'il stocke en mémoire tous les numéros d'article dont le contenu de la colonne C est "à controler".

Fab
 
Re : Associer le numéro de la ligne au nom d'une variable

re_salut

tu mets dans en z1 par exemple =nb.si($C:$C,"à controler")

nb = range("Z1").value
redim variable(nb)
nl=0
for i = 1 to 200
if condition=ok then
nl = nl +1
variable(nl)=valeur
next i

salutations
 
Re : Associer le numéro de la ligne au nom d'une variable

Bonjour le fil

En reprenant la solution de wilfried_42

Une méthode pour dimentionner le tableau
Dim tab()
' une boucle pour compter
for i = 1 to dernière ligne
if condition=ok then
nl = nl +1
next i
' on redimentionne le tableau
redim tab(nl)

for i = 1 to 200
if condition=ok then
nl = nl +1
variable(nl)=valeur
next i

JP
 
Re : Associer le numéro de la ligne au nom d'une variable

Bonsoir

Ci dessous la macro modifiée
Sub Essai()

Dim NumeroArticle, DateDeProduction
Dim i, n, l
Dim colonne1a As String
Dim dl1 As Long
Dim nomfeuille1 As String
nomfeuille1 = "vrac"
colonne1a = "C"
dl1 = Sheets(nomfeuille1).Range(colonne1a & "65536").End(xlUp).Row
j = 2
For i = 2 To dl1
Sheets("vrac").Select
If Range("C" & i) = "a commander" Then j = j + 1
Next

ReDim variable(1 To j)
' Met les n° de produits d'intéret en mémoire
j = 1
For i = 2 To 10
Sheets("vrac").Select
If Range("C" & i) = "a commander" Then
variable(j) = Range("A" & CStr(i)).Value
j = j + 1
End If
Next

' Passe sur le planning de production pour rechercher si les
' produits d'interets vont être fabriqués
For n = 2 To 15
Sheets("planning").Select
NumeroArticle = Range("B" & n)
For j = 1 To UBound(variable)
If NumeroArticle = variable(j) Then
DateDeProduction = Range("A" & n)
Sheets("Resultat").Select
For l = 2 To 10
If Range("A" & l) = "" Then
Range("A" & l) = NumeroArticle
Range("B" & l) = DateDeProduction
End If
Next l
End If
Next j
Next n

End Sub

JP
 
Re : Associer le numéro de la ligne au nom d'une variable

Bonjour le fil, bonjour le forum,

Je te propose cette macro commentée et testée :

Code:
Public Sub Macro1()
 
Dim p As Range 'déclare la variable p
Dim cel As Range 'déclare la variable cel
Dim tbl() As String 'déclare le tableau de variables tbl
Dim x As Integer 'déclare la variable x
Dim dest As Range 'déclare la variable dest
 
'*******************************
'stocke les articles à commander
'*******************************
 
With Sheets("vrac") 'pend en compte l'onglet "vrac"
    Set p = .Range("C2:C" & .Range("C65536").End(xlUp).Row) 'définit la variable p
End With 'fin de la prise en compte de l'onglet "vrac"
 
For Each cel In p 'boucle sur toutes les cellules de la plage
 
    If cel.Value = "a commander" Or cel.Value = "à commander" Then 'condition "si la valeur de la cellule est "a/à commander"
        ReDim Preserve tbl(x) 'redimensionne le tableau de variable tbl
        tbl(x) = CStr(cel.Offset(0, -2)) 'donne une valeur à la variable x du tableau
        x = x + 1 'définit/redéfinit la variable x
    End If 'fin de la condition
 
Next cel 'prochaine cellule de la plage
 
'********************************************
'Renvoie les valeurs planifiées dans Résultat
'********************************************
 
With Sheets("planning") 'pend en compte l'onglet "planning"
    Set p = .Range("B2:B" & .Range("B65536").End(xlUp).Row) 'définit la variable p
End With 'fin de la prise en compte de l'onglet "planning"
 
For Each cel In p 'boucle 1 : sur toutes les cellules de la plage
 
    For x = 0 To UBound(tbl, 1) 'boucle 2 : sur tous les élément du tableau de variables tbl
 
        If CStr(cel.Value) = tbl(x) Then 'confition 1 : si les deux valeurs sont identiques
 
            With Sheets("Resultat") 'pend en compte l'onglet "Resultat"
                If .Range("A1") = "" Then 'condition 2 : si A1 est vide
                    Set dest = .Range("A1") 'définit la variable dest (A1 si A1 est vide)
                Else 'sinon
                    Set dest = .Range("A65536").End(xlUp).Offset(1, 0) 'la première ligne vide rencontrée
                End If 'fin de la condition 2
            End With 'fin de la prise en compte de l'onglet "Resultat"
 
            dest.Value = cel.Value 'place la valeur colonne B
            dest.Offset(0, 1).Value = cel.Offset(0, -1).Value 'place la valeur colonne A
            Exit For 'sor de la boucle 2
 
        End If 'fin de la condition 1
 
    Next x 'prochain élément de la boucle 2
 
Next cel 'prochaine cellule de la boucle 1
 
End Sub
 
Re : Associer le numéro de la ligne au nom d'une variable

Salut,
Merci Robert, ça marche parfaitement, j'ai pu partiellement l'adapter.

En fait, dans l'exemple que j'ai donné, je ne rappatriais qu'une seule information de l'onglet Planning.
Dans la réalité, si la condition est remplie, il rappatrie le contenu de la ligne (de A à K) vers l'onglet Résultat.

Pourrais-tu encore s'il te plait m'indiquer comment faire stp ?

Pour info, je joins mon code en entier (en fait l'onglet Planning n'est pas dans le même fichier et il s'appelle Sheet1. De plus, j'ai un problème de format, donc au début je dois redéfinir les chiffres en chiffres)

Merci

Fab



Public Sub Macro1()

Dim p As Range 'déclare la variable p
Dim cel As Range 'déclare la variable cel
Dim tbl() As String 'déclare le tableau de variables tbl
Dim x As Integer 'déclare la variable x
Dim dest As Range 'déclare la variable dest

' _________________________________________________________________________________
Dim FichierSource As Workbook
Dim l, m
Dim Contenu


Set FichierSource = ActiveWorkbook
' *****************************************************************************************
' Conversion du format des numéros pour avoir le même format que dans le fichier initial
Windows("Worksheet in Basis (1)").Activate
Sheets("Sheet1").Select

For l = 2 To 200
Range("J" & l).Select
Contenu = Range("J" & l)
Contenu = Val(Contenu)
Range("J" & l) = Contenu
Next l
Range("A1").Select
' *****************************************************************************************

' *****************************************************************************************
' Conversion du format des numéros pour avoir le même format que dans la base de donné

FichierSource.Activate
Sheets("vrac").Select

For m = 2 To 200
Range("A" & m).Select
Contenu = Range("A" & m)
Contenu = Val(Contenu)
Range("A" & m) = Contenu
Next m
Range("A1").Select

' _________________________________________________________________________________

'*******************************
'stocke les articles à commander
'*******************************

With Sheets("vrac") 'prend en compte l'onglet "vrac"
Set p = .Range("C2:C" & .Range("C65536").End(xlUp).Row) 'définit la variable p
End With 'fin de la prise en compte de l'onglet "vrac"

For Each cel In p 'boucle sur toutes les cellules de la plage

If cel.Value = "a commander" Or cel.Value = "à commander" Then 'condition "si la valeur de la cellule est "a/à commander"
ReDim Preserve tbl(x) 'redimensionne le tableau de variable tbl
tbl(x) = CStr(cel.Offset(0, -2)) 'donne une valeur à la variable x du tableau
x = x + 1 'définit/redéfinit la variable x
End If 'fin de la condition

Next cel 'prochaine cellule de la plage

'********************************************
'Renvoie les valeurs planifiées dans Résultat
'********************************************
Windows("Worksheet in Basis (1)").Activate
With Sheets("Sheet1") 'prend en compte l'onglet "planning"
Set p = .Range("J2:J" & .Range("J65536").End(xlUp).Row) 'définit la variable p
End With 'fin de la prise en compte de l'onglet "planning"

For Each cel In p 'boucle 1 : sur toutes les cellules de la plage

For x = 0 To UBound(tbl, 1) 'boucle 2 : sur tous les élément du tableau de variables tbl

If CStr(cel.Value) = tbl(x) Then 'condition 1 : si les deux valeurs sont identiques
FichierSource.Activate
With Sheets("Resultat") 'prend en compte l'onglet "Resultat"
If .Range("A2") = "" Then 'condition 2 : si A1 est vide
Set dest = .Range("A2") 'définit la variable dest (A2 si A2 est vide)
Else 'sinon
Set dest = .Range("A65536").End(xlUp).Offset(1, 0) 'la première ligne vide rencontrée
End If 'fin de la condition 2
End With 'fin de la prise en compte de l'onglet "Resultat"

dest.Value = cel.Value 'place la valeur colonne B
dest.Offset(0, 1).Value = cel.Offset(0, -1).Value 'place la valeur colonne A
Exit For 'sor de la boucle 2

End If 'fin de la condition 1

Next x 'prochain élément de la boucle 2

Next cel 'prochaine cellule de la boucle 1

End Sub
 
Re : Associer le numéro de la ligne au nom d'une variable

Bonjour le fil, bonjour le forum,

Essaie comme ça :

Code:
Public Sub Macro1()
 
Dim p As Range 'déclare la variable p
Dim cel As Range 'déclare la variable cel
Dim tbl() As String 'déclare le tableau de variables tbl
Dim x As Integer 'déclare la variable x
Dim dest As Range 'déclare la variable dest
' __________________________________________________ _______________________________
Dim FichierSource As Workbook
Dim l, m

Set FichierSource = ActiveWorkbook
' ************************************************** ***************************************
' Conversion du format des numéros pour avoir le même format que dans le fichier initial
Windows("Worksheet in Basis (1)").Activate
Sheets("Sheet1").Select
For l = 2 To 200
Range("J" & l) = Val(Range("J" & l))
Next l
Range("A1").Select
' ************************************************** ***************************************
' ************************************************** ***************************************
' Conversion du format des numéros pour avoir le même format que dans la base de donné
FichierSource.Activate
Sheets("vrac").Select
For m = 2 To 200
Contenu = Range("A" & m) = Val(Range("A" & m))
Range("A1").Select
' __________________________________________________ _______________________________
'*******************************
'stocke les articles à commander
'*******************************
With Sheets("vrac") 'prend en compte l'onglet "vrac"
    Set p = .Range("C2:C" & .Range("C65536").End(xlUp).Row) 'définit la variable p
End With 'fin de la prise en compte de l'onglet "vrac"
For Each cel In p 'boucle sur toutes les cellules de la plage
If cel.Value = "a commander" Or cel.Value = "à commander" Then 'condition "si la valeur de la cellule est "a/à commander"
    ReDim Preserve tbl(x) 'redimensionne le tableau de variable tbl
    tbl(x) = CStr(cel.Offset(0, -2)) 'donne une valeur à la variable x du tableau
    x = x + 1 'définit/redéfinit la variable x
End If 'fin de la condition
Next cel 'prochaine cellule de la plage
'********************************************
'Renvoie les valeurs planifiées dans Résultat
'********************************************
Windows("Worksheet in Basis (1)").Activate
With Sheets("Sheet1") 'prend en compte l'onglet "planning"
    Set p = .Range("J2:J" & .Range("J65536").End(xlUp).Row) 'définit la variable p
End With 'fin de la prise en compte de l'onglet "planning"
For Each cel In p 'boucle 1 : sur toutes les cellules de la plage
    For x = 0 To UBound(tbl, 1) 'boucle 2 : sur tous les élément du tableau de variables tbl
        If CStr(cel.Value) = tbl(x) Then 'condition 1 : si les deux valeurs sont identiques
            
            [COLOR=red]FichierSource.Activate
            With Sheets("Resultat") 'prend en compte l'onglet "Resultat"
[/COLOR]                If .Range("A2") = "" Then 'condition 2 : si A1 est vide
                    Set dest = .Range("A2") 'définit la variable dest (A2 si A2 est vide)
                Else 'sinon
                    Set dest = .Range("A65536").End(xlUp).Offset(1, 0) 'la première ligne vide rencontrée
                End If 'fin de la condition 2
            End With 'fin de la prise en compte de l'onglet "Resultat"
            
            'copie la plage A:K de la cellule correspondante dans dest
            Range(Cells(cel.Row, 1), Cells(cel.Row, 11)).Copy Destination:=dest
            Exit For 'sor de la boucle 2
        
        End If 'fin de la condition 1
Next x 'prochain élément de la boucle 2
Next cel 'prochaine cellule de la boucle 1
End Sub

La partie en rouge m'inquiète un peu, mais je ne peux pas tester. Si ça plante, supprime la première ligne rouge et dans la deuxième :

With FichierSource.Sheets("Resultat") 'prend en compte l'onglet "Resultat"
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
237
Réponses
7
Affichages
365
Réponses
4
Affichages
194
Réponses
3
Affichages
677
Retour