Besoin d'aide sur variable matricielle en vba
Résolu/Fermé
jen_peplu
Messages postés
33
Date d'inscription
samedi 4 décembre 2010
Statut
Membre
Dernière intervention
25 mars 2012
-
10 juil. 2011 à 18:52
jen_peplu Messages postés 33 Date d'inscription samedi 4 décembre 2010 Statut Membre Dernière intervention 25 mars 2012 - 15 juil. 2011 à 08:03
jen_peplu Messages postés 33 Date d'inscription samedi 4 décembre 2010 Statut Membre Dernière intervention 25 mars 2012 - 15 juil. 2011 à 08:03
A voir également:
- Besoin d'aide sur variable matricielle en vba
- Vba ouvrir un fichier excel avec chemin ✓ - Forum VB / VBA
- Find vba - Astuces et Solutions
- Incompatibilité de type vba ✓ - Forum Programmation
- Vba attendre 1 seconde ✓ - Forum VB / VBA
- Vba msgbox variable ✓ - Forum VB / VBA
9 réponses
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 303
Modifié par michel_m le 10/07/2011 à 22:11
Modifié par michel_m le 10/07/2011 à 22:11
bonsoir,
quelques remarques:
"stop" n'est pas une instruction VBa
Dim Adr, Par As Worksheet
Dim I, J As Byte
Adr et I sont donc des variant
il faut écrire
Dim Adr as worksheet, Par As Worksheet
Dim I as byte, J As Byte
d'autre part tu cherche la dernière ligne non vide avant 300 donc i et J doivent être des integer (puisque 300>255)
instructions inutiles: la fin de la macro éteint les variables
Erase Tablo1
Erase Tablo2
Erase Tablo3
Set Adr = Nothing
Set Par = Nothing
-----
code proposé à adapter à ta structure
demo
https://www.cjoint.com/?3GkwfSYSksi
Michel
quelques remarques:
"stop" n'est pas une instruction VBa
Dim Adr, Par As Worksheet
Dim I, J As Byte
Adr et I sont donc des variant
il faut écrire
Dim Adr as worksheet, Par As Worksheet
Dim I as byte, J As Byte
d'autre part tu cherche la dernière ligne non vide avant 300 donc i et J doivent être des integer (puisque 300>255)
instructions inutiles: la fin de la macro éteint les variables
Erase Tablo1
Erase Tablo2
Erase Tablo3
Set Adr = Nothing
Set Par = Nothing
-----
code proposé à adapter à ta structure
Option Explicit Option Base 1 Sub regrouper() Dim Lig_fin As Integer, Cptr As Integer, Cptr_out As Integer, Ref As String 'type à adapter Dim Dico As Object Dim Tablo1, Tablo3 With Sheets(2) Lig_fin = .Columns(2).Find("*", .Range("B1"), , , , xlPrevious).Row Set Dico = CreateObject("scripting.dictionary") For Cptr = 1 To Lig_fin Ref = Cells(Cptr, "B") If Not Dico.exists(Ref) Then Dico.Add Ref, Ref End If Next End With With Sheets(1) Lig_fin = .Columns(1).Find("*", .Range("A1"), , , , xlPrevious).Row Tablo1 = Application.Transpose(.Range("A1:A" & Lig_fin).Value) ReDim Tablo3(1) For Cptr = 1 To UBound(Tablo1) Ref = .Cells(Cptr, "A") If Not Dico.exists(Ref) Then Cptr_out = Cptr_out + 1 ReDim Preserve Tablo3(Cptr_out) Tablo3(Cptr_out) = Tablo1(Cptr) End If Next End With Application.ScreenUpdating = False With Sheets(3) With .Range("C1").Resize(Cptr_out, 1) .Value = Application.Transpose(Tablo3) .Borders.Weight = xlThin End With .Activate End With End Sub
demo
https://www.cjoint.com/?3GkwfSYSksi
Michel
jen_peplu
Messages postés
33
Date d'inscription
samedi 4 décembre 2010
Statut
Membre
Dernière intervention
25 mars 2012
11 juil. 2011 à 20:35
11 juil. 2011 à 20:35
Bonsoir Michel
Merci d'avoir répondu à ma question, tu as dû t'en apercevoir, je suis un néophyte en programmation et je ne comprends pas tout dans tes lignes de codes, après avoir testé la démo, ce que tu me proposes ne fait pas exactement ce que je recherche.
Je boucle et prélève les valeurs manquantes de Tablo2, dans Tablo1.
Je souhaiterai coller ces valeurs dans Tablo3. Et ce, je n'arrive pas à le faire.
Si je fais "Debug.Print" je visualise ces valeurs dans la fenêtre exécution, jusque là cela marche.
Comment écrire pour coller dans Tablo3 les valeurs manquantes trouvées, et accessoirement les coller dans feuille1 colonne "A".
J'ai trouvé "Stop" sur un forum, et cela me permet d'arrêter la macro dessus quand elle a bouclé et trouvé une valeur, ça fonctionne.
Merci pour tes remarques, c'est toujours instructifs (j'en ai bien besoin).
Cordialement
Jen_peplu
Merci d'avoir répondu à ma question, tu as dû t'en apercevoir, je suis un néophyte en programmation et je ne comprends pas tout dans tes lignes de codes, après avoir testé la démo, ce que tu me proposes ne fait pas exactement ce que je recherche.
Je boucle et prélève les valeurs manquantes de Tablo2, dans Tablo1.
Je souhaiterai coller ces valeurs dans Tablo3. Et ce, je n'arrive pas à le faire.
Si je fais "Debug.Print" je visualise ces valeurs dans la fenêtre exécution, jusque là cela marche.
Comment écrire pour coller dans Tablo3 les valeurs manquantes trouvées, et accessoirement les coller dans feuille1 colonne "A".
J'ai trouvé "Stop" sur un forum, et cela me permet d'arrêter la macro dessus quand elle a bouclé et trouvé une valeur, ça fonctionne.
Merci pour tes remarques, c'est toujours instructifs (j'en ai bien besoin).
Cordialement
Jen_peplu
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 303
Modifié par michel_m le 12/07/2011 à 08:28
Modifié par michel_m le 12/07/2011 à 08:28
Bonjour
Tu avais écrit
Je souhaite avec ce code, boucler sur deux tableaux, récupérer les valeurs de Tablo1 manquantes dans Tablo2
--
et maintenant
Je boucle et prélève les valeurs manquantes de Tablo2, dans Tablo1.
??????????????
Stop:
ca existe effectivement mais c'est la 1° fois que je la vois depuis >10 ans de VBA...
elle ne sert a rien:pour arr^ter une macro en cours d'essai, tu as les points d'arr^t (F9) ou clic dans la bande vertical gauche de l'éditeur VBE sur la ligne voulue
de plus elle est dangereuse car il faut détruire une ligne de code avant la livraison.
maintenant, tu fais ce que tu veux...
????
Michel
Tu avais écrit
Je souhaite avec ce code, boucler sur deux tableaux, récupérer les valeurs de Tablo1 manquantes dans Tablo2
--
et maintenant
Je boucle et prélève les valeurs manquantes de Tablo2, dans Tablo1.
??????????????
Stop:
ca existe effectivement mais c'est la 1° fois que je la vois depuis >10 ans de VBA...
elle ne sert a rien:pour arr^ter une macro en cours d'essai, tu as les points d'arr^t (F9) ou clic dans la bande vertical gauche de l'éditeur VBE sur la ligne voulue
de plus elle est dangereuse car il faut détruire une ligne de code avant la livraison.
maintenant, tu fais ce que tu veux...
????
Michel
jen_peplu
Messages postés
33
Date d'inscription
samedi 4 décembre 2010
Statut
Membre
Dernière intervention
25 mars 2012
12 juil. 2011 à 20:17
12 juil. 2011 à 20:17
Bonsoir Michel,
Je suis arrivé à ce que je voulais éviter, semer la confusion, je m'en excuse.
Le fichier que tu m'as proposé ne fait pas ce que je souhaite.
Je ne souhaite pas fusionner les deux listes, après comparaison de Tablo1 et Tablo2, je veux stocker les valeurs qui se trouvent dans Tablo1 mais pas dans Tablo2 dans Tablo3 et accessoirement les coller dans une feuille.
Je mets le code modifié comme tu me l'as conseillé.
Option Explicit
Option Base 1
Sub Tableau()
Dim Tablo1, Tablo2, Tablo3
Dim I As Integer, J As Integer
Dim bol As Boolean
Dim Adr As Worksheet, Par As Worksheet
Dim derligneAdr As Integer
Dim derlignePar As Integer
Set Adr = Sheets("ADRESSE")
Set Par = Sheets("Param")
derligneAdr = Adr.Range("A300").End(xlUp).Row
derlignePar = Par.Range("D300").End(xlUp).Row
Tablo1 = Adr.Range("A1:A" & derligneAdr)
Tablo2 = Par.Range("D2:D" & derlignePar)
For I = 1 To UBound(Tablo1, 1)
For J = 1 To UBound(Tablo2, 1)
If Tablo1(I, 1) = Tablo2(J, 1) Then bol = True
Next J
If bol = False Then 'jusque là ça fonctionne.
If Tablo3 <> "" Then ReDim Preserve Tablo3(UBound(Tablo3) + 1) 'il y a peut-être une erreur sur cette ligne ?
Tablo3(UBound(Tablo3)) = Tablo1(I, 1) '??????????????????? c'est là que je n'arrive pas à écrire dans le Tablo3 les valeurs du Tablo1 manquantes dans Tablo2
End If
bol = False
Next I
End Sub
Encore mille excuses pour la confusion engendrée, j'espère avoir été plus clair cette fois et merci pour tes conseils et ta patience.
Cordialement
Jen_peplu
Je suis arrivé à ce que je voulais éviter, semer la confusion, je m'en excuse.
Le fichier que tu m'as proposé ne fait pas ce que je souhaite.
Je ne souhaite pas fusionner les deux listes, après comparaison de Tablo1 et Tablo2, je veux stocker les valeurs qui se trouvent dans Tablo1 mais pas dans Tablo2 dans Tablo3 et accessoirement les coller dans une feuille.
Je mets le code modifié comme tu me l'as conseillé.
Option Explicit
Option Base 1
Sub Tableau()
Dim Tablo1, Tablo2, Tablo3
Dim I As Integer, J As Integer
Dim bol As Boolean
Dim Adr As Worksheet, Par As Worksheet
Dim derligneAdr As Integer
Dim derlignePar As Integer
Set Adr = Sheets("ADRESSE")
Set Par = Sheets("Param")
derligneAdr = Adr.Range("A300").End(xlUp).Row
derlignePar = Par.Range("D300").End(xlUp).Row
Tablo1 = Adr.Range("A1:A" & derligneAdr)
Tablo2 = Par.Range("D2:D" & derlignePar)
For I = 1 To UBound(Tablo1, 1)
For J = 1 To UBound(Tablo2, 1)
If Tablo1(I, 1) = Tablo2(J, 1) Then bol = True
Next J
If bol = False Then 'jusque là ça fonctionne.
If Tablo3 <> "" Then ReDim Preserve Tablo3(UBound(Tablo3) + 1) 'il y a peut-être une erreur sur cette ligne ?
Tablo3(UBound(Tablo3)) = Tablo1(I, 1) '??????????????????? c'est là que je n'arrive pas à écrire dans le Tablo3 les valeurs du Tablo1 manquantes dans Tablo2
End If
bol = False
Next I
End Sub
Encore mille excuses pour la confusion engendrée, j'espère avoir été plus clair cette fois et merci pour tes conseils et ta patience.
Cordialement
Jen_peplu
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 303
Modifié par michel_m le 13/07/2011 à 08:40
Modifié par michel_m le 13/07/2011 à 08:40
Bonjour,
il manquait 1 point devant un cells....
https://www.cjoint.com/?3GniD2WazJN
le dictionary permet de résoudre le pb en 2 boucles mais tu sembles vouloir garder tablo2 et boucler (derligneAdr x derlignePar) fois
comme tu veux....
pour progresser
https://bidou.developpez.com/article/VBA/
Michel
il manquait 1 point devant un cells....
https://www.cjoint.com/?3GniD2WazJN
le dictionary permet de résoudre le pb en 2 boucles mais tu sembles vouloir garder tablo2 et boucler (derligneAdr x derlignePar) fois
comme tu veux....
pour progresser
https://bidou.developpez.com/article/VBA/
Michel
jen_peplu
Messages postés
33
Date d'inscription
samedi 4 décembre 2010
Statut
Membre
Dernière intervention
25 mars 2012
14 juil. 2011 à 06:34
14 juil. 2011 à 06:34
Bonjour Michel
Apparemment, je suis dans l'erreur en persistant dans ma voie. Pouquoi ?
Dans ".Find("*", .Range" que veut dire "*" ?
Merci pour le lien, maintenant, je vais décoder ton code pour coder le mien mais il y a des choses que je n'ai jamais utilisé, comme "CreateObject", il faut un début à tout et je n'en suis toujours qu'au début, au besoin je reviendrai.
Cordialement
Jen_peplu
Apparemment, je suis dans l'erreur en persistant dans ma voie. Pouquoi ?
Dans ".Find("*", .Range" que veut dire "*" ?
Merci pour le lien, maintenant, je vais décoder ton code pour coder le mien mais il y a des choses que je n'ai jamais utilisé, comme "CreateObject", il faut un début à tout et je n'en suis toujours qu'au début, au besoin je reviendrai.
Cordialement
Jen_peplu
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 303
Modifié par michel_m le 14/07/2011 à 08:09
Modifié par michel_m le 14/07/2011 à 08:09
!!!!!
Abandon du suivi...
Abandon du suivi...
jen_peplu
Messages postés
33
Date d'inscription
samedi 4 décembre 2010
Statut
Membre
Dernière intervention
25 mars 2012
14 juil. 2011 à 18:13
14 juil. 2011 à 18:13
Merci pour tout, désolé si je t'ai ennuyé.
Cordialement
Cordialement
nicocorico
Messages postés
799
Date d'inscription
dimanche 19 juin 2011
Statut
Membre
Dernière intervention
3 juillet 2018
138
14 juil. 2011 à 19:58
14 juil. 2011 à 19:58
T'inquiètes quand on débute c'est jamais facile, et c'est pas toujours évident non plus de garder patience quand on conseille, et il faut que tu prennes bien le temps d'apprendre par toi-même, de rechercher, de réfléchir... Buter sur un problème pendant des jours, c'est parfois désespérant mais c'est là qu'on apprend le plus!
alors bon courage...
alors bon courage...
Le chêne aussi était un gland, avant d'être un chêne
jen_peplu
Messages postés
33
Date d'inscription
samedi 4 décembre 2010
Statut
Membre
Dernière intervention
25 mars 2012
15 juil. 2011 à 08:03
15 juil. 2011 à 08:03
Bonjour
Je le conçois très bien, vous êtes là gracieusement pour nous aider et je comprends qu'au bout d'un moment l'on puisse vous paraître pénible. Mais le plus
frustrant, ce sont les réponses que je ne comprends pas.
Bonne journée
Je le conçois très bien, vous êtes là gracieusement pour nous aider et je comprends qu'au bout d'un moment l'on puisse vous paraître pénible. Mais le plus
frustrant, ce sont les réponses que je ne comprends pas.
Bonne journée