Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
Je réalise une macro pour mon stage , j'ai fini le début de la macro qui me permet normalement de copier par la biais d'une boucle les valeurs de la colonne AR si AT=1 sur la même ligne et d'ajouter un nouveaux classeur et collez les valeur de la colonne AR , la macro ne produit aucune erreur mais cela ne fonctionne pas je comprends pas pourquoi , j'ai tout revérifier mais rien n'y fait je bloque , si vous avez une solutions merci a vous de me la communiquer .
Code:
Sub Transfert()
Dim i As Integer
For i = 2 To i = 5000
If Feuil1.Cells(i, 36).Value = "1" Then
Cells(i, 36).Value.Copy
End If
Next
Range("H2").Select
Selection.Value = Lenom
Workbooks.Add
Feuil1.Cells(i, 37).Paste
On Error Resume Next
ActiveWorkbook.SaveAs Filename:="N:\Service RAMS - LCC\DN_Aff\Base de travail REX\Restitution qualité\" & Lenom & "F.xls"
End Sub
J'ai modifiez ce que tu ma envoyez mais ça me bloque des la 4eme ligne " Cells(i, 34).Value.Copy " , ça n'arrange pas mon problème , je pense plutot que cette erreur provient d'une erreur d’écriture quelque part mais je vois pas trop .
il n'ya pas moyen de tout coller , sinon je pense tout collez d'abord sur la meme feuille ensuite ajoutez un nouveaux classeur et tout coller , qu'en pense tu ?
donc cela ne fonctionne pas le code pour la destination semble incorrect ,
Code:
Sub Transfert()
Dim i As Integer
Dim lenom As Range
Destination = Workbooks("" & lenom & "f.xls").Sheets("Feuil1").Cells(i, 37)
With Feuil1
For i = 2 To 5000
If .Cells(i, 36).Value = "1" Then
.Cells(i, 36).Copy Destination:=.Cells(i, 37)
End If
Next i
End With
lenom = Range("H2").Value
On Error Resume Next
ActiveWorkbook.SaveAs = "N:\Service RAMS - LCC\DN_Aff\Base de travail REX\Restitution qualité\"
End Sub
édestination" est un argument pas une variable... d'autre part si tu utilises une variable "nom", préférable de l'initialiser avant...
Code:
Dim i As Integer, lenom As String
With Feuil1
lenom = .Range("H2").Value
For i = 2 To 5000
If .Cells(i, 36).Value = "1" Then
.Cells(i, 36).Copy Destination:=Workbooks("" & lenom & "f.xls").Sheets("Feuil1").Cells(i, 37)
End If
Next i
End With
Salut walyddu59 et le forum
Comme tu sembles un débutant, quelques conseils :
- Déclarer les variables c'est bien. Mais utilises plutôt des types qui peuvent recevoir le maximum admissible pour la valeur : Ta ligne devrait être déclarée en Long. De toute façon, excel utilise un Long pour travailler en RAM.
- Une variable doit toujours commencer par une majuscule => quand tu valides ta ligne de code entrée en minuscule, si ta variable déclarée n'as pas la première lettre qui passe en majuscule, c'est que tu as une faute de frappe. Sur une lettre, c'est pas utile, mais sur une variable explicite...
- Quand tu as un code qui ne fonctionne pas comme tu veux, fais du pas-à-pas en regardant l'évolution de tes variables, et ici ton test
- Aucune raison de tester 5000 lignes : c'est trop ou pas assez => demande à excel de calculer la dernière ligne à tester.
- VBA a une syntaxe proche du "langage parlé"... mais elle lui est propre !
Code:
For i = 2 To i = 5000
C'est ce qu'on dirait, mais pour excel, c'est :
Code:
For i = 2 To 5000
- Évite d'utiliser le nom informatique des feuilles. Utilise plutôt le nom de l'onglet. Tu ne connais le nom informatique que sur VBA, alors que le nom de l'onglet est visible sur la feuille de calcul. Et quand tu crées de nouvelles feuilles... Réserve plutôt le nom informatique pour les feuilles qui te servent de modèle.
- Utilises les indentations pour t'y retrouver : avec un code long, savoir dans quelle boucle, quel test on est permet de s'y retrouver plus facilement
Ton code : Les erreurs que j'y détecte :
Code:
For i = 2 To i = 5000
Corrigée plus haut
Code:
If Feuil1.Cells(i, 36).Value = "1" Then
En soi, pas d'erreur mais :
Feuil1 : nom informatique
Cells(i, 36).Value : Je suis obligé de vérifier que le nombre correspond bien à la colonne que je veux tester. Avec Cells(i, "AT"), j'en suis sûr. AT : colonne 46, AR : colonne 44 😀
"1" : on teste le chiffre (la lettre) 1, pas le nombre. Bien qu'excel fasse souvent l'amalgame, des fois il les différencie (1000<>"1000").
Code:
Cells(i, 36).Value.Copy
excel mémorise la valeur AJi dans le presse-papier. À la boucle i+1, il efface la valeur et la remplace par la nouvelle (en admettant que i et i+1 sont VRAI pour le test).
Code:
On Error Resume Next
En cas d'erreur, continuer. Ça, c'est le code préfèré des informatichien 😀 : en cas d'erreur, on continue comme si de rien n'était.
personnellement, j'aime bien quand excel me dit que j'ai fait une connerie... plutôt que de me bouziller une base données par exemple.
Pour un problème tel que celui-ci, il y a plusieurs solutions, plus ou moins rapides, mais je vais rester sur la tienne pour te donner un algorythme qui me semble plus cohérent :
- Créer un nouveau classeur
- Copier chaque valeur de Ar dont AT=1 dans le nouveau à travers une boucle
Une variante pourrait être :
- copier la feuille dans un nouveau classeur
- Sur la nouvelle feuille, supprimer (en commençant de la dernière ligne non vide en AT) les ligne dont AT<>1
Si tu es bloqué, revient sur le forum, sur le même topic, on pourra t'aider sans te donner directement un code. Le but me semblant être que tu comprennes ce que tu fais.
A+
Merci tout d'abord a Gorfael pour t'est conseils c'est super sympa , mais j'arrive toujours pas , j'ai modifiez le code pour le rendre plus simple mais toujours rien , il n'ya aucune erreur , la macro tourne bien mais rien n'est coller voici le nouveaux code :
Code:
Sub Transfert()
Dim i As Integer, lenom As String
With Feuil1
lenom = .Range("H2").Value
For i = 2 To 50
If .Cells(i, 36).Value = "1" Then
.Cells(i, 34).Copy Destination:=.Cells(i, 37)
End If
Next i
End With
End Sub
mets peut être un tout petit fichier en pièce jointe permettant de reproduire le cas... mais comme suggéré vérifie peut être le numéro des colonnes....
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD