bonjour tout le monde
j'ai quelques questions à poser sur VBE s'il y a quelqu'un qui le maitrise qu'il réponde, merci d'avance
bonjour tout le monde
j'ai quelques questions à poser sur VBE s'il y a quelqu'un qui le maitrise qu'il réponde, merci d'avance
Soir Bon
Tout d'abord éviter le gabuzomeu
Ensuite voir http://silkyroad.developpez.com/VBA/VisualBasicEditor/
http://office.developpez.com/
merci pour ta réponse , j'ai ouvert le lien mais ma question c'est Ecrire un programme pour afficher sur une autre feuille de calcul les personnes (nom et prénom) de genre masculin ayant Bateaux comme centre d’intérêt. (sachant qu'on a déjà comme données un tableau contenant le nom prénom et toput le reste ) donc comment afficher ces infos dans une autre page?
bonjour
un petit bou de code qui repondra peut etre a ta question
feuille "source" :
nom prenom sexe (M/F) bateau (O/N)
aaaaaaaa abs M N
bbbbbb fd M O
ccccccc jd F O
dddddddd ds M O
eeeeeee ll M N
ffffffffffffff sdf M N
ggggggggg fd M O
hhhhhhhhhh sdf F N
iiiiiii ez F O
sub :
feuille "but" :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 Sub recopie() ' ************************* poser le probleme ****************************** 'suposition une feuille "source" 'A1 = "NOM" 'A2 = "PRENOM" 'A3 = "SEXE (M/F)" 'A4 = "BATEAU (O/N)" ' ************************* but de la macro ****************************** ' le nombre de ligne de la feuille "source" n'est pas connu ' la macro va copier de la feuille "source" sur la feuille "but" les noms et prenoms ' des ligne ayant sexe = "M" et bateau = "O" ' ************************* declaration des variables ****************************** 'nombre de lignes de la feuille "source" Dim nbligsce As Integer ' flag de fin de derniere ligne Dim flag As Boolean ' variable de boucle Dim i As Integer Dim j As Integer 'ligne en cours de la feuille "but" Dim ligbutencours As Integer ' ************************* compte le nombre de ligne source ****************************** ' initialise nombre de ligne a zero et flag a true nbligsce = 0 flag = True ' jusqu'a ce que flag soit false ajoute 1 a nombre de ligne Do Until flag = False nbligsce = nbligsce + 1 ' si la cellule 1 de la ligne en cours est vide alors flag a false If Worksheets("source").Cells(nbligsce, 1).Value = "" Then flag = False Loop ' enleve la derniere ligne celle qui est vide du compteur de lignes nbligsce = nbligsce - 1 ' ************************* copie des donnees ****************************** 'initialise la ligne de titre de la feuille "but" Worksheets("but").Cells(1, 1).Value = "NOM" Worksheets("but").Cells(1, 2).Value = "PRENOM" 'ligne en cours de la feuille "but" ligbutencours = 2 ' pour les nbligavt lignes For i = 2 To nbligsce 'teste et copie de la ligne If Worksheets("source").Cells(i, 3).Value = "M" And Worksheets("source").Cells(i, 4).Value = "O" Then For j = 1 To 4 Worksheets("but").Cells(ligbutencours, 1).Value = Worksheets("source").Cells(i, 1).Value Worksheets("but").Cells(ligbutencours, 2).Value = Worksheets("source").Cells(i, 2).Value Next j ligbutencours = ligbutencours + 1 End If Next i
NOM PRENOM
bbbbbb fd
dddddddd ds
ggggggggg fd
cordialement
GERARD
Reformulation de la solution de gedechp, utilisant moins de boucles et des fonctionalités natives d'Excel-VBA. Devrait être plus rapide sur de longues listes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 Sub CopierEntreFeuilles() ' Cette macro recherche les enregistrements dans la feuille "source", ' du classeur en cours, ayant (Sexe = "M") ET (Bateaux = "O") et les copie ' sur la feuille "but". ' La feuille source est constituée de quatre colonnes avec une ligne d'entêtes ' et d'un nombre indéterminé d'enregistrements. ' Déclarations ' ------------ ' Instances des feuilles traitées par la macro Dim wksSource As Worksheet Dim wksBut As Worksheet ' Variable utilitaires pour recherche Dim PremiereAdresse As String ' Adresse de la premiere cellule trouvée Dim rngColonneRecherche As Range ' Plage dans laquelle la recherche s'effectue Dim rngTrouve As Range ' Cellule dans laquelle le mot est trouvé ' Connecter les instances à aucun autre classeur que celui-ci pour éviter l'utilisation ' de la macro sur d'autres classeurs. Set wksSource = ThisWorkbook.Worksheets("source") Set wksBut = ThisWorkbook.Worksheets("but") ' Copier la ligne d'entêtes sur la feuille "but" wksSource.Range("A1:D1").Copy wksBut.Cells(1, 1).PasteSpecial ' Limiter la recherche dans la colonne du sexe (colonne 3) Set rngColonneRecherche = wksSource.Cells(2, 3).Resize(wksSource.UsedRange.Rows.Count - 1, 1) ' Rechercher les valeurs "M" (Masculin) dans la colonne Set rngTrouve = rngColonneRecherche.Find(What:="M") If Not rngTrouve Is Nothing Then ' Une cellule contenant le mot a été trouvée PremiereAdresse = rngTrouve.Address ' Prendre en note l'adresse pour terminer ' la boucle lorsqu'on aura fait le tour. ' Boucle de recherche des autres correspondances Do If rngTrouve.Offset(0, 1).Value = "O" Then ' Tous les champs correspondent ' Copier toute la ligne correspondante wksSource.Cells(rngTrouve.Row, 1).Resize(1, 4).Copy ' Coller après la dernière ligne wksBut.Cells(wksBut.UsedRange.Rows.Count + 1, 1).PasteSpecial End If ' Rechercher après rngTrouve Set rngTrouve = rngColonneRecherche.FindNext(After:=rngTrouve) ' Si aucune correspondance, alors on sort de la boucle If rngTrouve Is Nothing Then Exit Do ' Continuer tant qu'on ne revient pas à la première cellule Loop While Not rngTrouve.Address = PremiereAdresse End If End Sub![]()
bonjour a tous et merci singular
j'ai décortiqué ton code et c'est vraiment tres formateur.
cordialement
GERARD
bonjour s'il vous plait j'ai besoin d'aide pour résoudre par exemple Un=2Un+1+Un la question c'est de calculer si n=1,n=0....) je signale que la suite n'est qu'un exemple j'ai besoin de connaitre juste la forme generale du programme VBexcel
hota02
Comme l'indique le titre de ton message, il s'agit d'un nouveau problème.
L'usage sur ce site (et n'importe quel autre site du genre, d'ailleurs) est de marquer cette présente discussion comme étant résolue, si elle l'est, et d'en ouvrir une autre concernant le nouveau problème.
![]()
Partager