VBA | Si contient alors copie sinon passer au suivant

Résolu/Fermé
Kirilov Messages postés 104 Date d'inscription dimanche 15 mars 2009 Statut Membre Dernière intervention 26 janvier 2022 - 25 oct. 2017 à 09:25
Kirilov Messages postés 104 Date d'inscription dimanche 15 mars 2009 Statut Membre Dernière intervention 26 janvier 2022 - 25 oct. 2017 à 12:15
Bonjour,
Je travaille sur un fichier Excel que j'ai besoin de ventiler sur plusieurs feuilles en fonction d'un critère.
J'aimerai passer par une macro qui permette de dire : Si la cell AD1=2 alors copie/colle la ligne 1 sur feuil2 et passer au suivant ET si la Cell AD1=3 alors copie/colle la ligne 1 sur feuil3 etc.
Tout ça pour 4 critères.

Mais je suis un vrai bras cassé en VBA et n'arrive pas à l'écrire.

Autre difficulté possible car je l'ai rencontré parfois lors de copier/coller : une partie des cellules contiennent du texte qui est parfois (souvent) supérieur à 255 caractères et lors de copies/colles ils se retrouvent tronqués.

Merci beaucoup de votre aide !
Cordialement,
Kirilov


5 réponses

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 699
25 oct. 2017 à 09:40
Bonjour,

Pour du code VBA, il faut connaitre précisément le contexte, aussi si tu pouvais nous mettre un exemple de structure des données, sans éléments personnels, avec les résultats souhaités expliqués clairement, ce serait plus facile de t'aider.
Pour communiquer ton classeur tu le télécharges sur https://www.cjoint.com/ (mode d'emploi) et tu mets ici le lien obtenu.
0
Kirilov Messages postés 104 Date d'inscription dimanche 15 mars 2009 Statut Membre Dernière intervention 26 janvier 2022 1
25 oct. 2017 à 10:28
Bonjour,

Vous trouverez la structure du fichier ici : http://www.cjoint.com/c/GJziCkcuipV

Merci de votre aide,

Kirilov
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 699
25 oct. 2017 à 11:05
Bonjour,

Avec cette macro tu devrais effectuer ta copie.
Public Sub copier()
Dim lig As Long
With Sheets("Matrice")
    For lig = 2 To .Cells(Rows.Count, "AD").End(xlUp).Row
        If .Cells(lig, "AD") = 1 Or .Cells(lig, "AD") = 2 Then
            .Range("A" & lig & ":AN" & lig).Copy _
            Destination:=Sheets("VAL_1").Cells(Sheets("VAL_1").Cells(Rows.Count, "A").End(xlUp).Row + 1, 1)
        End If
    Next lig
End With
End Sub

Si tu la lances plusieurs fois, la copie sera toujours effectuée à la suite.
0
Kirilov Messages postés 104 Date d'inscription dimanche 15 mars 2009 Statut Membre Dernière intervention 26 janvier 2022 1
25 oct. 2017 à 11:17
Bonjour Gbinforme,

Je viens de tester et cela ne fonctionne pas malheureusement.
La macro fait un copier/coller uniquement du dernier enregistrement qui contient en Cell AD la valeur 1, à l'exception de toutes les autres. Enfin c'est l'impression que cela me donne.

Kirilov
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 699
25 oct. 2017 à 11:28
re
c'est parce que ta colonne A est vide essaies ainsi
Public Sub copier()
Dim lig As Long
With Sheets("Matrice")
    For lig = 2 To .Cells(Rows.Count, "AD").End(xlUp).Row
        If .Cells(lig, "AD") = 1 Or .Cells(lig, "AD") = 2 Then
            .Range("A" & lig & ":AN" & lig).Copy _
            Destination:=Sheets("VAL_1").Cells(Sheets("VAL_1").Cells(Rows.Count, "AD").End(xlUp).Row + 1, 1)
        End If
    Next lig
End With
End Sub
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Kirilov Messages postés 104 Date d'inscription dimanche 15 mars 2009 Statut Membre Dernière intervention 26 janvier 2022 1
25 oct. 2017 à 12:15
MERCI BEAUCOUP.
Ca fonctionne à merveille et ça va me faire gagner un temps fou !

Bien à vous,

Kirilov
0