Copier lignes d'1 autre classeur si condition a et condition b
Résolu/Fermé
A voir également:
- Copier lignes d'1 autre classeur si condition a et condition b
- Excel cellule couleur si condition texte - Guide
- Condition et excel - Guide
- Comment copier une vidéo youtube - Guide
- Aller à la ligne excel - Guide
- Super copier - Télécharger - Gestion de fichiers
2 réponses
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
Modifié par michel_m le 25/09/2015 à 14:32
Modifié par michel_m le 25/09/2015 à 14:32
Bonjour
je n'ai pas vu la condition en colonne D <>"NA"...
La couleur est- elle saisie manuellement ou par mise en forme conditionnelle ?
recopie t' on le format rouge dans le fichier "cible" ?
Michel
je n'ai pas vu la condition en colonne D <>"NA"...
La couleur est- elle saisie manuellement ou par mise en forme conditionnelle ?
recopie t' on le format rouge dans le fichier "cible" ?
Michel
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
28 sept. 2015 à 09:42
28 sept. 2015 à 09:42
Bonjour
ouf! tout ces imbrications avec des IF, des AND et des OR pas de la tarte pour commencer la semaine ! ==> un peu moins de cheveux !
nota: j'ai considéré qu'il y a vait du texte dans la cellule A3 feuil2
dans cette feuille2 a toi de faire les MEFC comme les bordures, couleurs etc
ouf! tout ces imbrications avec des IF, des AND et des OR pas de la tarte pour commencer la semaine ! ==> un peu moins de cheveux !
nota: j'ai considéré qu'il y a vait du texte dans la cellule A3 feuil2
dans cette feuille2 a toi de faire les MEFC comme les bordures, couleurs etc
Option Explicit
'------------------------------------------------------
Sub recopier_si()
Dim Derlig As Integer, T_ok, Cptr As Integer, Col As Byte, T_out, Idx As Integer
Dim Ligvid As Integer
Application.ScreenUpdating = False 'fige l'écran: confort et rapidité
With Sheets(1)
'--------mémorisation tableaux
Derlig = Columns("A").Find(what:="*", searchdirection:=xlPrevious).Row
T_ok = .Range("A4:H" & Derlig)
ReDim T_out(1 To UBound(T_ok), 1 To 8)
'-------récolte valeurs si conditions remplies
For Cptr = 1 To UBound(T_ok)
'd'après mise en forme conditionnelle
'si 'D<>"NA" et A <>0 et _
G=5 ou _
F="" ou _
H="" et A<>"NA" et C<>1 et E<>0 et E<>"PF" et E <>"I"
If T_ok(Cptr, 4) <> "NA" Then
If T_ok(Cptr, 1) <> 0 Then
If T_ok(Cptr, 7) = 5 Or T_ok(Cptr, 6) = "" Or _
T_ok(Cptr, 8) = "" And T_ok(Cptr, 1) <> "NA" And T_ok(Cptr, 3) <> 1 And _
T_ok(Cptr, 5) <> 0 And T_ok(Cptr, 5) <> "PF" And T_ok(Cptr, 5) <> "I" Then
'mémorisation valeurs A à H
Idx = Idx + 1
For Col = 1 To 8
T_out(Idx, Col) = T_ok(Cptr, Col)
Next Col
End If
End If
End If
Next Cptr
End With
'---------restitution
With Sheets(2)
Ligvid = .Columns("A").Find("", .Range("A3")).Row
.Cells(Ligvid, "A").Resize(UBound(T_out), 8) = T_out
.Activate
End With
End Sub
Bonjour,
Merci pour ce bout de code.
J'ai fait un copier-coller pour tester avec le fichier que j'ai envoyé et quand je le lance (via clic sur un bouton) j'ai l'erreur suivante qui apparaît :
"Erreur d'exécution '91' : variable objet ou variable de bloc With non définie" .
Quand je clic sur Débogage, il me sélectionne la ligne suivante :
"Derlig = Columns("A").Find(what:="*", searchdirection:=xlPrevious).Row"
Du coup, je me suis rappelé avoir lu qu'il fallait éviter de définir plusieurs variables en même temps et j'ai donc remplacé la première ligne de définition de variable par celle-ci "Dim Derlig As Integer, T_ok As Integer, Cptr As Integer, Col As Byte, T_out As Integer, Idx As Integer". Ce qui semble résoudre le problème de l'Erreur d'exécution '91'.
Par contre, j'ai une autre erreur qui est apparue (Erreur de compilation : Tableau attendu) avec la ligne suivante : "ReDim T_out(1 To UBound(T_ok), 1 To 8)"
Bàv,
Nicolas
Merci pour ce bout de code.
J'ai fait un copier-coller pour tester avec le fichier que j'ai envoyé et quand je le lance (via clic sur un bouton) j'ai l'erreur suivante qui apparaît :
"Erreur d'exécution '91' : variable objet ou variable de bloc With non définie" .
Quand je clic sur Débogage, il me sélectionne la ligne suivante :
"Derlig = Columns("A").Find(what:="*", searchdirection:=xlPrevious).Row"
Du coup, je me suis rappelé avoir lu qu'il fallait éviter de définir plusieurs variables en même temps et j'ai donc remplacé la première ligne de définition de variable par celle-ci "Dim Derlig As Integer, T_ok As Integer, Cptr As Integer, Col As Byte, T_out As Integer, Idx As Integer". Ce qui semble résoudre le problème de l'Erreur d'exécution '91'.
Par contre, j'ai une autre erreur qui est apparue (Erreur de compilation : Tableau attendu) avec la ligne suivante : "ReDim T_out(1 To UBound(T_ok), 1 To 8)"
Bàv,
Nicolas
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
>
Nicolas
Modifié par michel_m le 28/09/2015 à 11:32
Modifié par michel_m le 28/09/2015 à 11:32
le piège classique
ajouter un pont devant columns("A")
Derlig = .Columns("A").Find(what:="*", searchdirection:=xlPrevious).Row
le fait du point indique que columns("A") est dans le bloc feuil1
si feuilles est active(bouton de lancement) ,la recherche fin s'éxécute sur la feuille active cad 3 et donc T_ok est défini par 4 to 3, 1 to 8 d'où erreur
Du coup, je me suis rappelé avoir lu qu'il fallait éviter de définir plusieurs variables en même temps et j'ai donc remplacé la première ligne de définition de variable par celle-ci "Dim Derlig As Integer, T_ok As Integer, Cptr As Integer, Col As Byte, T_out As Integer, Idx As Integer
bin , c'est pas ce que j'ai marqué ?
éviter de définir plusieurs variables en même temps
non cela ne gène pas mais sent le "scolaire"
ajouter un pont devant columns("A")
Derlig = .Columns("A").Find(what:="*", searchdirection:=xlPrevious).Row
le fait du point indique que columns("A") est dans le bloc feuil1
si feuilles est active(bouton de lancement) ,la recherche fin s'éxécute sur la feuille active cad 3 et donc T_ok est défini par 4 to 3, 1 to 8 d'où erreur
Du coup, je me suis rappelé avoir lu qu'il fallait éviter de définir plusieurs variables en même temps et j'ai donc remplacé la première ligne de définition de variable par celle-ci "Dim Derlig As Integer, T_ok As Integer, Cptr As Integer, Col As Byte, T_out As Integer, Idx As Integer
bin , c'est pas ce que j'ai marqué ?
éviter de définir plusieurs variables en même temps
non cela ne gène pas mais sent le "scolaire"
Ca fonctionne parfaitement ! Un tout grand merci.
Il ne me reste plus qu'à regarder tout ça de plus près histoire de comprendre le fonctionnement de chaque ligne.
Concernant les définitions de variables... Peux-tu m'expliquer pourquoi cela fonctionne correctement avec ta ligne de code "Dim Derlig As Integer, T_ok, Cptr As Integer, Col As Byte, T_out, Idx As Integer" mais avec la ligne de code suivante "Dim Derlig As Integer, T_ok As Integer, Cptr As Integer, Col As Byte, T_out As Integer, Idx As Integer" VBA m'indique une erreur (Erreur de compilation : Tableau attendu) avec la ligne suivante : "ReDim T_out(1 To UBound(T_ok), 1 To 8)" ?
Il ne me reste plus qu'à regarder tout ça de plus près histoire de comprendre le fonctionnement de chaque ligne.
Concernant les définitions de variables... Peux-tu m'expliquer pourquoi cela fonctionne correctement avec ta ligne de code "Dim Derlig As Integer, T_ok, Cptr As Integer, Col As Byte, T_out, Idx As Integer" mais avec la ligne de code suivante "Dim Derlig As Integer, T_ok As Integer, Cptr As Integer, Col As Byte, T_out As Integer, Idx As Integer" VBA m'indique une erreur (Erreur de compilation : Tableau attendu) avec la ligne suivante : "ReDim T_out(1 To UBound(T_ok), 1 To 8)" ?
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
>
Nicolas
28 sept. 2015 à 12:11
28 sept. 2015 à 12:11
T_ok est t_out sont des variables-tableaux et comportent de nombres (p;e.: 5)et des textes(pe: "NA3) et est donc un type variant.et non integer
lorqqu'on ne précise pas le typte, le compilateur le considère comme un variant
coche "résolu" si le problème est résolu;
cordialement après ce petit casse-t^te ;o)
lorqqu'on ne précise pas le typte, le compilateur le considère comme un variant
coche "résolu" si le problème est résolu;
cordialement après ce petit casse-t^te ;o)
25 sept. 2015 à 15:55
Effectivement, dans le début de code que j'ai écrit, je n'ai pas encore abordé la condition D<>"NA", je m'étais d'abord penché sur la couleur.
La couleur dans la BD est mise en forme de manière conditionnelle. Pour ce qui est de recopier la mise en forme dans le fichier "cible" cela n'est pas nécessaire.
Je me rends compte que mon message initial n'a aucune mise en forme et n'est donc pas très lisible, j'en suis fort désolé :s
25 sept. 2015 à 16:48
hélas!
une astuce consisterait à se baser à la valeur déclenchant la couleur par exemple couleur si >5
peut-^tre avec une copie des des formules de déclenchement
par exemple:
dans F100 =(range("E" & i)>5)*1 m^ punition pour G et H
et la prise en charge
somme(F100:G100)>=1
mais si jes formules sont les m^mes dans chaque colonne
25 sept. 2015 à 16:57
Merci tout de même pour te réponse, je vais essayer de potasser la chose sur base de la formule de MEFC et non pas simplement sur la couleur...
25 sept. 2015 à 17:09
pour cela:
Mettre le classeur sans données confidentielles en pièce jointe sur https://www.cjoint.com/
et coller le raccourci proposé (clic droit) dans le message de réponse
Dans l'attente
26 sept. 2015 à 18:21
Voilà comme demandé.
http://www.cjoint.com/c/EIAquyCHw20