Vba excel boucle for

[Résolu/Fermé]
Signaler
Messages postés
418
Date d'inscription
lundi 8 juin 2009
Statut
Membre
Dernière intervention
25 août 2013
-
Messages postés
16018
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
15 octobre 2021
-
Bonjour,

voila je vous expose mon probleme :

j'ai créer une dll sous c++ (test_dll) avec une lib comportan une fonction avec plusieurs variables,

function de la lib

void__stdcal toto(BSTR A, BSTR B, BSTR C)
{
....
}

ensuite j'ai declarer ma lib sous vba

Module1

Private Declare Sub toto Lib "test_dll.dll" (ByVal A As String, ByVal B As String, ByVal CAs String)

et pour faire appel a la fonction de ma lib j'ai réalisé la procedure suivante:


Sub test()

'Déclaration des variables
Dim A As String
Dim B As String
Dim C As String

'Valeurs des variables


A = Feuil2.Range("A2").Value
B = Feuil2.Range("B2).Value
C = Feuil2.Range("C2).Value

'Call la dll

toto A, B, C


End Sub


Et un bouton dans un userform qui me permet d'appeler la procedure

Private Sub CommandButton1_Click()

Call module1.test

End Sub

et ca marche super


mon code me permet d'appeler la fonction de ma lib en lui affectant les données de la ligne A2 C2

mais je dispose d'un tableau de plusieurs lignes (A1:C500) avec bien sure A1:C1 comme entetes du tableau

ma question : comment je pourrais mettre en place une boucle for

qui me permettra d'appeler la fonction de ma lib pour chaque ligne

j'espere que j'etais claire

merci de votre aide

cordialement


je ne peu mettre le fichier exemple car il faut avoir les dll sous windows --> systeme32

4 réponses

Messages postés
16018
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
15 octobre 2021
1 544
Bonjour,

Sub test()
  'Déclaration des variables
  Dim A As String
  Dim B As String
  Dim C As String
  Dim Plage As Range
  Dim Cel As Range

  With Feuil2
    Set Plage = .Range("A2:A500")
    'Valeurs des variables
    For Each Cel In Plage
      A = .Range("A" & Cel.Row).Value
      B = .Range("B" & Cel.Row).Value
      C = .Range("C" & Cel.Row).Value

      'Call la dll
      toto A, B, C
    Next Cel
  End With
End Sub


Bonne suite
Messages postés
418
Date d'inscription
lundi 8 juin 2009
Statut
Membre
Dernière intervention
25 août 2013
12
Bonjour et merci mille fois pour votre aide ca marche super bien
merci, merci, merci, merci, merci, merci


Je vous souhaite une bonne journée

Cordialement
Messages postés
418
Date d'inscription
lundi 8 juin 2009
Statut
Membre
Dernière intervention
25 août 2013
12
serait-il possible de m'expliquer un peu votre code SVP

merci


Cordialement
Messages postés
16018
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
15 octobre 2021
1 544
Bonjour,

Sub test()
  'Déclaration des variables
  Dim A As String
  Dim B As String
  Dim C As String
  Dim Plage As Range
  Dim Cel As Range
  'Definition d'un bloc with end with pour Feuil2
  'Tous les objets ayant un point (.Range("A2:A500")) sont de la feuil2
  With Feuil2
    'Definition de la plage de cellules a tester
    Set Plage = .Range("A2:A500")
    'Valeurs des variables
    'Pour chaque cellule ou range dans la plage Plage("A2:A500")
    For Each Cel In Plage
      'Cel definie comme range: Cel.Row donne la ligne, Cel.Column donne la colonne
      'de la cellule testee (vous avez toutes les proprietes d'une cellule ou range)
      A = .Range("A" & Cel.Row).Value
      B = .Range("B" & Cel.Row).Value
      C = .Range("C" & Cel.Row).Value

      'Call la dll
      toto A, B, C
    Next Cel
  End With
End Sub