si cellule AT=1 copier valeur cellule AR

  • Initiateur de la discussion Initiateur de la discussion walyddu59
  • Date de début Date de début

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 !

walyddu59

XLDnaute Nouveau
Bonjour , le forum

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
 
Re : si cellule AT=1 copier valeur cellule AR

Salut , Pierrot93

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 .
 
Re : si cellule AT=1 copier valeur cellule AR

Re,

regarde ceci pour la boucle, copie et collage sur la même feuille... sinon modifier la destination :
Code:
Destination:=workbooks("NomClasseur.xls").sheets("NomFeuille").Cells(i, 37)
Code:
Dim i As Integer
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
 
Re : si cellule AT=1 copier valeur cellule AR

Re,

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
 
Re : si cellule AT=1 copier valeur cellule AR

Re,

é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
 
Re : si cellule AT=1 copier valeur cellule AR

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+
 
Re : si cellule AT=1 copier valeur cellule AR

Re,

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
 
- 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

Discussions similaires

Réponses
8
Affichages
1 K
Retour