Microsoft 365 VBA

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
 

JBARBE

XLDnaute Barbatruc
Re,
Bon sang, fait une recherche dans Google !
Par exemple, affichage du nom de la feuille dans une boîte de dialogue :
VB:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    MsgBox "Nom de la feuille : " & Sh.Name
End Sub
@+
 

JBARBE

XLDnaute Barbatruc
Re,
et aussi :
Si vous souhaitez créer une boucle sur l'ensemble des feuilles de calcul, utilisez:
Code:
'Déclare la variable objet Worksheet
Dim Ws As Worksheet

'Boucle sur toutes les feuille de calcul du classeur. Les onglets graphiques ne sont pas pris
'en compte.
'ThisWorkbook correspond à l'objet classeur contenant la macro
For Each Ws In ThisWorkbook.Worksheets
    'Renvoie le nom de chaque feuille
    MsgBox Ws.Name
Next Ws
@+
 

Dranreb

XLDnaute Barbatruc
Like est un opérateur permettant de comparer un String avec un masque comportant des caractères jockers. Je crois deviner chez vous un désir de notions basiques qui vous permettrait de généraliser ensuite à plein d'autres choses. Mais pourriez vous exposer plus précisément les lacunes conceptuelles qui vous bloquent ?
 

JBARBE

XLDnaute Barbatruc
Bonsoir Dranreb,
Je lui conseille de commencer par des choses simples !
Le like viendra après !
On ne s'improvise pas programmeur du jour au lendemain !
Cela demande beaucoup de travail et de patience !
Les liens fournis constitue déjà une base solide !
De plus, en surfant sur ce forum, l'on en apprend tout les jours !
Bon courage blancolie !
 

blancolie

XLDnaute Impliqué
Bonsoir vous tous et merci pour les liens vers des cours ou exemple sur le VBA.

Voila le code qui se trouve sur feuil1 ( bien sur, ce n'est pas moi qui l' a écrit) :

VB:
Option Explicit

Private Sub Worksheet_Activate()
Worksheet_Change [C2] 'lance la macro
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [B:E]) Is Nothing Then Exit Sub
Dim vide As Boolean, fournisseur$, critere$, tablo, resu(), i&, n&
vide = [B2] & [C2] = ""
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)
        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
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

Sub Transfert()
Dim n&, tablo, w As Worksheet, nf$, i&
With [A4].CurrentRegion
    n = Application.CountIf(.Columns(7), ">0")
    If n = 0 Then Exit Sub
    If MsgBox("Transf_rer " & n & " ligne" & IIf(n = 1, " ?", "s ?"), 36, "Transfert") = 7 Then Exit Sub
    tablo = .Resize(, 8) 'matrice, plus rapide
    For Each w In Worksheets
        nf = LCase(w.Name)
        If nf Like "devis*" Then
            For i = 2 To UBound(tablo)
                If nf Like "*" & LCase(tablo(i, 2)) And Val(tablo(i, 7)) > 0 Then _
                    .Cells(i, 3).Resize(, 6).Copy w.Cells(w.Rows.Count, 2).End(xlUp)(2) 'copier-coller
            Next i
            w.Columns(2).AutoFit 'ajustement largeur
            w.Columns(7).AutoFit 'ajustement largeur
        End If
    Next w
End With
End Sub

Sub RAZ()
'---pour les feuilles des devis---
With ActiveSheet
    If .Name Like "Devis*" Then .Rows("2:" & .Rows.Count).Delete xlUp
End With
End Sub

Ce code sert à rechercher dans mon dossier comportant plusieurs onglets ( se nommant devis fanfelle, devis chombart etc etc) et ( un onglet recherche et choix ).

Voici le fichier, c'est plus parlant.

et dans this workbook, ce code :

Code:
Option Explicit
Option Compare Text 'la casse est ignor_e

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If Not Sh.Name Like "Devis*" Then Exit Sub
Dim i&
Application.ScreenUpdating = False
With Sh
    .[B:C].Copy .[J1]
    .[F:F].Copy .[L1]
    .[D:E].Copy .[M1]
    .Range("O2:P" & .Rows.Count).Delete xlUp 'RAZ
    With [J1].CurrentRegion
        If .Rows.Count = 1 Then Exit Sub
        .Sort .Cells(1), xlAscending, Header:=xlYes 'tri
        For i = .Rows.Count To 2 Step -1
            If .Cells(i, 1) & UCase(.Cells(i, 2)) = .Cells(i - 1, 1) & UCase(.Cells(i - 1, 2)) Then _
                .Cells(i - 1, 3) = .Cells(i - 1, 3) + .Cells(i, 3): .Rows(i).Delete xlUp '_limine les doublons
        Next
        With .Cells(2, 6).Resize(.Rows.Count - 1, 2) 'colonnes O:P
            .Columns(1) = "=VLOOKUP(RC[-5],BDD_Technique!C1:C7,7,0)" 'RECHERCHEV
            .Columns(2) = "=RC[-4]*RC[-1]" 'Quantit_ x Prix U.H.T
            .Value = .Value 'supprime les formules
            .Borders.Weight = xlThin 'complte les borduress
        End With
    End With
End With
End Sub

la plus plus part du code avec ce que vous m'envoyez comme lien et ce que je trouve sur le net, je comprends grosso modo mais ce sont les subtilitées si on peu appeler comme ca comme les i ou N ( mais la j'ai compris).

Mon but est de comprendre ce code pour l' adapter et pour mon travail. je sais faire cela en formule excel mais le vba est plus adapter.

Je cherche evidemment à comprendre le vba mais tranquillement mais est que j'ai la capacité à le comprendre, à voir ds le temps si j'arrive à produire quelque chose.

Désole de vous agacer et merci de votre gentillesse de prendre du temps à m'expliquer.

Mais c'est vrai que a travers des exercices simples serait plus simple à comprendre.
 

Pièces jointes

  • Fichier demande de devis.xlsm
    80.4 KB · Affichages: 14

JBARBE

XLDnaute Barbatruc
Re,
Je vois que c'est du lourd !
Pas sûr que tu comprennes tout de suite !
Quant à l'adapter à ton projet, je crois qu'il vaudrait mieux le faire faire par des bénévoles compétent comme Dranreb et autres qui on l'habitude de ce genre de programmation !
Bon courage !
 

JBARBE

XLDnaute Barbatruc
oui c'est du lourd mais il est déjà adapté à mon projet mais je veux qu'il prenne des options en plus.
et oui je ferais appel à vous bien sur mais je vais essayer de comprendre
Re,
En principe les bénévoles compétents ne reprennent jamais des codes qui n'ont pas été effectués par eux même ! A moins que je me trompe ! Je ne voudrais pas te faire peur !
Je comprends ces codes grâce aux différents exemple que j'ai eu sur ce forum depuis plusieurs années ( eh oui ), mais suis incapable de modifier celui-ci ni de programmer comme ceci !
Je suis de la vieille école avec le 1er excel ( office 95)( j'ai 70 piges ) et j'ai pas mal de problèmes de santé qui ne me permettent pas de travailler longtemps sur ordi !
Bonne nuit !
 

Discussions similaires

Réponses
4
Affichages
165

Statistiques des forums

Discussions
311 725
Messages
2 081 943
Membres
101 849
dernier inscrit
florentMIG