Vba
Résoluusdy Messages postés 258 Statut Membre -
je souhaite copier des cellules d'une feuille A et les coller sur une feuille B, jusque là rien de bien compliqué
mais je voudrais que le collage se fasse à partir d'une cellule précise, donc je dois rendre la cellule concernée active
mais je n'y arrive pas.
merci de m'aider
Configuration: Windows XP Firefox 2.0.0.12
21 réponses
- 1
- 2
La problématique centrale concerne le collage de cellules d'une feuille A vers une feuille B à partir d'une cellule précise, sans pouvoir activer automatiquement cette cellule au démarrage de la macro. Des éléments de réponse évoquent notamment la gestion des variables entre procédures et l'intérêt d'appeler explicitement les procédures lorsque l'on utilise un module, plutôt que d'en laisser l'exécution au lancement. D'autres échanges portent sur le contrôle des filtres, la création et le nommage de feuilles, et sur le comportement du copier-coller, notamment les pointillés indiquant une action en attente. En parallèle, certains conseillent de consulter des ressources externes comme la FAQ Excel et d'adopter une approche modulaire pour tester chaque étape de la macro.
je crois que le problème vient du fait que j'utilise les données d'une feuille A que je colle dans les cellules d'une feuille B, pour cela j'ai fait plusieurs procédures mais ces procédures je dois les mettre dans le code de la feuille A ou de la feuille B ?
Quand je mets les procédures dans le code de la feuille B alors dès que j'utilise la feuille A ça plante et inversement si je mets les procédures dans le code de la feuille A, dés que j'utilise la feuille B ça plante.
merci de m'aider
Range("B2: B" & i).Copy 'i correspond au nombre total de lignes
Worksheets("feuille A").Range("B7").Select 'ouverture de la feuille contenant dans laquelle on colle
ActiveSheet.PasteSpecial 'collage
Range("B").Copy 'je copie la colonne B
Range("J").PasteSpecial 'je la colle dans la colonne J de la même feuille
voici l'erreur obtenue :
run-time error 1004 : application-defined or object-defined error
Merci
code de la feuille "tableau" :
Public Sub remplir()
Worksheets("tableau").Select
For Each c In [b2:b60]
If c.Value Like "Total 1" Then
total_1 = c.Row 'on stocke le num de la ligne dans une variable
End If
If c.Value Like "Total 2" Then
total_2 = c.Row
total_2_bis = total_2 + 1
End If
If c.Value Like "Total 3" Then
total_3 = c.Row
total_3_bis = total_3 + 1
End If
If c.Value Like "Total 4" Then
total_4 = c.Row
End If
If c.Value Like "Total 5" Then
total_5 = c.Row
total_5_bis = total_5 + 1
total_6 = total_5 + 2
otoal_7 = total_5 + 3
total_7_bis = total_5 + 4
End If
Next
Range("B2: B" & total_7_bis).Copy
Worksheets("new tab").Range("B7").Select
ActiveSheet.PasteSpecial
Range("B").Copy
Range("J").PasteSpecial
End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionPourquoi ne pas mettre cettre procédure dans un module indépendant ?
Ensuite plutôt que "Worksheets("tableau").Select", j'opterai pour "Worksheets("tableau").Activate".
Je ferai également :
Worksheets("tableau").Range("B2: B" & total_7_bis).Copy
Worksheets("new tab").Range("B7").PasteSpecial
;o)
Mais je trouve ça un peu bizarre pck dans les autres langages comme java, c ou c++ d'habitude la procédure doit être appelée
Tu lances la procédure en te servant du menu Visual Basic dans les barres de menu Excel, ou par un raccourci.
Dans ce cas, la macro doit se trouver dans un module indépendant et non sur le module d'un feuille, réservé pour l'initialiser le cas échéant lors de son activation.
Attention, Excel n'est pas un outil de développement. Les macros servent uniquement à automatiser des tâches complexes ou répétitives.
;o)
Dim feuille As String
feuille = "ma feuille"
ActiveWorkbook.Worksheets.Add.Name = feuille
par contre je voudrais faire une boucle for each mais je crois que ma syntaxe est mauvaise :
For Each a In ["E" &val1 : "E" &val2]
en le compilant il m'indique une erreur.
merci
Dim feuille As String
feuille = "ma feuille"
ActiveWorkbook.Worksheets.Add.Name = feuille
mais maintenant je voudrais faire une boucle mais je crois que j'ai un problème de syntaxe car il me met une
erreur quand je compile :
For Each a In ["E" &lval1 : "E" &val2]
Il n'y a pas de questions bêtes. Bien souvent ceux sont les réponses qui sont bêtes !!!
Bon courage pour la suite et n'hésite pas à revenir.
;o)
PS: Pense à mettre résolu pour ce sujet.
j'ai un petit souci (encore!!) avec le programme suivant:
le problème se situe là où j'ai mis des points d'interrogations, parce que je veux récuperer le numéro de la ligne obtenue après l'autofilter fait juste au dessus :
Public Sub mise_a_jour()
Worksheets("work").Activate
For Each i In [f32:f3560]
If (i.Value <> 0) Then
Worksheets("references").Activate
Selection.AutoFilter field:=1, Criteria1:=i.Value
Worksheets("work").Range("M" & i.Row).Value = Worksheets("references").Range("C" & ?????).Value
ElseIf (i.Value = 0) And (Range("H" & i.Row).Value = "A1" Or Range("H" & i.Row).Value = "A2") Then
Range("M" & i.Row).Value = "A"
ElseIf (i.Value = 0) And (Range("H" & i.Row).Value = "B1" Or Range("H" & i.Row).Value = "B2") Then
Range("M" & i.Row).Value = "B"
ElseIf (i.Value = 0) And (Range("H" & i.Row).Value = "C1") Then
Range("M" & i.Row).Value = "C"
End If
Next
End Sub
MERCI
Une question peut être bête : Pourquoi faire un autofilter pour faire un test ensuite sur des valeurs ? L'autofilter ne change pas le numéro des lignes, il cache les numéros de ligne non affectés par le filtre.
;o)
par contre pour récuperer la ligne dont je t'avais parlé tout à l'heure, j'ai un petit souci pck au premier passage dans la boucle for j'obtiens ligne = 650, ensuite cette valeur ne se modifie pas quand la boucle for each continue.
Public Sub maj()
Worksheets("work").Activate
For Each i In [f32:f3560]
If (i.Value <> 0) Then
Worksheets("references").Activate
Worksheets("references").AutoFilterMode = False
Selection.AutoFilter field:=1, Criteria1:=i.Value
ligne = Selection.Row
MsgBox ("valeur de ligne = " & ligne) 'affichage permettant de verifier la valeur de la ligne
Worksheets("work").Range("M" & i.Row).Value = Worksheets("references").Range("C" & ligne).Value
end if
next
end sub
merci
Tu peux avoir peut être une explication sur le site de developpez.com, dans l'onglet MSOffice tu as la faq Excel. Il se peut que tu trouves ton bonheur.
;o)
@ +
;o)
- 1
- 2
j'ai un petit souci avec ma macro encore et toujours =)
j'ai fait une procédure dans laquelle il y a des variables dans lesquelles je stocke des valeurs, jusque là tout va bien, le souci c'est que je crée une autre procédure après qui doit utliser les variales générées dan la procédure précédente.
Quand je mets les noms des variables le débogueur ne les reconnait pas.
merci de m'aider
Les variables déclarées à l'intérieur d'une procédure ne sont vues et vivent que dans la procédure et durant l'exécution de cette procédure. Pour qu'une variable soit utilisée par plusieurs procédures, il faut la déclarée dans l'entête du module. Si la variable est déclarée Public, elle sera vu et pourra être utilisée en dehors du module. Si elle est déclarée Private, elle ne sera lue que dans le module où elle est déclarée.
;o)
ça marche nickel.
bonne journée
j'ai deux petits soucis avec ma macro, j'essaie de créer un tableau en passant par vba.
Je ne sais pas quelle propriété il faut utiliser pour délimiter les colonnes.
Mon autre prolème c'est qu'à la fin de ma fonction je fais un copier-coller et quand je lance la macro, dans la feuille où se fait le copier-coller la partie copier est entourée de pointillée et pareille pour la partie collée.
merci de m'aider