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 !

blancolie

XLDnaute Impliqué
Bonjour le forum,

j'aimerais comprendre certaines expressions trouver ds le codage VBA.

tablo(i, 4)) : le i veut dire quoi et tablo également ?
For i ?

merci de votre aide
 
bonjour dans ce code suivant :

VB:
If Not vide And LCase(IIf(fournisseur = "", "", tablo(i, 4)) & Chr(1) & tablo(i, 1)) Like critere Then
        n = n + 1
        resu(n, 1) = tablo(i, 4)
        resu(n, 2) = tablo(i, 1)
        resu(n, 3) = tablo(i, 2)
        resu(n, 4) = tablo(i, 5)
        resu(n, 5) = tablo(i, 6)
    End If


tablo, c'est le nom du tableau qu on a déclaré et je suppose que resu c'est pareil. et N et I représente bien les lignes je suppose ?

Merci.
 
bonjour dans ce code suivant :

VB:
If Not vide And LCase(IIf(fournisseur = "", "", tablo(i, 4)) & Chr(1) & tablo(i, 1)) Like critere Then
        n = n + 1
        resu(n, 1) = tablo(i, 4)
        resu(n, 2) = tablo(i, 1)
        resu(n, 3) = tablo(i, 2)
        resu(n, 4) = tablo(i, 5)
        resu(n, 5) = tablo(i, 6)
    End If


tablo, c'est le nom du tableau qu on a déclaré et je suppose que resu c'est pareil. et N et I représente bien les lignes je suppose ?

Merci.
 
Bonsoir @blancolie 🙂

D'après ce que je comprends et devine, en français sans VB:

Préparation :
  • On lit des données issues d'une feuille de classeur qu'on place dans un tableau de nom tablo (variable tablo)
  • On déclare sans doute un tableau resu qui sera le résultat souhaité (variable resu)

Traitement :
  • On va parcourir les lignes du tableau tablo en incrémentant la variable i
  • Si les valeurs de la ligne i répondent à certaines conditions alors :
  • on va écrire des données dans la tableau résultat à une ligne plus bas que la dernière ligne écrite (c'est pourquoi on incrémente n via n=n+1). On écrit les données dans resu à la ligne n.
A la fin :
  • A la fin de la boucle les résultats sont dans le tableau resu et le nombre de lignes écrites dans le tableau est n (si on a commencé à écrire à la ligne 1)
  • En général, on transfert le tableau résultat resu sur une feuille Excel

Donc i et n désigne (logiquement) un numéro de ligne de tableau (respectivement de tablo et de resu)
 
Dernière édition:
je cherche à rajouter des critères sur ce code mais j'échoue. as tu une idée pour y arriver ? merci de ton aide

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [B:F]) Is Nothing Then Exit Sub
Dim vide As Boolean, fournisseur$, critere$, tablo, resu(), i&, n&
vide = [B2] & [C2] & [D2] & [E2] = ""
fournisseur = [B2]
critere = LCase(fournisseur & Chr(1) & CStr([C2])) & "*"   'textes commenant par C2....
tablo = Sheets("BDD_Technique").[A2].CurrentRegion.Resize(, 6) 'matrice, plus rapide
ReDim resu(1 To UBound(tablo), 1 To 7)
For i = 2 To UBound(tablo)
    If Not vide And LCase(IIf(fournisseur = "", "", tablo(i, 4)) & Chr(1) & tablo(i, 1)) Like critere Then
        n = n + 1
        resu(n, 1) = tablo(i, 4) 'Numero 4 = Fournisseur / resu(n, 1) = B
        resu(n, 2) = tablo(i, 1) 'Numero 1 = plante /resu(n, 2) = C
        resu(n, 3) = tablo(i, 2) 'Numero 2 = couleur/resu(n, 3) = D
        resu(n, 4) = tablo(i, 5) 'Numéro 5 = contenance / resu(n, 4) =E
        resu(n, 5) = tablo(i, 6)  'Numero 6 = Marché / resu(n, 5) =F
    End If
Next
'---restitution---
Application.EnableEvents = False 'd_sactive les _vnementssss
If FilterMode Then ShowAllData 'si la feuille est filtr_e
With [B5] '1re cellule de restitutionnnn
    If n Then
        .Resize(n, 7) = resu
        .Resize(n, 7).Borders.Weight = xlThin 'bordures
    End If
    .Offset(n).Resize(Rows.Count - n - .Row + 1, 7).ClearContents 'RAZ en dessous
    .Offset(n).Resize(Rows.Count - n - .Row + 1, 7).Borders.LineStyle = xlNone
End With
Columns(3).AutoFit 'ajustement largeur
ActiveWindow.ScrollRow = 1 'cadrage
With UsedRange: End With 'actualise la barre de d_filement verticale
Application.EnableEvents = True 'r_active les _vnementssss
End Sub
 

Pièces jointes

Re,

Je ne connais pas ton code.
resu est une variable. On peut la nommer comme on veut : resu, tabloresultat, toto, mavariable.
Tout comme la variable i qui contient un nombre ou la variable n qui contient aussi un nombre.
(le terme "contenir" est impropre mais suffit largement quand on débute)

Affecter du texte à une variable nombre aboutira à une erreur. Affecter un nombre à une variable texte aboutira à une erreur (c'est plus compliqué en VBA, mais ça devrait être comme ça)

Dans le code, on a l'instruction :
VB:
tablo = Sheets("BDD_Technique").[A2].CurrentRegion.Resize(, 6)
Que fait cette instruction ? Grosso modo, elle ordonne à VBA de placer les valeurs d'une plage d'une feuille Excel (la base de données qui nous intéresse) dans un tableau nommé tablo.

A ce stade, tablo est donc un tableau qui comporte autant de ligne que la base de donnée. Ce nombre de ligne de table s'écrit : UBound(tablo)

Avec ces renseignements, on va déclarer un tableau pour stocker le résultat. Ce tableau, on le nomme resu. On va le dimensionner à autant de ligne que tablo et avec 7 colonnes:
Code:
ReDim resu(1 To UBound(tablo), 1 To 7)
 
tablo = Sheets("BDD_Technique").[A2].CurrentRegion.Resize(, 6), cette ligne va récupérer les infos dans l'onglet BDD_technique.

ce code n'est pas de moi mais me plait mais rajouter des critères car je veux que le filtrage soit le plus précis. regarde mon fichier post 51
 
- 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
2
Affichages
427
Réponses
2
Affichages
185
Réponses
5
Affichages
420
Réponses
6
Affichages
115
Réponses
5
Affichages
703
Réponses
13
Affichages
350
Retour